小编Mat*_*ith的帖子

为什么在Keras中改变我的验证集会改变我的模型的性能?

为什么我很困惑:

如果我在示例[A,B,C]上测试我的模型,它将获得一定的准确性.如果我在示例[C,B,A]上测试相同的模型,它应该获得相同的精度.换句话说,改组示例不应该改变我的模型的准确性.但这似乎发生在下面:

一步步:

这是我训练模型的地方:

model.fit_generator(batches, batches.nb_sample, nb_epoch=1, verbose=2,
                    validation_data=val_batches,
                    nb_val_samples=val_batches.nb_sample)
Run Code Online (Sandbox Code Playgroud)

这是我测试模型的地方,不需要改组验证集:

gen = ImageDataGenerator()
results = []
for _ in range(3):
    val_batches = gen.flow_from_directory(path+"valid", batch_size=batch_size*2,
                                          target_size=target_size, shuffle=False)
    result = model.evaluate_generator(val_batches, val_batches.nb_sample)
    results.append(result)
Run Code Online (Sandbox Code Playgroud)

结果如下(val_loss,val_acc):

[2.8174608421325682, 0.17300000002980231]
[2.8174608421325682, 0.17300000002980231]
[2.8174608421325682, 0.17300000002980231]
Run Code Online (Sandbox Code Playgroud)

请注意,验证的准确性是相同的.

这是我测试模型的地方,带有一个混乱的验证集:

results = []
for _ in range(3):
    val_batches = gen.flow_from_directory(path+"valid", batch_size=batch_size*2,
                                          target_size=target_size, shuffle=True)
    result = model.evaluate_generator(val_batches, val_batches.nb_sample)
    results.append(result)
Run Code Online (Sandbox Code Playgroud)

结果如下(val_loss,val_acc):

[2.8174608802795409, 0.17299999999999999]
[2.8174608554840086, 0.1730000001192093]
[2.8174608268737793, 0.17300000059604645]
Run Code Online (Sandbox Code Playgroud)

请注意,尽管验证集未更改且模型未更改,但验证精度仍然不一致.这是怎么回事?


注意:

我每次都在评估整个验证集.model.evaluate_generator在评估模型之后返回等于val_batches.nb_sample的示例数,即验证集中的示例数.

python machine-learning neural-network deep-learning keras

9
推荐指数
1
解决办法
1428
查看次数

如何告诉 tmux 在终止窗格后自动调整窗格大小?

当我有三个宽度相等的窗格时,如下所示:

|------|------|------|

然后我杀死一个窗格,我的窗格可能看起来像这样:

|------|-------------|

但我希望它们自动看起来像这样:

|---------|---------|


为了手动执行此操作,我使用select-layout even-horizontal热键。

也许有一种方法可以tmux select-layout even-horizontal在窗格被杀死后自动进入。

tmux

5
推荐指数
1
解决办法
3378
查看次数

如何查看图片的频道顺序?

将图像加载到Python中,如下所示,我如何知道通道的顺序?(例如BGR或RGB)

from PIL import Image
import numpy as np

image_pil = Image.open("Stonehenge.jpg")
image_np = np.array(image_pil)
image_np[0][0]
Run Code Online (Sandbox Code Playgroud)

结果

array([ 52, 123, 155], dtype=uint8)
Run Code Online (Sandbox Code Playgroud)

具体问题

我如何知道52红色通道,蓝色通道还是其他通道?或者这个问题在概念层面上没有意义吗?


笔记

在一个类似的Java而不是Python的问题中,一个人声称:

如果您正在读取图像文件,或者您可以访问读入该文件的代码,请知道它是:

  • BGR命令,如果你使用cv2.imread(),
  • RGB命令,如果你使用mpimg.imread(),(假设导入matplotlib.image为mpimg)

如果您不知道文件是如何打开的,则接受的答案BufferedImage非常适合Java.

python numpy image colors python-imaging-library

5
推荐指数
1
解决办法
6846
查看次数

