原标题:PyTorch常见的12坑
1. nn.Module.cuda 和 Tensor.cuda 的作用效果差异
无论是对于模型还是数据,cuda函数都能实现从CPU到GPU的内存迁移,但是他们的作用效果有所不同。
对于nn.Module:
上面两句能够达到一样的效果,即对model自身进行的内存迁移。
对于Tensor:
和nn.Module不同,调用tensor.cuda只是返回这个tensor对象在GPU内存上的拷贝,而不会对自身进行改变。因此必须对tensor进行重新赋值,即tensor=tensor.cuda.
例子:
2. PyTorch 0.4 计算累积损失的不同
以广泛使用的模式total_loss += loss.data[0]为例。Python0.4.0之前,loss是一个封装了(1,)张量的Variable,但Python0.4.0的loss现在是一个零维的标量。对标量进行 索引是没有意义的(似乎会报 invalid index to scalar variable 的错误)。使用loss.item可以从标量中获取Python数字。所以改为