对于求梯度为none的原因 记录

import torch

w=torch.tensor([1.],requires_grad=True)

x=torch.tensor([2.],requires_grad=True)

a=torch.add(w,x)

b=torch.add(w,2)

y=torch.mul(a,b)

y.backward()

print(w.grad)

print(x.grad)

print(a.grad)

print(b.grad)

结果是:

tensor([6.])

tensor([3.])

None

None

对于pytorch 有个概念叶子节点,一般用户自己创建的变量叫叶子节点,而叶子节点经过计算得到的变量叫肥叶子节点,叶子节点的梯度值不为none, 非叶子节点的梯度值没有保存在内存中,所以对非叶子节点进行求梯度则为none

下面有另一个例子

例子1:

x = torch.ones([2,2],requires_grad=True)

out = x.sum()

out.backward()

print(x.grad)

结果是:

tensor([[1., 1.],

​ [1., 1.]])

例子2

import torch

x = torch.tensor([1.0, 2.0, 3.0, 4.0], requires_grad=True)

print(x.is_leaf)

x=x.view(2,2)

print(x.is_leaf)

out=x.sum()

out.backward()

print(x.grad)

结果是:

True

False

None

例子3:

import torch

x = torch.tensor([1.0, 2.0, 3.0, 4.0], requires_grad=True)

print(x.is_leaf)

#x=x.view(2,2)

#print(x.is_leaf)

out=x.sum()

out.backward()

print(x.grad)

结果是:

True tensor([1., 1., 1., 1.])

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在TensorBoard中监视梯度,首先需要使用`tf.summary.scalar`函数记录梯度并将其写入TensorBoard日志。这可以通过以下代码完成: ```python import tensorflow as tf # 定义梯度 grads = ... # 记录梯度 for grad, var in grads: if grad is not None: tf.summary.scalar(var.name + '/grad', tf.norm(grad)) ``` 在上面的代码中,我们使用`tf.norm`函数计算梯度的范数,并使用`tf.summary.scalar`函数记录它们。我们将每个梯度的名称设置为变量名称加上“/grad”,以便在TensorBoard中更好地组织和查看它们。 接下来,我们需要使用`tf.summary.FileWriter`函数将日志写入TensorBoard: ```python # 定义日志目录和写入器 logdir = ... writer = tf.summary.FileWriter(logdir) # 运行会话 with tf.Session() as sess: # ... # 计算梯度记录日志 grads = sess.run(grads, feed_dict=feed_dict) for grad, var in grads: if grad is not None: summary = tf.Summary(value=[tf.Summary.Value(tag=var.name + '/grad', simple_value=sess.run(tf.norm(grad)))]) writer.add_summary(summary) # ... ``` 在上面的代码中,我们使用`tf.Session`运行计算图,并使用`sess.run`计算梯度。然后,我们使用`tf.Summary.Value`函数创建一个TensorBoard摘要对象,并使用`writer.add_summary`将其写入日志。我们将摘要的标签设置为变量名称加上“/grad”,并将它的值设置为梯度的范数。 最后,我们可以运行TensorBoard并在浏览器中查看梯度: ``` tensorboard --logdir=logdir ``` 在浏览器中打开TensorBoard,然后导航到“Graphs”选项卡。在左侧的“Tag”列表中,我们应该可以看到所有梯度的标签。选择一个梯度标签,然后在右侧的图形视图中查看梯度的变化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值