【问题标题】:Custom loss function in Keras with TensorFlow Backend for imagesKeras 中带有 TensorFlow 后端的图像自定义损失函数
【发布时间】:2017-12-01 23:43:30
【问题描述】:

我是神经网络和 keras 的新手,在编写这个自定义损失函数时遇到了麻烦:

我使用 TensorFlow 作为后端。看到其他例子,损失函数是这样写的:

from keras import backend as K
def depth_loss_func(pred_depth,actual_depth):
    n = pred_depth.shape[0]
    di = K.log(pred_depth)-K.log(actual_depth)
    di_sq = K.square(di)
    sum_d = K.sum(di)
    sum_d_sq = K.sum(di_sq)
    loss = ((1/n)*sum_d_sq)-((1/(n*n))*sum_d*sum_d) # getting an error in this step
    return loss

我得到的错误是: TypeError: unsupported operand type(s) for /: 'int' and 'Dimension'

我也不确定如何将学习率纳入损失函数。谢谢你的帮助。

【问题讨论】:

  • 你不把pred_depthactual_depth混在一起吗?

标签: python-3.x tensorflow keras loss-function


【解决方案1】:

张量的形状是未知的,直到您在图形执行期间向损失函数提供输入。为了在执行时动态计算形状,您可以使用K.shape()

将第一行更改为:

n = K.shape(pred_depth)[0]

关于学习率,只需将其作为另一个参数传递即可。如果它是动态的,您可以通过model.optimizer.lr.get_value() 访问它。

【讨论】:

    【解决方案2】:

    不要使用“n”,在我看来这似乎不是最优雅的方式,而是尝试使用K.mean 函数:

    di = K.log(pred_depth)-K.log(actual_depth)
    
    di_mean = K.mean(di)
    sq_mean = K.mean(K.square(di))
    
    loss = (sq_mean - (lamb*di_mean*di_mean)) # getting an error in this step
    

    【讨论】:

      猜你喜欢
      • 2017-04-21
      • 1970-01-01
      • 2018-12-26
      • 2018-08-06
      • 2018-10-28
      • 2017-12-29
      • 1970-01-01
      • 2020-10-21
      • 1970-01-01
      相关资源
      最近更新 更多