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

Python 测试保存的卷积自动编码器,python,keras,deep-learning,anomaly-detection,Python,Keras,Deep Learning,Anomaly Detection,我在Keras中培训并保存了一个卷积自动编码器。在以.h5格式保存模型之前,它的训练损失为0.2394,验证损失为0.2586。在测试保存的模型时,我得到的损失是验证损失的两倍多,即0.6707。我实际上是用训练数据中的样本来测试它,只是想看看我是否会像训练时一样损失,或者更接近 下面是我如何计算损失的,其中“total”是我传递用于测试模型的图像总数 score = np.sqrt(metrics.mean_squared_error(predicteds,images)) print ('L

我在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')
和训练冗长

纪元18/20 167/167 462s 3s/步-损耗:0.2392-瓦卢损耗:0.2585

纪元19/20 167/167 461s 3s/步-损耗:0.2399-瓦卢损耗:0.2609

纪元20/20 167/167 475s 3s/步-损耗:0.2394-瓦卢损耗:0.2586


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

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

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


要使用MSE进行培训或使用其他可比较的度量,您需要编译带有MSE损失的模型或使用MSE作为度量。有关和的更多信息,请查看文档。

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

您可以分享一些代码(模型编译)和培训结果(详细)吗?这将有助于理解模型使用的损失和度量。当然@SkillSnocker,我已经在帖子中添加了编译代码和详细信息,请参阅编辑。我已经尝试使用
autoencoder.compile进行编译(optimizer='adam',loss='mean_squared_error')
,但仍然得到了相同的结果。这一个有效,我也意识到我的训练和验证图像是标准化的,但不是我的测试集。在对其进行正常化后,使用
autoencoder时,损失已降至可接受的值。评估(图像,图像)
我得到的损失为
2517.8763163798562