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

Keras训练CNN时报ValueError: An operation has `None` for gradient如何解决

问题根因

你代码中对Softmax层的参数使用错误,是触发梯度None报错的直接原因。

你写的输出层代码为:

out = keras.layers.Softmax(3)(fc)

Keras中Softmax层的第一个入参是axis,代表沿哪个张量维度计算概率分布。而你前面的Dense(3)层输出的张量形状为(batch_size, 3),只有2个维度(索引分别为0对应batch维度、1对应类别维度),你指定axis=3对应维度不存在,会导致计算逻辑异常,梯度无法正常反向传播,最终触发报错。

修复方案

二选一即可:

  • 修正Softmax层的维度参数,使用axis=-1自动沿张量最后一个维度计算,适配性更强:
    out = keras.layers.Softmax(axis=-1)(fc)
    
  • 直接将softmax激活合并到全连接层中,简化代码:
    # 删掉单独的Softmax层,修改Dense层代码如下
    fc = keras.layers.Dense(3, activation='softmax', kernel_initializer='he_uniform')(fc)
    
其他排查项

如果修改后仍有报错,可以检查以下内容:

  • 检查训练/验证输入特征、独热编码标签是否存在NaN、无穷大等非法值
  • 确认使用的Keras版本为稳定正式版,部分旧版本对无效参数的容错性更低

内容的提问来源于stack exchange,提问作者Jong Hyeok Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:45:00