Pytorch安装及报错问题汇总

pip install torch -i https://pypi.douban.com/simple

可直接根据环境条件,直接运行最下面的命令安装。

使用 torch.nn.Embedding报错:index out of range in self;

可能原因是输入 embedding 层的数据并不是经过词典映射的,而是原始数据,因此张量内部有超出embedding层合法范围的数,embedding 层需检查张量内部具体值的大小,并确保它们的值在有效范围内[0, num_embeddings - 1]。可重新检查一下文本转为数字的过程,排序编码是否有问题

torch的zero_grad()

调用backward()函数之前都要将梯度清零,如果梯度不清零,pytorch会将上次计算的梯度和本次计算的梯度累加。好处是硬件限制,不能使用更大的batch_size时,使用多次计算较小的batch_size的梯度平均值代替更方便,坏处是每次都要清零梯度。

optimizer.zero_grad()
output = net(input)
loss = loss_f(output, target)
loss.backward()

pytorch 的 backward() 函数,网络参数反馈时,梯度是被积累的而不是被替换掉;在每一个batch时不需要将两个batch的梯度混合起来累积,这时就需要每个batch设置一遍zero_grad()清零。

如果不是每一个batch 都清楚之前的梯度,如每两个batch清理一次,相当于提高了batch_size,如果硬件不行,但batch_size 需要设高的领域比较适合,比如目标检测模型的训练。

使用pytorch实现多项线性回归中,grad更新时,每次运算后将上一次梯度清空,报错:

原因是在系统将 w 的grad 值初始化为none,第一次求梯度计算是在none值上进行报错,自然会没有data属性,修改方法:添加一个判断语句,从第二次循环开始执行求导运算;

for i in range(100):
    y_pred = multi_linear(x_train)
    loss = getloss(y_pred, y_train)
    if i != 0:
        w.grad.data.zero_()
        b.grad.data.zero_()
    loss.backward()
    w.data = w.data - 0.001 * w.grad.data
    b.data = b.data - 0.001 * b.grad.data

模型预测结果输出与目标值shape不符

告警:‘UserWarning: Using a target size (torch.Size([16])) that is different to the input size (torch.Size([16, 1])). This will likely lead to incorrect results due to broadcasting. Please ensure they have the same size.’

目标 tensor 的尺寸和输入 tensor 的尺寸不一致,只是警告,程序还能正常运行。该问题是目标 tensor 的尺寸是 ‘torch.Size([16, 1])’,而输入 tensor 的尺寸是 ‘torch.Size([16])’。
解决方法:使用 reshape() 改变目标 tensor 的尺寸,或用squeeze(1)将第二维去掉。

参考:

Start Locally | PyTorch

pytorch embedding层报错index out of range in self - 灰信网(软件开发博客聚合)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值