python - 如何在 KERAS 中计算 PSNR 指标
问题描述
我正在尝试为我的 keras autoencoder convnet 模型计算 PSNR 指标。但是,我遇到了一个错误。请帮助检查和纠正问题。谢谢
import math
from keras import backend as K
def PSNR(y_true, y_pred):
max_pixel = 1.0
return 10.0 * math.log10((max_pixel ** 2) / (K.mean(K.square(y_pred -
y_true))))
adam = optimizers.Adam(lr=0.0001)
autoencoder.compile(loss='mse', metrics=[PSNR], optimizer=adam)
完整的回溯是: Traceback(最近一次调用最后一次):
文件“”,第 1 行,在 autoencoder.compile(loss='mse', metrics=[PSNR], optimizer=adm)
文件“C:\Users\LW\Anaconda3\envs\tensorflow_demo\lib\site-packages\keras\engine\training.py”,第 451 行,编译 handle_metrics(output_metrics)
文件“C:\Users\LW\Anaconda3\envs\tensorflow_demo\lib\site-packages\keras\engine\training.py”,第 420 行,在 handle_metrics mask=masks[i])
文件“C:\Users\LW\Anaconda3\envs\tensorflow_demo\lib\site-packages\keras\engine\training_utils.py”,第 404 行,加权 score_array = fn(y_true, y_pred)
文件“”,第 8 行,在 PSNR 返回 10.0 * math.log10((max_pixel ** 2) / (K.mean(K.square(y_pred - y_true))))
TypeError:必须是实数,不是 Tensorr
请让我知道如何解决这个问题
解决方案
对我来说,Matias Valdenegro 的回答效果不佳。我花了将近一天的时间来找出我的模型出了什么问题,但最后我发现 Valdenegro 写的函数是错误的。
这是我修改的内容。
首先,不要乘以 2.303。相反,分开。因为自然对数大于以 10 为底的对数。
其次,根据keras api,K.mean中应该有一个'axis = -1'参数来计算mse。
所以,函数看起来像
def PSNR(y_true, y_pred):
max_pixel = 1.0
return (10.0 * K.log((max_pixel ** 2) / (K.mean(K.square(y_pred - y_true), axis=-1)))) / 2.303
推荐阅读
- python - 难以在 manim 中更改 Axes 的轴长度
- python - 具有内容类型的 Python 请求是 application/x-www-form-urlencoded 不起作用
- video - FFmpeg 将一个视频叠加到另一个视频上,混音,缩放叠加的视频并将其定位在右下角
- php - 在通过functions.PHP加载的内容中使用HREF中的短代码
- c++ - Qt GIF 创建:使用 gif-h 库时交换颜色
- logging - 在 Fluentd 中将字符串参数解析为 json
- math - 如何在由 3D 点组成的三角形内找到 2D 坐标的高度?
- javascript - JavaScript 函数仅适用于 Windows 机器
- docker - 如何运行 selenium java 测试用例并将测试框架从 Mac 主机复制到 Ubutnu Docker 容器
- email - 电子邮件未使用 Sendgrid SMTP 传送