Python 如何在自定义丢失功能培训期间使用numpy阵列

Python 如何在自定义丢失功能培训期间使用numpy阵列,python,numpy,tensorflow,keras,Python,Numpy,Tensorflow,Keras,我目前正在研究一个用tensorflow和keras实现的神经网络,我需要做的是调用一个函数,我无法重新实现,它可以在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()

我目前正在研究一个用tensorflow和keras实现的神经网络,我需要做的是调用一个函数,我无法重新实现,它可以在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)
def loss_gi(y_true,y_pred):#
x=gamma(np.squence(y_true.numpy(),轴=0),np.squence(y_pred.numpy(),轴=0))
返回np.nansum(x)
使用strategy.scope():
模型=hd\U unet\U模型(输入大小)
编译(优化器=Adam(lr=0.001),
损失=损失(gi)
其中gamma返回一个卷。
但是在
Model.fit
过程中,如果尝试调用张量上的
y.numpy
,则会出现错误
Tensor没有属性numpy
,这是因为
.numpy
仅在急切执行中工作,而不在图形执行中工作(至少我理解这一点)


有人知道一种在numpy阵列上创建自定义损耗函数的方法吗?

损耗函数必须在TF中,以便产生梯度。使用Numpy损失函数消除了TF库作为带有梯度的张量的想法。因此,您的选择是:

  • 将纯TF用于自定义损耗函数

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


  • 你需要在渴望模式下工作才能达到这个目标。损失函数必须在TF中,这样它才能产生梯度。使用Numpy损失函数消除了TF库作为带有梯度的张量的想法。1) 据我所见,你的y_pred和y_true是tf.张量。为什么不将纯TF用于自定义损耗函数?2) 如果y_trus最初是在numpy中,那么无论如何,您都会在函数内部将其转换为TF。那么,为什么不在运行模型之前将y_true转换为TF呢?@sooobus是的,你是对的,但我没有做到,我不知道该怎么做,我尝试了使用TF.numpy函数,但我没有得到任何结果