【问题标题】:What Does Accuracy Metrics Mean in Keras' Sample Denoising Autoencoder?Keras 的样本去噪自动编码器中的准确度指标意味着什么?
【发布时间】:2019-06-10 01:04:21
【问题描述】:

我正在使用 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% 的图像被 PERFECTLY 恢复(等于原始输入逐个像素),即自动编码器的 81.25% 输出图像是 IDENTICAL给他们的输入对应物,还是其他什么?

此外,我还通过逐个像素比较输出和原始数据(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% 左右。谁能告诉我为什么会有差异?

【问题讨论】:

    标签: python keras autoencoder


    【解决方案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)
    

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

    【讨论】:

    • 我明白了,非常高兴。所以在我的情况下,也就是说,我想逐个像素地比较 x_decocded 和 x_train ,我应该编写自己的精度函数,还是在 Keras 中有任何可用的东西我可以采用?此外,由于自动编码器的性质,即它倾向于重现其输入,是否有关于使用选择损失函数和指标的一般准则?
    猜你喜欢
    • 2016-06-03
    • 2018-10-05
    • 1970-01-01
    • 2017-05-05
    • 2020-11-13
    • 1970-01-01
    • 2017-02-28
    • 2021-07-10
    • 2018-09-16
    相关资源
    最近更新 更多