pytorch遇到的问题---不定期更新
之前做彭老师的项目(人体属性),就是有这个问题!
例如:
a = torch.Tensor((1,2,3))
b = torch.Tensor((3,4,5))
想要变成[[1,2,3],[3,4,5]]
错误做法:
a = np.array(a.data.cpu())
b = np.array(b.data.cpu())
c = np.vstack((a,b))
c = Variable(c).cuda()
正确做法:
c =
Torch.stack([a,b],0)
原因:进行bp的时候,会中断
Operation ban inplace
不能内联加减,除非另赋值
什么意思?其实很好理解:
c=torch.Tensor(torch.randn(2,3))#其中新版本的pytorch torch.Tensor已经可以自带variable了
c=c*2
w=torch.Tensor(torch.randn(2,3))
d=c*w
这是可以继续bp的,因为c=c*2是可以bp的
c=torch.Tensor(torch.randn(2,3))#其中新版本的pytorch torch.Tensor已经可以自带variable了
c=c-2
w=torch.Tensor(torch.randn(2,3))
d=c*w
这是不可以继续bp的,op是有保护机制的,即如果计算w=w+alpha*dw,那么(c:dw)到底是减2的c还是不减2的,因为有保护机制,所以c只能是torch.Tensor(torch.randn(2,3)),而不是c=c-2,如果实在想c=c-2,那么另设一个变量,比如a=c-2
不同的weight给不同的loss,可以看出这个loss的权重,但是weight一定要加上softmax,要不然都会bp为0