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

TensorFlow1.14自定义ReLU梯度与原生ReLU梯度计算结果不一致问题

自定义ReLU梯度与原生实现梯度不一致问题原因

核心原因是随机张量在多次session.run()调用时被重复采样,和自定义梯度的实现逻辑无关:

  • 你代码中定义的vv = tf.random.normal((32,100))是随机数生成算子,每调用一次session.run()就会重新生成一组独立的正态分布随机值:
    1. 第一次执行sess.run(tf.gradients(z1, vv)[0])时,vv生成第一组随机值,基于这组值计算自定义ReLU梯度
    2. 第二次执行sess.run(tf.gradients(z2, vv)[0])时,vv生成第二组完全不同的随机值,基于这组新值计算原生ReLU梯度
  • 两次梯度计算的输入都不相同,结果自然不可能匹配。0.49左右的平均差正好符合正态分布样本正负占比各约50%的统计特征,属于预期内的结果。

你的自定义梯度逻辑本身是正确的,和原生ReLU的梯度规则完全一致,只需要修改测试代码,将两个梯度计算放在同一次run调用中,保证两次计算用的是同一组vv值即可得到预期结果:

# 同一次run调用中计算两个梯度,避免vv重复采样
dzdv1, dzdv2 = sess.run([tf.gradients(z1, vv)[0], tf.gradients(z2, vv)[0]])
print(np.mean(np.abs(dzdv1-dzdv2)))

修改后输出的平均绝对差为0。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:57:01