首页 文章

将Tensorflow中写入的移植丢失函数转换为Keras会导致AttributeError

提问于
浏览
0

我有一个用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是之前网络的结果 . 然后在Dense - Layer的帮助下,它将减少到3个输出 .

发生以下错误:

文件“/usr/local/lib/python2.7/dist-packages/keras/engine/training.py”,第910行,编译sample_weight,mask)文件“/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“ ,第479行,在ndim dims = x.get_shape()._ dims AttributeError:'tuple'对象没有属性'get_shape'

显示的回溯发生在 .compile 函数之后 .

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

1 回答

  • 1

    你的函数, my_loss() 应该返回一个张量 . 不是一个元组 .

    您可以使用 tf.stack() 将三个张量 (loss1,loss2,loss3) 叠加到单个张量中 .

相关问题