繁体   English   中英

用Tensorflow编写的将损失函数移植到Keras会导致AttributeError

[英]Porting loss function written in Tensorflow to Keras results in AttributeError

我已经写在tensorflow它得到3个值的损失函数y_in在和3个值y_pred

张量流损失的伪代码:

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”,第479行,以ndim dims = x.get_shape()._ dims

AttributeError:“元组”对象没有属性“ get_shape”

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

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

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

您可以使用tf.stack()将三个张量(loss1,loss2,loss3)为一个张量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM