joh*_*odo 35 machine-learning uncertainty neural-network deep-learning keras
我想计算NN模型的确定性/置信度(参见我的深层模型不知道的内容) - 当NN告诉我图像代表"8"时,我想知道它是多么确定.我的模型99%确定它是"8"还是51%它是"8",但也可能是"6"?有些数字是相当暧昧的,我想知道模型只是"翻转硬币"的图像.
我已经找到了一些关于这个的理论着作,但是我把它放在代码中有困难.如果我理解正确的话,我应该多次评估测试图像,同时"消灭"不同的神经元(使用辍学)然后......?
在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,))
Run Code Online (Sandbox Code Playgroud)
问题:我应该如何预测这个模型,以便我也能确定预测?我会很感激一些实际的例子(最好是在Keras,但任何人都会这样做).
编辑:澄清一下,我正在寻找如何使用Yurin Gal概述的方法获得确定性(或解释为什么其他方法会产生更好的结果).
Mar*_*jko 26
如果您想实施辍学方法来衡量不确定性,您应该执行以下操作:
实现在测试期间也应用丢失的功能:
import keras.backend as K
f = K.function([model.layers[0].input, K.learning_phase()],
[model.layers[-1].output])
Run Code Online (Sandbox Code Playgroud)使用此函数作为不确定性预测器,例如以下列方式:
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
Run Code Online (Sandbox Code Playgroud)当然,您可以使用任何不同的函数来计算不确定性.
对票数最高的答案进行了一些更改。现在对我有用。
这是估计模型不确定性的一种方法。对于不确定性的其他来源,我发现https://eng.uber.com/neural-networks-uncertainty-estimation/很有帮助。
f = K.function([model.layers[0].input, K.learning_phase()],
[model.layers[-1].output])
def predict_with_uncertainty(f, x, n_iter=10):
result = []
for i in range(n_iter):
result.append(f([x, 1]))
result = np.array(result)
prediction = result.mean(axis=0)
uncertainty = result.var(axis=0)
return prediction, uncertainty
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8597 次 |
| 最近记录: |