建议点赞收藏关注!持续更新至pytorch大部分内容更完。
整体框架如下
目录
- gpu加速
- 数据
- 数据结构
- 张量Tensor
- Variable
- 预处理
- 数据增强
- 模型
- 构建模块
- 组织复杂网络
- 初始化网络参数
- 定义网络层
- 损失函数
- 创建损失函数
- 设置损失函数超参数
- 选择损失函数
- 优化器
- 管理模型参数
- 管理多个参数组实现不同学习率
- 调整学习率
- 迭代训练
- 观察训练效果
- 绘制loss/accuracy曲线
- 用TensorBoard分析
- 模型应用
- 图像分类
- 图像分割
- 目标检测
- 对抗生成
- 循环网络
gpu加速
打开jupyter lab,打开一个file,右上角选择kernel为torchgpuprivate
要在 Mac M1的GPU 上运行 PyTorch 代码,使用命令 torch.device(“mps”)来指定。
之后就只需要引用gpu_a,gpu_b,其他与cpu_a…的操作没有区别。
数据
数据结构
张量Tensor
- ==数组概念,1…n维
- 有8个属性
data
dtype:有很多数据类型
shape : 如 (6,6,6,6)
device:所在设备cpu/gpu
grad:data的梯度
grad_fn:创建tensor 的function,是自动求导的关键,加法还是乘法
requires_grad:指示是否需要梯度,不一定所有的张量都需要设置梯度
is_leaf:指示是否是叶子节点(张量),计算图中再介绍。 - api
device=torch.device("mps")
torch.tensor(data, #list or numpydtype=None, # 默认==data的类型device=None,requires_grad=False,pin_memory=False # 是否存于锁页内存 一般默认)#创建
arr=np.ones((3,3))
t=torch.tensor(arr,device=device)
# t.dtype == arr.dtype==float64torch.from_numpy(ndarray) #从numpy创建tensor
#从torch.from_numpy创建的tensor与原来的ndarray共享内存,一改跟着改torch.zeros(*size,#形状 如(3,3)out=None,#输出的张量 相当于赋值dtype=None,#内存中的布局形式layout=torch.strided,#通常默认,除非稀疏矩阵 用sparse_coodevice=None,requires_grad=False)
torch.zeros_like(input,#根据Input的形状创建dtype=None,layout=None,device=None,requires_grad=False)zeros 换成 onestorch.full(size,#(3,3)fill_value,#张量的值 如10out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)torch.arange(start=0, #创建等差1维张量end, #左闭右开step=1,#公差 默认1out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)torch.linspace(start=0, #创建均分1维张量end, #左闭右闭steps=1,#数列长度#步长=(end-start)/step -1out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)torch.logspace(base=...底默认10,...) #对数均分torch.eye(n,#行数 #默认方阵m,#列数...) #创建单位对角矩阵,2维张量,torch.normal(mean,std,out=None)
#正态分布,mean均值,std方差
#mean std都可以分别是标量 or张量#都是张量的情况的normal如何计算?
mean=[1,2,3,4]
std=[1,2,3,4]
t_normal=torch.normal(mean,std) #得到[1.66,2.53,3.18,6.48]
#1.66是通过mean=1,std=1的正态分布采样得到torch.randn(*size, #标准正态分布 out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)
torch.randn_like()torch.randint(low=0, #均匀分布 前闭后开high,size, out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False) torch.randint_like()torch.randperm(n,#张量长度out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)
#生成0-n-1随机排列torch.bernoulli(input,*,generator=None,out=None)#以input为概率,生成伯努利分布,即0-1分布,两点分布
Variable
已经合并到tensor 但是对于理解张量有帮助。variable是torch.autograd中的数据类型,用于封装tensor进行自动求导,有五个属性
data:被包装的tensor
grad:data的梯度
grad_fn:创建tensor 的function,是自动求导的关键,加法还是乘法
requires_grad:指示是否需要梯度,不一定所有的张量都需要设置梯度
is_leaf:指示是否是叶子节点(张量),计算图中再介绍。