当前位置:网站首页>第二章 tensor和梯度计算

第二章 tensor和梯度计算

2020-11-16 08:54:18 osc_axrkis5i

一、数据操作
  1. tensor
(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
#还有常见的内外积等操作,有需要再自行查阅文档即可
二、自动求梯度
  1. 自动求梯度
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>

版权声明
本文为[osc_axrkis5i]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4267707/blog/4718849