import torch
import numpy as np
if __name__ =='__main__':
t = torch.randn(4,6)print(t.shape)# 类型的转换
t1 = t.view(3,8)print(t1.size())# 转换为2维,最后一个维度为1,第一个维度-1代表自动计算
t2 = t.view(-1,1)print(t2.shape)print('----------------------------------------')
t = torch.randn(12,4,4,3)print(t.shape)
tt = t.view(12,4*4*3)print(tt.shape)
结果
2.去除张量中维度为1的维度
代码
import torch
import numpy as np
if __name__ =='__main__':
t = torch.randn(4,6)
t = t.view(1,4,6)print(t.size())
t1 = torch.squeeze(t)print(t1.shape)
结果
二、张量的自动微分
代码
import torch
import numpy as np
if __name__ =='__main__':# requires_grad属性为True的时候,框架会跟踪该变量的自动微分计算
t = torch.ones(2,2, requires_grad=True)
y = t +5print(y.grad_fn)# 返回计算得到此张量的方法print(y.requires_grad)# requires_grad属性为True的时候,框架会跟踪该变量的自动微分计算
z = y *2print(z.grad_fn)# 返回计算得到此张量的方法print(z.requires_grad)# requires_grad属性为True的时候,框架会跟踪该变量的自动微分计算
out = z.mean()# out此时是标量值
out.backward()# 进行自动微分运算
result = out.detach()# 通过这个detach()方法,来截断梯度计算,后续使用result进行计算不会进行自动微分运算print(result.requires_grad)print(t.grad)# 输出t的梯度,grad这个属性会记录计算得到的梯度# 在这里进行的运算不会进行自动微分的跟踪运算with torch.no_grad():
yy = t +2print(yy.requires_grad)