- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想计算 NN 模型的确定性/置信度(参见 What my deep model doesn't know ) - 当 NN 告诉我图像代表“8”时,我想知道它的确定性如何。我的模型 99% 确定它是“8”还是 51% 确定它是“8”,但也可能是“6”?有些数字相当模糊,我想知道模型只是在“抛硬币”的图像中。
我找到了一些关于此的理论著作,但我很难将其放入代码中。如果我理解正确,我应该多次评估测试图像,同时“杀死”不同的神经元(使用 dropout),然后......?
在处理 MNIST 数据集时,我正在运行以下模型:
from keras.models import Sequential
from keras.layers import Dense, Activation, Conv2D, Flatten, Dropout
model = Sequential()
model.add(Conv2D(128, kernel_size=(7, 7),
activation='relu',
input_shape=(28, 28, 1,)))
model.add(Dropout(0.20))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(Dropout(0.20))
model.add(Flatten())
model.add(Dense(units=64, activation='relu'))
model.add(Dropout(0.25))
model.add(Dense(units=10, activation='softmax'))
model.summary()
model.compile(loss='categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy'])
model.fit(train_data, train_labels, batch_size=100, epochs=30, validation_data=(test_data, test_labels,))
我应该如何使用这个模型进行预测,以便我也能得到预测的确定性?我会欣赏一些实际的例子(最好是在 Keras 中,但任何都可以)。
为了澄清,我正在寻找一个如何使用 the method outlined by Yurin Gal 获得确定性的示例(或解释为什么其他方法会产生更好的结果)。
最佳答案
如果您想实现dropout方法来衡量不确定性,您应该执行以下操作:
实现在测试期间也应用dropout的函数:
import keras.backend as K
f = K.function([model.layers[0].input, K.learning_phase()],
[model.layers[-1].output])
使用此函数作为不确定性预测器,例如通过以下方式:
def predict_with_uncertainty(f, x, n_iter=10):
result = numpy.zeros((n_iter,) + x.shape)
for iter in range(n_iter):
result[iter] = f(x, 1)
prediction = result.mean(axis=0)
uncertainty = result.var(axis=0)
return prediction, uncertainty
当然,您可以使用任何不同的函数来计算不确定性。
关于machine-learning - 如何使用 Keras 计算预测不确定性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43529931/
我有一个非常简单的目标:编译一个 Scala 类,然后从另一个 Scala 脚本中加载它。问题是 Scala 似乎缓存了(不确定在哪里)我创建的类,并且不尊重后续更改。 以下几行创建一个包含两个 .s
我在 WebSphere 上运行的 Java EE 应用程序发生了一种非常非常奇怪的情况。 EAR --someJar.jar ----config/propfile.properties
我在使用 python 不确定性包时遇到了困难。我必须用python评估实验数据,我已经这样做了一段时间但从未遇到以下问题: >>>from uncertainties import ufloat >
我有phabricator设置。作为 git 的新手,确保我自己的配置文件(可能还有其他文件中的一些 hack)与来自上游的配置文件共存的理智/正确方法是什么? 最佳答案 将您的更改保存在单独的分支上
我今天花了一些时间,试图制作我的第一个 maven 管理的 Google 应用引擎 1.5.4 + GWT 2.4.0 构建。 我终于进入了所有内容都可以编译并且 gae:run 目标起作用的阶段。这
在类中,您可以在其中创建字段,如以下示例中的 int bar 。 Class foo{ int bar; foo(int bar){ bar = bar; }
我正在尝试运行我的程序,但在几次运行中我遇到了一个错误: terminate called after throwing an instance of 'std::system_error' wh
我必须制作具有 epsilon 转换的非确定性有限自动机。我更像是一个 c、c#、JavaScript 的人,但我的大学出于某种原因认为 python 是唯一的出路,所以今天我学习了 python,但
你怎么得到sklearn's SGDClassifier以显示其预测的不确定性? 我正在尝试确认 SGDClassifier 将报告不严格对应于任何标签的输入数据的概率为 50%。但是,我发现分类器始
下面是我导出的 java headless selenium 测试用例代码,可以在 IDE 中正常运行。 package pack; import java.util.regex.Pattern; i
我是一名优秀的程序员,十分优秀!