之前做彭老师的项目(人体属性),就是有这个问题!

例如:

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

 

版权声明:本文为lllcccddd原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/lllcccddd/p/10510400.html