pytorch的求导计算以及处理不可微方法

一.pytorch求导计算法

就是普通的微分求导,详见https://zhuanlan.zhihu.com/p/51385110

 

二.pytorch处理不可微的方式

没有被选择到的直接归零

import torch

#x = torch.tensor([[1.,2.,3.],[4.,5.,6.]],requires_grad=True)
x= torch.randn(2,3,requires_grad=True)
y = torch.add(x,1)
print(y)
z = 2*torch.pow(y,2)
print(z)
t = torch.argmax(z,dim=0).unsqueeze(0)
d = torch.gather(z,0,t)
f = torch.mean(d)
f.backward()
print(x.grad)

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PyTorch是一个深度学习框架,它提供了强大的自动求导功能。在PyTorch中,可训练参数的梯度是通过计算图和反向传播来自动计算的,计算图中的每个操作都有一个grad_fn属性,它指示了该操作是如何计算得到的。 grad_fn属性是一个指向创建当前Tensor的Function的引用,它在反向传播时用于计算梯度。grad_fn属性构成了一个计算图,使用反向传播算法将梯度从输出向输入进行传播。通过grad_fn属性,我们可以追踪Tensor的计算历史,了解它是如何通过哪些操作得到的。 当我们使用PyTorch进行深度学习时,有时可能会遇到权重梯度不更新的问题。这可能是由于以下几个原因导致的: 1. 参数未设置为可训练(requires_grad=True):在定义模型参数时,需要将requires_grad参数设置为True,以确保该参数参与反向传播计算梯度。 2. 权重梯度被手动清零:在优化器的步骤中,可能会使用optimizer.zero_grad()手动将权重梯度清零,以避免梯度累积的问题。 3. 学习率设置过小:如果学习率设置过小,可能导致参数更新过慢,可以尝试增大学习率。 4. 非常规的优化器:某些优化器可能会出现权重不更新的问题,可以尝试使用其他常用的优化器,如SGD、Adam等。 5. 数据集问题:如果训练数据集太小,模型可能无法从中学到足够的信息来更新权重,因此可以尝试增加训练数据量或进行数据扩充。 以上是一些可能导致权重梯度不更新的常见问题和解决方法。当遇到权重梯度不更新的问题时,可以根据具体情况逐个排查,并结合PyTorch的自动求导机制,通过检查grad_fn属性来了解计算历史,以找到问题所在并进行修正。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值