我有一个用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/