为预训练VGG16添加注意力机制触发层无输出形状RuntimeError如何解决
错误原因
你调用get_output_shape_at(0)时,VGG16模型还没有和输入层绑定,没有经过实际的前向调用构建计算图,因此没有定义输出形状,触发报错。
解决方案
有两种可行的修改方式,任选其一即可:
方案1:直接读取模型的output_shape属性(推荐)
你初始化VGG16时已经指定了输入形状,模型的输出形状是预先确定的,直接读取output_shape属性即可获取通道数,修改第6行代码为:
pt_depth = base_pretrained_model.output_shape[-1]
方案2:调整代码执行顺序,先绑定输入层再获取形状
把获取输出形状的代码移到模型调用输入层的代码之后,修改后对应片段如下:
base_pretrained_model.trainable = False # 先调用模型绑定输入层 pt_features = base_pretrained_model(in_lay) # 再获取输出形状 pt_depth = base_pretrained_model.get_output_shape_at(0)[-1] bn_features = BatchNormalization()(pt_features)
修改完成后即可正常运行后续代码。
内容的提问来源于stack exchange,提问作者Siddharth
相关产品推荐
相关产品推荐

