python - TypeError: tuple - keras 自定义错误上的元组
问题描述
我想制作一个自定义损失函数,使用 Keras 比较两个图像之间的梯度。所以我做了一个像这样的代码:
def mean_gradient_error(y_true,y_pred):
alpha = 0.6
if not B.is_tensor(y_pred):
y_pred = B.constant(y_pred)
y_true = B.cast(y_true, y_pred.dtype)
yt_grad = B_.tf.image.image_gradients(y_true)
yp_grad = B_.tf.image.image_gradients(y_pred)
dotprod = B.mean(1-B.sum(y_pred*y_true,axis=-1))
grad_diff = (yt_grad-yp_grad)
gerr = B.mean(grad_diff**2,axis=-1)
return (1-alpha)*dotprod+alpha*gerr
此处 dotprod 运行良好,但 grad_diff 输出如下错误消息:
TypeError: unsupported operand type(s) for -: 'tuple' and 'tuple'
我认为 keras 说我应该更改 yp_grad 和 yt_grad 的类型,但我没有得到我应该做的。
我应该添加哪个代码?
解决方案
国家的文件tf.image.image_gradients
:
返回 一对张量 (dy, dx) 持有垂直和水平图像梯度(1 步有限差分)。
该函数返回一个元组。你不能减去元组。
一种可能性是计算 x 和 y 的差异,然后将两个误差相加。
yt_grad = B_.tf.image.image_gradients(y_true)
yp_grad = B_.tf.image.image_gradients(y_pred)
grad_diff_x = (yt_grad[0]-yp_grad[0])
grad_diff_y = (yt_grad[1]-yp_grad[1])
gerr = B.mean(grad_diff_x**2,axis=-1) + B.mean(grad_diff_y**2,axis=-1)
推荐阅读
- python-3.x - 如何使用python在文本文档的每一行中打印不同的单词?
- python - 将比较运算符分配给变量?
- vagrant - 如何修复未定义的流浪变量?
- sharepoint-online - SharePoint 反应 TextField onChanged 错误
- reactjs - 渲染大量组件实例时 React-select 导致加载缓慢
- tcl - 如何在tcl中添加列表的元素
- reactjs - 反应管理员嵌套资源问题
- python - Python:PD.ExcelWriter 不追加数据
- python - Python-requests [('Connection aborted.', TimeoutError(10060) ]
- javascript - 从列中获取数组值