Что означают показатели точности в автоэнкодере с шумоподавлением Keras?

Я работаю с образцом шумоподавляющего автоэнкодера Кераса; https://keras.io/examples/mnist_denoising_autoencoder/

Во время компиляции я использую следующие параметры:

autoencoder.compile(loss='mse', optimizer= Adadelta, metrics=['accuracy'])

Затем следует обучение. Я тренировался сознательно БЕЗ шумных тренировок data(x_train_noisy), а просто пытался восстановиться x_train.

autoencoder.fit(x_train, x_train, epochs=30, batch_size=128)

После обучения 60 000 вводов цифр MNIST я получил точность 81,25%. Означает ли это, что 60000 * 81,25% изображений ИДЕНТИЧНО восстановлены (равны исходному входному пикселю за пикселем), то есть 81,25% выходных изображений из автокодировщика являются ИДЕНТИЧНЫМИ к их входным аналогам, или что-то еще?

Кроме того, я также провел ручную проверку, сравнивая выходные данные и исходные данные (60000 матриц 28X28) пиксель за пикселем, считая ненулевые элементы из их различий:

    x_decoded = autoencoder.predict(x_train)
    temp = x_train*255
    x_train_uint8 = temp.astype('uint8')
    temp = x_decoded*255
    x_decoded_uint8 = temp.astype('uint8')
    c = np.count_nonzero(x_train_uint8 - x_decoded_uint8)
    cp = 1-c /60000/28/28

И все же cp составляет всего около 71%. Может ли кто-нибудь сказать мне, почему есть разница?


person Theron    schedule 10.06.2019    source источник


Ответы (1)


Точность не имеет смысла для задачи регрессии, поэтому образец keras не использует эту метрику во время autoencoder.compile.

В этом случае keras рассчитывает точность в соответствии с этой метрикой.

binary_accuracy

def binary_accuracy(y_true, y_pred):
    return K.mean(K.equal(y_true, K.round(y_pred)), axis=-1)

Используя эту реализацию numpy, вы должны получить то же значение, что и вывод Keras для точности проверки в конце обучения.

x_decoded = autoencoder.predict(x_test_noisy)
acc = np.mean(np.equal(x_test, np.round(x_decoded)))
print(acc)

Дополнительные сведения см. В этом ответе: Какая функция определяет точность в Keras, когда потеря представляет собой среднеквадратичную ошибку (MSE)?

person Manoj Mohan    schedule 10.06.2019
comment
Понятно, много ура. Итак, в моем случае, то есть я хочу сравнить x_decocded и x_train пиксель за пикселем, должен ли я написать свою собственную функцию точности или есть что-то доступное в Keras, которое я могу принять? Кроме того, по природе автоэнкодера, то есть он имеет тенденцию воспроизводить свои входные данные, есть ли какие-либо общие рекомендации по использованию выбора функции потерь и показателей? - person Theron; 10.06.2019