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

加载Keras模型后预测报错(疑似掩码层相关问题)

加载Keras模型后预测报错(疑似掩码层相关问题)

看起来你遇到的问题根源出在掩码层(Masking)的mask_value定义方式上。当你用tf.convert_to_tensor()把数组转成Tensor对象后,Keras在保存模型时会把这个Tensor序列化成一个JSON格式的字典,但加载模型时无法自动将这个字典还原成有效的Tensor,导致掩码操作失败,出现你看到的报错。

解决方案

  • 修改掩码层的mask_value定义:不需要手动用tf.convert_to_tensor()转换,直接传入numpy数组或者Python列表即可。Keras的Masking层会自动将这些类型转换为合适的Tensor。修改后的模型定义如下:
model = tf.keras.Sequential([
    tf.keras.layers.Input((352, 4)),
    # 直接用numpy数组,去掉tf.convert_to_tensor包装
    tf.keras.layers.Masking(mask_value=np.array([0.0, 0.0, 0.0, 0.0])),
    tf.keras.layers.GRU(50, return_sequences=True, activation='tanh'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.GRU(50,activation='tanh'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(units=1, activation='sigmoid')])

或者更简单,直接用Python列表:

tf.keras.layers.Masking(mask_value=[0.0, 0.0, 0.0, 0.0]),
  • 重新训练并保存模型:删除之前的model.keras文件,用修改后的代码重新训练模型,再保存。

  • 验证效果:无论是在训练文件里加载保存后的模型,还是在单独的测试文件中加载,调用model.predict()都应该能正常运行了。

补充说明

你之前在训练文件里直接调用model.predict()没问题,是因为当时mask_value是内存中有效的Tensor对象;但保存模型后,这个Tensor被序列化成了字典格式,加载时无法被正确解析为Tensor——哪怕在同一个文件里加载也会报错,因为加载的是保存下来的序列化内容,不是训练时的内存对象。

备注:内容来源于stack exchange,提问作者JD12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:28:03