自定义损失函数训练期间如何在numpy数组上工作

时间:2020-11-12 12:29:19

标签: python numpy tensorflow keras

我目前正在使用由tensorflow和keras实现的神经网络,我需要做的是调用一个函数,我无法重新实现它,它可以在numpy数组上而不是在Tensors上工作,我的第一个想法是只调用像这样的.numpy

def loss_gi(y_true, y_pred): # <class 'tensorflow.python.framework.ops.Tensor'>
  x = gamma(np.squeeze(y_true.numpy() , axis=0), np.squeeze(y_pred.numpy() , axis=0)) 
  return np.nansum(x)

with strategy.scope():
  model = hd_unet_model(INPUT_SIZE)
  model.compile(optimizer=Adam(lr=0.001), 
                loss=loss_gi)

伽玛返回体积的地方。
但是在Model.fit期间,如果尝试在Tensor上调用y.numpy,则会收到错误Tensor has no attribute numpy,这是因为.numpy 仅在急切执行中起作用,而在图执行中无效(在至少这是我的理解。)

有人知道一种创建适用于numpy数组的自定义损失函数的方法吗?

1 个答案:

答案 0 :(得分:0)

损失函数必须在TF中,以便产生梯度。使用Numpy损失函数会破坏TF库作为带张量的张量的整个想法。因此,您的选择是:

  1. 使用纯TF作为自定义损失函数。

  2. 如果y_true最初是在numpy中-在运行模型之前将y_true转换为TF。