'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)
我正在尝试为视频输入的模型训练实施 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)