测试保存的卷积自动编码器

Testing a saved Convolutional autoencoder

我已经在 Keras 中训练并保存了一个卷积自动编码器。在以 .h5 格式保存模型之前,它的训练损失为 0.2394,验证损失为 0.2586。在测试保存的模型时,我得到的损失是验证损失的两倍多,0.6707。我实际上是用训练数据中的样本对其进行测试,只是为了看看我是否会得到与训练期间相同或什至更接近的损失。

这是我计算损失的方法,其中 'total' 是我传递给测试模型的图像总数

score = np.sqrt(metrics.mean_squared_error(predicteds,images))
print ('Loss:',score/total)

我计算测试损失的方式是否有误?

这里是模型编译

autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')

并训练冗长

Epoch 18/20 167/167 [==============================] - 462s 3s/step - loss: 0.2392 - val_loss: 0.2585

Epoch 19/20 167/167 [==============================] - 461s 3s/step - loss: 0.2399 - val_loss: 0.2609

Epoch 20/20 167/167 [==============================] - 475s 3s/step - loss: 0.2394 - val_loss: 0.2586

我认为您混淆了指标和损失函数。

根据您的 model.compile(),您正在使用 binary_crossentropy 损失函数。这意味着详细中提到的损失与二进制交叉熵有关(loss - 训练损失和 val_loss - 验证损失)。

您正在使用 RMSE 对模型进行评分,然后将 RMSE 与二元交叉熵损失进行比较。

要使用 MSE 进行训练或使用其他可比较的指标,您需要使用 MSE 损失编译模型或使用 MSE 作为指标。有关 keras.losses and keras.metrics 的更多信息,请查看文档。

假设您遵守 autoencoder.compile(optimizer='adam', loss='mean_squared_error')。但是它看到你在np.sqrt(metrics.mean_squared_error(predicteds,images))中使用均方根误差来计算损失而不是均方误差。当一个数小于 1 时,它的平方根大于它本身。也许这就是为什么你的测试损失比你的训练损失大得多。顺便说一句,你可以使用autoencoder.evaluate(images, images)来获得测试损失。