1.データ操作
- テンソル
(1)创建
torch.tensor([888,444]) #直接创建值为[888,444]的张量
torch.empty(2,4) #2x4的空张量
torch.rand(2,4) #随机初始化2x4的张量
torch.zeros(2,4,dtype = torch.long) #初始值全部为0的long型的张量
torch.randn_like(x,dtype=torch.float) #根据现有的x的形状创建新的tensor,并指定新的数据类型
(2)获取形状(x为一个张量)
x.shape 或
x.size()
(3)加法(x,y为张量)
x+y 或
torch.add(x,y)
torch.add(x,y,out=result) #指定result为计算的结果
y.add_(x) #此为inplace方法,结果存在y中
# 一般inplace方法都有后缀_
(4)索引
x=torch.tensor([[1,2,3,4,5],
[2,2,2,2,2],
[3,3,3,3,3],
[4,4,4,4,4]])
y=x[1,:] #得到的y为([2,2,2,2,2])
#注意此处y和x共享内存,改变y会导致x中对应的值也发生改变
(5)改变形状
x.view(2,10) #x改为2x10的张量
x.view(1,-1) #x改为1x20的张量,其中-1相当于未知数,会自动计算出其值,此处为20/1=20
(6)产生不共享内存副本
y=x.clone() #clone后梯度回传到y时会同时传到源张量x
(7)和numpy的转换
x.numpy() #转为numpy
torch.from_numpy(x) # 转为tensor
z=torch.tensor(y) # 此方法较为常见,但须注意此时的y和z不共享内存
(8)其他
x.item() #x从tensor型转化为一个number
#还有常见的内外积等操作,有需要再自行查阅文档即可
次に、勾配を自動的に見つけます
- 自動グラデーション
x = torch.ones(2, 2, requires_grad=True) 或
x.requires_grad_(True)
# 假设output是最后输出的标量
output.backward()
x.grad.data.zero_() #每次反向传播grad会累积,记得清零。
2.grad_fn
y=x*x*4
print(y.grad_fn)
输出:<MulBackward object at 0x1100477b8>