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

猜你喜欢

转载自blog.csdn.net/whyerdiku/article/details/88141832
今日推荐