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

为什么IRIS数据集自定义训练场景下tf.GradientTape.jacobian返回None

问题原因

出现全None的根本原因是TensorFlow的GradientTape仅会记录自身上下文作用域内发生的张量运算,你当前的写法存在两处核心错误:

  • 你存入m_outputs_mod50的输出张量,计算过程发生在训练循环的epoch逻辑中,完全不在后续求雅可比时新建的GradientTape上下文范围内,该磁带没有记录输出和权重之间的计算依赖关系,无法推导梯度。
  • GradientTape的梯度/雅可比计算必须依赖计算过程中留存的反向传播追踪信息,你单独存储的输出张量和权重值只是静态的数值结果,没有绑定对应的计算路径信息,无法作为jacobian方法的有效入参配对使用。

解决方法

不要事后拿存储的静态值计算雅可比,应该在需要采集数据的epoch当场完成计算、存储结果,修改你训练循环中触发条件的代码即可:

# 提前新增雅可比结果存储列表
jacob_results = []

if epoch % 50 == 0:
    # 当场开启GradientTape记录计算过程
    with tf.GradientTape() as tape:
        # 显式声明监视权重(非必须,可训练变量默认会被tape监视,加上更稳妥)
        tape.watch(model.weights)
        current_output = model(x)
    # 当场计算雅可比并存入列表,后续可直接调用
    current_jacob = tape.jacobian(target=current_output, sources=model.weights)
    m_outputs_mod50.append(current_output)
    gather_weights.append(model.weights)
    jacob_results.append(current_jacob)
    print("Epoch {:03d}: Loss: {:.3f}, Accuracy: {:.3%}".format(epoch,
                                                                epoch_loss_avg.result(),
                                                                epoch_accuracy.result()))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:39:03