我有一个用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
函数之后。
我尝试了一个交叉熵丢失并没有抛出任何错误
答案 0 :(得分:2)
你的函数my_loss()
应该返回一个张量。不是一个元组。
您可以使用将三个张量(loss1,loss2,loss3)
叠加到单个张量中
tf.stack()
。