【发布时间】:2021-02-24 11:01:47
【问题描述】:
我目前正在研究一个用 tensorflow 和 keras 实现的神经网络,我需要做的是调用一个我无法重新实现的函数,它适用于 numpy 数组而不是张量,我的第一个想法是调用.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 期间,如果您尝试在张量上调用y.numpy,则会收到错误Tensor has no attribute numpy,这是因为.numpy 仅适用于急切执行而不适用于图形执行(至少这是我所理解的)。
有人知道如何创建适用于 numpy 数组的自定义损失函数吗?
【问题讨论】:
-
你需要在 Eager 模式下工作才能实现。
-
损失函数必须在 TF 中才能产生梯度。使用 Numpy 损失函数破坏了 TF 库作为具有梯度的张量的整个想法。 1)据我所知,您的 y_pred 和 y_true 来自 tf.Tensors。为什么不将纯 TF 用于自定义损失函数? 2)如果 y_trus 最初是在 numpy 中 - 你无论如何都会在函数内将它转换为 TF 。那么为什么不在运行模型之前将 y_true 转换为 TF。
-
@sooobus 是的,你是对的,但我没有这样做,我不知道我应该怎么做,我尝试使用 tf.numpy_fction 但我没有得到任何结果
标签: python numpy tensorflow keras