测试保存的卷积自动编码器
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)
来获得测试损失。
我已经在 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)
来获得测试损失。