gpt4 book ai didi

machine-learning - 如何使用 Keras 计算预测不确定性?

转载 作者:行者123 更新时间:2023-11-30 08:20:17 25 4
gpt4 key购买 nike

我想计算 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方法来衡量不确定性,您应该执行以下操作:

  1. 实现在测试期间也应用dropout的函数:

    import keras.backend as K
    f = K.function([model.layers[0].input, K.learning_phase()],
    [model.layers[-1].output])
  2. 使用此函数作为不确定性预测器,例如通过以下方式:

    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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com