具有TensorFlow后端的Keras中的自定义丢失功能用于图像

时间:2017-06-28 14:26:38

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

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

loss function

我使用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'

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

2 个答案:

答案 0 :(得分:4)

在我看来,不是使用" 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

答案 1 :(得分:2)

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

更改第一行:

n = K.shape(pred_depth)[0]

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