我有一个用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 回答
你的函数,
my_loss()
应该返回一个张量 . 不是一个元组 .您可以使用
tf.stack()
将三个张量(loss1,loss2,loss3)
叠加到单个张量中 .