Keras调用Concatenate层出现'Nonetype' object is not subscriptable错误
问题修复方案
错误原因
Concatenate拼接层接收的输入必须是张量列表,你传入模型实例列表/层实例列表都无法被层正确识别形状,导致检测到input_shape为None,触发下标访问报错build_model函数内存在未定义变量img_inp,构造模型时错误使用了不存在的输入张量,打断了张量形状的传递链路get_complete_model仅返回单个模型对象,调用时用两个变量接收会触发后续解包错误
具体修改步骤
1. 修复build_model的输入变量错误
将构造模型时使用的未定义变量img_inp替换为传入的输入层参数inp_layer:
if return_feature_model: featext_model = keras.Model(inputs=[inp_layer], outputs=[feat_output]) model = keras.Model(inputs=[inp_layer], outputs=[output])
2. 修复传入Concatenate的内容
不要往列表中追加模型实例,改为追加每个特征提取模型的输出张量:
for model_path in featvec_model_paths: model_name = os.path.basename(model_path)[5:-5] _, featvec_model = build_model(model_name=model_name, dim=dim, return_feature_model=True, inp_layer=input_layer) featvec_model.load_weights(model_path) featvec_model.trainable = False # 追加模型输出张量,而非模型本身 models.append(featvec_model.output)
3. 修复调用时的解包错误
get_complete_model仅返回单个最终训练模型,不需要用两个变量接收:
final_model = get_complete_model(featvec_paths, dim=384)
修改完成后重新运行即可正常完成多模型特征拼接,不会再触发形状相关报错。
内容的提问来源于stack exchange,提问作者Priyam Mehta
相关产品推荐
相关产品推荐

