准确度指标在 Keras 的样本去噪自动编码器中意味着什么?



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

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

有关更多详细信息,请参阅此答案:当损失为均方误差 (MSE( 时,什么函数定义 Keras 中的精度?

相关内容

  • 没有找到相关文章

最新更新