首页 文章

'attributeError: ' Tensor ' object has no attribute ' _keras_history'在使用keras预训练VGG实现感知损失时

提问于
浏览
1

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

  • 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)
    

相关问题