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

Que*_*nie 2 loss deep-learning keras tensorflow

我正在尝试为视频输入的模型训练实现 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)
Run Code Online (Sandbox Code Playgroud)

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

attributeError:“张量”对象没有属性“_keras_history”

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

有人能帮我解决这个问题吗?

多谢!!

Dan*_*ler 5

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

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)
Run Code Online (Sandbox Code Playgroud)