Я хотел бы рассчитать достоверность / достоверность модели 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,))
Как мне предсказать с помощью этой модели, чтобы я был уверен в предсказаниях? Я был бы признателен за несколько практических примеров (желательно в Керасе, но подойдет любой).
Чтобы уточнить, я ищу пример того, как получить уверенность, используя метод, описанный Юрин Гал (или объяснение того, почему какой-то другой метод дает лучшие результаты).