pytorch调试整理

RuntimeError: reduce failed to synchronize: device-side assert triggered

原因:使用BCE loss的时候,网络的输出没有用sigmoid函数激活。BCE loss的输入需要在[0,1]之间。

解决方法:nn.Sigmoid()

https://github.com/pytorch/pytorch/issues/5560


torch.autograd.Variable

作用:作用于Tensor,Variable只是把Tensor封装了一下,为了后续的自动求导。


torch.tensor.view(*args)

作用:改变tensor的维度


Pytorch变量类型转换

data.cuda()转换为GPU的张量类型,torch.cuda.FloatTensor类型。


Pytorch遇到的问题及解决方案

https://blog.csdn.net/yutingzhaomeng/article/details/79084405


Pytorch使用GPU

https://ptorch.com/news/189.html

device-agnostic的概念

# 开始脚本,创建一个张量
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

...

# 但是无论你获得一个新的Tensor或者Module
# 如果他们已经在目标设备上则不会执行复制操作
input = data.to(device)
model = MyModule(...).to(device)

data.cuda() 和model.cuda()与.to()的作用一样?

.cuda()的用法:

之后,使用 cuda 加速代码就和调用一样简单。如果你在张量上调用 .cuda(),则它将执行从 CPU 到 CUDA GPU 的数据迁移。如果你在模型上调用 .cuda(),则它不仅将所有内部储存移到 GPU,还将整个计算图映射至 GPU。

要想将张量或模型复制回 CPU,比如想和 NumPy 交互,你可以调用 .cpu()。

if cuda_gpu:
    x = x.cuda()
    print(type(x.data))

x = x.cpu()
print(type(x.data))

-------------------------------------------------------------------------
<class 'torch.cuda.FloatTensor'>
<class 'torch.FloatTensor'>

.to()的用途:多用于多GPU并行训练

https://blog.csdn.net/daydayjump/article/details/81158777

https://blog.csdn.net/zzlyw/article/details/78769012

https://blog.csdn.net/u013063099/article/details/79579407

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值