我有一个用Tensorflow编写的损失函数,该函数在y_in中获得3个值,在y_pred中获得3个值。

张量流损失的伪代码:

def my_loss(y_in,y_pred):
 with tf.name_scope('loss_scope'):
    loss1 = tf.reduce_mean(...)
    loss2 = tf.reduce_mean(...)
    loss3 = tf.reduce_mean(...)
 return loss1,loss2,loss3


现在,我想在我的keras模型中使用此损失,我将以这种方式尝试一下:

...
out = Dense(3,activation='linear')(con_res)
model = Model(inputs=[In1,In2],output = out)
model.compile(optimizer='rmsprop',loss=my_loss)


其中con_res是之前网络的结果。然后在“密集-层”的帮助下,它将减少为3个输出。

发生以下错误:


  文件
  “ /usr/local/lib/python2.7/dist-packages/keras/engine/training.py”,
  910行,正在编译
      sample_weight,遮罩)
  
  文件
  “ /usr/local/lib/python2.7/dist-packages/keras/engine/training.py”,
  447行,已加权
      ndim = K.ndim(score_array)
  
  文件
  “ /usr/local/lib/python2.7/dist-packages/keras/backend/tensorflow_backend.py”,
  ndim中的479行
      dims = x.get_shape()._ dims
  
  AttributeError:“元组”对象没有属性“ get_shape”


所示的追溯发生在.compile函数之后。

我尝试了交叉熵损失,但没有抛出任何错误

最佳答案

您的函数my_loss()应该返回张量。不是元组。

您可以使用以下方法将三个张量(loss1,loss2,loss3)堆叠为一个张量
tf.stack()

关于python - 用Tensorflow编写的将损失函数移植到Keras会导致AttributeError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44003302/

10-12 21:52
查看更多