You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow加载预训练.h5模型报错:输入形状不匹配求助

问题原因与解决方法

1. 预测输入形状不匹配报错

原因

模型训练时接收的是4D张量输入:(batch_size, 256, 256, 3),其中None代表任意批量大小。而你传入model.predict的输入形状为(32, 256, 3),说明:

  • 若为单张图片输入,缺少了批量维度(正确形状应为(1,256,256,3));
  • 若为批量图片输入,每个样本的形状错误(应为(256,256,3),实际却为(256,3),缺失宽度维度)。

另外,自定义dice_coeff函数中的Flatten是无效代码(仅写了类名未调用),属于笔误,虽不影响运行但需清理。

解决方法

  • 修正输入形状:
    单张图片输入时,先扩展批量维度:

    import numpy as np
    # 假设image原始形状为(256,256,3)
    image_input = np.expand_dims(image, axis=0)  # 转换为(1,256,256,3)
    mask = model.predict(image_input)
    

    批量图片输入时,检查每个样本形状是否为(256,256,3),确保整体输入形状为(N,256,256,3)(N为样本数量)。

  • 清理无效代码:删除dice_coeff函数中的Flatten行。

2. 变量浏览器无法查看加载的模型

原因

  • 代码逻辑错误:你注释了model = load_model(...)语句,直接调用model.load_weights(...)会导致model未定义(除非你之前已定义过同结构模型);
  • Spyder变量浏览器对Keras模型的显示依赖完整的模型对象初始化,compile=False可能导致部分元数据未加载,无法被识别;
  • 变量浏览器未及时刷新,导致加载后的模型未显示。

解决方法

  • 正确加载模型:使用完整的load_model语句,确保自定义对象全部传入:

    loaded_model = tf.keras.models.load_model(
        r'D:\Preprocesamiento\FASE_III\ResdANet_org.h5',
        custom_objects={'dice_coeff': dice_coeff, 'dice_loss': dice_loss},
        compile=False
    )
    

    注意:路径用原始字符串r''避免转义字符问题,custom_objects需包含所有自定义函数(包括dice_loss)。

  • 刷新变量浏览器:加载模型后,点击Spyder变量浏览器的刷新按钮,或重启内核后重新运行代码。

  • 可选:编译后查看:执行loaded_model.compile(...)后,模型结构更完整,变量浏览器更易识别。

额外注意事项

  • 预测结果处理:model.predict返回的mask是4D张量(如(1,256,256,1)),可视化时需取出单张掩码并压缩多余维度:
    ax[1].imshow(mask[0].squeeze())
    

内容的提问来源于stack exchange,提问作者JPSuarezQ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 18:20:34