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