Я работаю с образцом шумоподавляющего автоэнкодера Кераса; 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%. Может ли кто-нибудь сказать мне, почему есть разница?