构建时如何使bazel使用外部存储?

用bazel构建某些代码时,我的存储空间不足。我希望bazel将其存储在USB驱动器中,而不是存储在我的~/.cache文件夹中。我如何告诉bazel执行此操作?

linux bazel

3
推荐指数
2
解决办法
2627
查看次数

“单位”四元数和“身份”四元数有什么区别?

我一直在使用 www.opengl-tutorial.org/intermediate-tutorials/tutorial-17-quaternions/ 上的指南来学习 OpenGL。本指南说...

glm::quat q;

...创建恒等四元数(无旋转)。

实验表明 q = [0, 0, 0, 0]。使用它作为根骨骼的父方向会导致任何骨骼都不会旋转。他们失去了所有轮换。

导游说...

四元数是一组 4 个数字,[xyzw],它以下列方式表示旋转:

// RotationAngle 以弧度为单位

x = RotationAxis.x * sin(RotationAngle / 2)

y = RotationAxis.y * sin(RotationAngle / 2)

z = RotationAxis.z * sin(RotationAngle / 2)

w = cos(旋转角度/2)

... 和 ...

[0 0 0 1] (w=1) 表示angle = 2*acos(1) = 0,所以这是一个单位四元数,根本不旋转。

我一直在试验一个骨架系统,其中每个骨骼都继承其父母的方向,然后在其上应用自己的旋转。

如果我使用“身份”四元数作为根骨骼的“父”方向,则根本不会旋转任何骨骼。如果我使用“单位”轮换,一切都很好。

当我将骨骼的初始方向设置为“身份”或“单位”四元数时,它会按照我的意愿显示。但是,当我将用户输入的欧拉角转换为方向时,我会旋转 180 度。我所做的转换是:

        glm::vec3 eulers(glm::radians(pose.lng_rotate),
                         glm::radians(pose.lat_rotate),
                         glm::radians(pose.att_rotate));

        pose.orientation = glm::quat(eulers);
Run Code Online (Sandbox Code Playgroud)

注意:我在这里使用“lng”、“lat”和“att”旋转,因为当骨骼继承父旋转时,“x”轴可能不再是“x”轴。

我注意到的最后一件奇怪的事情是我使用glm::mat4_cast了每种类型的四元数,然后乘以一个 identity glm::vec4。“身份”四元数不旋转向量,但“单位”四元数导致向量反转(乘以 -1)向量的 x 和 …

3d rotation

2
推荐指数
1
解决办法
5371
查看次数

如何预测 Promise.then 链上的微任务顺序?

决定此代码输出的 JavaScript 规则是什么?:

Promise.resolve()
    .then(() => console.log("Microtask 1"))
    .then(() => console.log("Microtask 11"));

Promise.resolve()
    .then(() => console.log("Microtask 2"))
    .then(() => console.log("Microtask 22"))
Run Code Online (Sandbox Code Playgroud)

这是输出:

Microtask 1
Microtask 2
Microtask 11
Microtask 22
Run Code Online (Sandbox Code Playgroud)

但为什么这不是输出?:

Microtask 1
Microtask 11
Microtask 2
Microtask 22
Run Code Online (Sandbox Code Playgroud)

javascript event-loop promise es6-promise

2
推荐指数
1
解决办法
121
查看次数

当我们调用 IUnknown::Release 时会发生什么

例如,在以下代码中:

ID3D11Texture2D* texture2d; 

    HRESULT result = mSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*) &texture2d);//mSwapChain is a swap chain, as obvious

    result = mDevice->CreateRenderTargetView(texture2d, 0, &mTargetView);

    texture2d->Release();
Run Code Online (Sandbox Code Playgroud)

我真的很困惑在调用 release 之后交换链中的后台缓冲区会发生什么。目前我认为可能发生的是,指针被释放,而不会影响后台缓冲区本身。不过,我需要一个更详细的答案,因为我很难理解这个概念。

directx directx-11

1
推荐指数
1
解决办法
475
查看次数