Python使用VGG16迁移学习出现list无shape属性报错如何解决
错误原因
你定义的prediction函数仅支持传入单张图像数组,但你传入的training_set是存储所有训练图像的Python列表,列表本身没有shape属性,因此触发AttributeError。
可行解决方案
- 首先修改调用逻辑,逐张遍历训练集图像调用预测函数,替换原来的直接传入整个列表的代码:
new_training_set = [] for single_img in training_set: # 可选:补充BGR转RGB操作,适配VGG16的预训练输入要求 single_img = cv2.cvtColor(single_img, cv2.COLOR_BGR2RGB) pred_res = prediction(model, single_img, patch_size) new_training_set.append(pred_res)
- 修复
prediction函数内部的变量名错误:函数形参是model1,但内部调用预测用了全局变量model,改为统一使用形参避免未定义报错:
# 把原函数里的这一行 single_patch_prediction = (model.predict(single_patch_input)[0,:,:,0] > 0.5).astype(np.uint8) # 修改为 single_patch_prediction = (model1.predict(single_patch_input)[0,:,:,0] > 0.5).astype(np.uint8)
- (可选优化)512*512图像按224步长切分会有64像素的边缘区域,当前代码直接对小区域resize填充,容易出现拼接缝和精度损失,可改为步长小于224的重叠滑窗切分,重叠区域的预测结果取平均值,能大幅提升最终输出的平滑度。
内容的提问来源于stack exchange,提问作者farabee
相关产品推荐
相关产品推荐

