我目前正在使用由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数组的自定义损失函数的方法吗?
答案 0 :(得分:0)
损失函数必须在TF中,以便产生梯度。使用Numpy损失函数会破坏TF库作为带张量的张量的整个想法。因此,您的选择是:
使用纯TF作为自定义损失函数。
如果y_true最初是在numpy中-在运行模型之前将y_true转换为TF。