'attributeError:'Tensor'对象在使用keras预训练的VGG实现感知损失时没有属性'_keras_history'

时间:2017-12-19 12:40:26

标签: tensorflow deep-learning keras loss

我正在尝试为视频输入的模型训练实施VGG感知损失。 我实现了感知损失,就像问题AttributeError: 'Tensor' object has no attribute '_keras_history'中的建议一样:

我的mainModel如下图所示: Graph of mainModel

输入大小为(bathsize, frame_num, row, col, channel)。我希望得到中间帧的感知损失,即frame_num/2

所以,我实现了以下lossModel:

lossModel = VGG19(weights='imagenet')
lossModel = Model(inputs=lossModel.input,outputs=lossModel.get_layer('block3_conv4').output)
lossOut = lossModel(mainModel.output[:,frame_num/2])
fullModel = Model(mainModel.input,lossOut)

但我在第fullModel = Model(mainModel.input, lossOut)行中遇到了错误消息:

  

attributeError:'Tensor'对象没有属性'_keras_history'

顺便说一下,我使用的keras版本是'2.0.9'。

有人可以帮我吗?

非常感谢!!

1 个答案:

答案 0 :(得分:3)

这大多数时候都意味着你要在图层之外进行计算。

keras模型需要由keras层组成。不允许在图层外执行操作。

完成所有计算并将其放入Lambda图层:https://keras.io/layers/core/#lambda

此处,mainModel.output[:,frame_num/2]是图层外的操作。

将其转移到Lambda图层:

lossModel = VGG19(weights='imagenet')
lossModel = Model(inputs=lossModel.input,outputs=lossModel.get_layer('block3_conv4').output)

#you must connect lossmodel and mainmodel somewhere!!!
output = lossModel(mainModel.output)

output = Lambda(lambda x: x[:,frame_num/2])(output)

fullModel = Model(mainModel.input, output)