1.Pytorch实战笔记_GoAI的博客-CSDN博客
2.Pytorch入门教程_GoAI的博客-CSDN博客
PyTorch学习笔记(一):PyTorch环境安装
PyTorch学习笔记(二):简介与基础知识
PyTorch学习笔记(三):PyTorch主要组成模块
PyTorch学习笔记(四):PyTorch基础实战
PyTorch学习笔记(五):模型定义、修改、保存
后续继续更新!!!!
import torch
# 创建tensor
x = torch.rand(4, 3)
print(x)
# 构造数据类型为long,数据是0的矩阵
x = torch.zeros(4, 3, dtype=torch.long)
print(x)
tensor([[0.9515, 0.6332, 0.8228],
[0.3508, 0.0493, 0.7606],
[0.7326, 0.7003, 0.1925],
[0.1172, 0.8946, 0.9501]])
tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
常见的构造Tensor的函数:
函数 | 功能 |
---|---|
Tensor(*sizes) | 基础构造函数 |
tensor(data) | 类似于np.array |
ones(*sizes) | 全1 |
zeros(*sizes) | 全0 |
eye(*sizes) | 对角为1,其余为0 |
arange(s,e,step) | 从s到e,步长为step |
linspace(s,e,steps) | 从s到e,均匀分成step份 |
rand/randn(*sizes) | rand是[0,1)均匀分布;randn是服从N(0,1)的正态分布 |
normal(mean,std) | 正态分布(均值为mean,标准差是std) |
randperm(m) | 随机排列 |
操作:
torch.view
改变tensor的大小# 使用view改变张量的大小
x = torch.randn(5, 4)
y = x.view(20)
z = x.view(-1, 5) # -1是指这一维的维数由其他维度决定
print(x.size(), y.size(), z.size())
torch.Size([5, 4]) torch.Size([20]) torch.Size([4, 5])
x = tensor([[1, 2]])
y = tensor([[1],
[2],
[3]])
x + y = tensor([[2, 3],
[3, 4],
[4, 5]])
autograd
包:提供张量上的自动求导机制.requires_grad
为True
,那么将会追踪张量的所有操作。当完成计算后,可以通过调用.backward()
自动计算所有的梯度。张量的所有梯度将会自动累加到.grad
属性Function
:Tensor
和Function
互相连接生成了一个无环图 (acyclic graph),它编码了完整的计算历史。每个张量都有一个.grad_fn
属性,该属性引用了创建Tensor
自身的Function
x = torch.ones(2, 2, requires_grad=True)
print(x)
tensor([[1., 1.],
[1., 1.]], requires_grad=True)
y = x ** 2
print(y)
tensor([[1., 1.],
[1., 1.]], grad_fn=)
z = y * y * 3
out = z.mean()
print("z = ", z)
print("z mean = ", out)
z = tensor([[3., 3.],
[3., 3.]], grad_fn=)
z mean = tensor(3., grad_fn=)
grad
的反向传播:运行反向传播,梯度都会累加之前的梯度,所以一般在反向传播之前需把梯度清零
out.backward()
print(x.grad)
tensor([[3., 3.],
[3., 3.]])
# 反向传播累加
out2 = x.sum()
out2.backward()
print(x.grad)
tensor([[4., 4.],
[4., 4.]])
目的:通过使用多个GPU参与训练,加快训练速度,提高模型学习的效果
CUDA:通过使用NVIDIA提供的GPU并行计算框架,采用cuda()
方法,让模型或者数据迁移到GPU中进行计算
并行计算方法: