我正在尝试为视频输入的模型训练实现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 回答
这大多数时候意味着你在层外进行计算 .
keras模型需要由keras层组成 . 不允许在图层外执行操作 .
完成所有计算并将它们放在
Lambda
层中:https://keras.io/layers/core/#lambda这里,
mainModel.output[:,frame_num/2]
是图层外的操作 .将其转移到Lambda图层: