Keras的样本降噪自动编码器中的精度指标意味着什么?

时间:2019-06-10 01:04:21

标签: python keras autoencoder

我正在使用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%。能告诉我为什么会有区别吗?

1 个答案:

答案 0 :(得分:0)

精度对于回归问题没有意义,因此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)

有关更多详细信息,请参考此答案: What function defines accuracy in Keras when the loss is mean squared error (MSE)?