学习内容参考bilibili视频:https://www.bilibili.com/video/BV17y4y1m737?p=9&vd_source=e3119ad0490e9417e487c2ba62c84750
一、认识Pytorch
- Pytorch的基本元素操作
- 矩阵的初始化:
torch.empty()
torch.rand(n,m)
torch.zeros(n,m,dtype=torch.long)
- 其他若干操作:
x.new_ones(n,m,dtype=torch.double)
torch.randn_like(x, dtype=torch.float)
x.size() # 可以直接以元组的形式赋值给变量,如二维a,b = x.size()
- Pytorch的基本运算操作
- 加法操作
x+y
torch.add(x,y)
torch.add(x,y,out=result)
y.add_(x) # 就地赋值
- 其他若干操作
x.view() #注意变换后总数不变
x.item() #取为python的值
- Torch Tensor和Numpy Array之间的相互转换
- 将Torch Tensor 转换为Numpy Array:
b = a.numpy() # a,b 共享同一内存
- 将Numpy Array转换为Torch Tensor:
b = torch.form_numpy(a) # a,b 共享同一内存
- 将任意的Tensors可以用.to()方法来将其移动到任意设备上
x=x.to(device)
二、Pytorch中的autograd
- 学习了torch.Tensor类的相关概念
- torch.Tensor是整个package中的核心类,如果将属性.requires_grad设置为True,它将追踪在这个类上定义的所有操作.当代码要进行反向传播的时候,直接调用.backward()就可以自动计算所有的梯度.在这个Tensor上的所有梯度将被累加进属性.grad中.
- 执行.detach()命令,可以将该Tensor从计算图中撤下,在未来的回溯计算中不会再计算该Tensor.
- 采用代码块的方式也可以终止对计算图的回溯:
with torch.no_grad():
- Tensor的若干操作:
torch.ones(n, n, requires_grad=True)
x.grad_fn #上一步运算类型
x.requires_grad_(True) # 就地改变requires_grad属性
- 关于Gradients的属性:
- x.grad # 累计梯度
- 可以通过.detach()获得一个新的Tensor,拥有相同的内容但不需要自动求导.