'attributeError: 'Tensor' object has no attribute '_keras_history' during implementing perceptual loss with pretrained VGG using keras

'attributeError: 'Tensor' object has no attribute '_keras_history' during implementing perceptual loss with pretrained VGG using keras

我正在尝试为视频输入的模型训练实施 VGG 感知损失。 我像问题 AttributeError: 'Tensor' object has no attribute '_keras_history':

中的建议一样实现了感知损失

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

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

因此,我实现了以下损失模型:

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' object has no attribute '_keras_history'

顺便说一句,我使用的 keras 版本是“2.0.9”。

谁能帮我解决这个问题?

非常感谢!!

这大多数时候意味着您在层外进行计算。

一个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)