PyTorch | 学习笔记1

一.PyTorch实现模型训练

1.数据

如何把数据从硬盘读到内存?

如何组织数据进行训练?图片如何预处理及数据增强?

2.模型

如何构建模型模块?如何组织复杂网络?

如何初始化网络参数?如何定义网络层?

3.损失函数

如何创建损失函数?如何设置损失函数超参数?

如何选择损失函数?

4.优化器

如何管理模型参数?如何管理多个参数组实现不同学习率?

如何调整学习率?

5.迭代训练

如何观察训练效果?如何绘制loss/accuracy曲线?

如何用TensorBoard分析?

6.模型应用

如何进行图像分类?图像分割?目标检测?

对抗生成?循环网络?

二.张量简介与创建

1.tensor概念

张量是一个多维数组,它是标量,向量,矩阵的高维拓展

variable是torch.autograd中的数据类型,主要用于封装tensor,进行自动求导

主要有5个属性:

data:被包装的tensor

grad:data的梯度

grad_fn:创建tensor的function,是自动求导的关键

requires_grad:指示是否需要梯度

is_leaf:指示是否是叶子节点(张量)

pytorch4.0版开始,variable并入tensor

dtype:张量的数据类型,如torch.FloatTensor,torch.cuda.FloatTensor

shape:张量的形状,如(64,3,224,224)

device:张量所在设备,如CPU/GPU,是加速的关键

2.tensor创建:直接创建

①torch.tensor()

功能:从data创建tensor

data:数据,可以是list,numpy

dtype:数据类型,默认与data的一致

device:所在设备,cuda/cpu

requires_grad:是否需要梯度

pin_memory:是否存于锁业内存

②torch.from_numpy(ndarray)

功能:从numpy创建tensor

注意事项:从torch.from_numpy创建的tensor与原ndarray共享内存,当修改其中一个的数据,另外一个也将会被改动

3.tensor创建:依据数值创建

①torch.zeros()

功能:依size创建全0张量

size:张量的形状,如(3,3),(3,224,224)

out:输出的张量

layout:内存中布局形式,有strided,sparse_coo等

device:所在设备,gpu/cpu

requires_grad:是否需要梯度

②torch.zeros_like()

功能:依input形状创建全0张量

input:创建与input同形状的全0张量

dtype:数据类型

③torch.ones()

④torch.ones_like()

功能:依input形状创建全1张量

dtype:数据类型

layout:内存中布局形式

device:所在设备,gpu/cpu

requires_grad:是否需要梯度

⑤torch.full()
⑥torch.full_like()

功能:依input形状创建全0张量

fill_value:张量的值

⑦torch.arange()

功能:创建等差的1维张量

注意事项:数值区间为[start,end)

start:数列起始值

end:数列结束值

step:数列公差,默认为1

⑧torch.linspace()

功能:创建均分的1维张量

注意事项:数值区间为[start,end]

steps:数列长度

⑨torch.logspace()

功能:创建对数均分的1维张量

注意事项:长度为steps,底为base

⑩torch.eye()

功能:创建单位对角矩阵(2维张量)

注意事项:默认为方阵

n:矩阵行数

m:矩阵列数

4.tensor创建:依据概率创建

①torch.normal()

功能:生成正态分布(高斯分布)

mean:均值

std:标准差

②torch.randn()

③torch.randn_like()

功能:生成标准正态分布

size:张量的形状

④torch.rand()

⑤torch.rand_like()

功能:在区间[0,1)上,生成均匀分布

⑥torch.randint()

⑦torch.randint_like()

功能:区间[low,high)生成整数均匀分布

⑧torch.randperm()

功能:生成从0到n-1的随机排列

n:张量的长度

⑨torch.bernoulli()

功能:以input为概率,生成伯努利分布

input:概率值

三.张量操作

1.张量的操作:拼接,切分,索引和变换

①拼接

torch.cat()

功能:将张量按维度dim进行拼接

tensors:张量序列

dim:要拼接的维度

torch.stack()

功能:在新创建的维度dim上进行拼接

tensors:张量序列

dim:要拼接的维度

②切分

torch.chunk()

功能:将张量按维度dim进行平均切分

返回值:张量列表

注意事项:若不能整除,最后一份张量小于其它张量

input:要切分的张量

chunks:要切分的份数

dim:要切分的维度

torch.split()

功能:将张量按维度dim进行切分

返回值:张量列表

tensor:要切分的张量

split_size_or_sections:为int时,表示每一份的长度,为list时,按list元素切分

dim:要切分的维度

③索引

torch.index_select()

功能:在维度dim上,按index索引数据

返回值:依index索引数据拼接的张量

input:要索引的张量

dim:要索引的维度

index:要索引数据的序号

④变换

torch.reshape()

功能:变换张量形状

注意事项:当张量在内存中是连续时,新张量与input共享数据内存

input:要变换的张量

shape:新张量的形状

torch.transpose()

功能:变换张量的两个维度

input:要变换的张量

dim0:要交换的维度

dim1:要交换的维度

torch.t()

功能:2维张量转置,对矩阵而言,等价于torch.transpose(input,0,1)

torch.squeeze()

功能:压缩长度为1的维度(轴)

dim:若为none,移除所有长度为1的轴,若指定维度,当且仅当该轴长度为1时,可以被移除

torch.unsqueeze()

功能:依据dim扩展维度

2.张量的数学运算

①加减乘除

torch.add()

功能:逐元素计算input+alpha*other

input:第一个张量

alpha:乘项因子

other:第二个张量

②对数,指数,幂函数

③三角函数

四.计算图与动态图机制

1.计算图

计算图是用来描述运算的有向无环图

计算图有两个主要元素:结点和边

结点表示数据,如向量,矩阵,张量

边表示运算,如加减乘除卷积等

2.动态图机制

根据计算图搭建方式,可将计算图分为动态图和静态图

动态图:运算和搭建同时进行

静态图:先搭建图,后运算

五.autograd - 自动求导系统

torch.autograd.backward

功能:自动求取梯度

tensors:用于求导的张量,如loss

retain_graph:保存计算图

create_graph:创建导数计算图,用于高阶求导

grad_tensors:多梯度权重

注意:

梯度不自动清零

依赖于叶子结点的结点,requires_grad默认为true

叶子结点不可执行in-place

六.数据读取机制DataLoader和Dataset

1.DataLoader

torch.utils.data.DataLoader

功能:构建可迭代的数据装载器

dataset:dataset类,决定数据从哪读取及如何读取

batchsize:批大小

num_works:是否多进程读取数据

shuffle:每个epoch是否乱序

drop_last:当样本数不能被batchsize整除时,是否舍弃最后一批数据

epoch:所有训练样本都已输入到模型中,称为一个epoch

iteration:一批样本输入到模型中,称为一个iteration

batchsize:批大小,决定一个epoch有多少个iteration

数据读取:读哪些数据?从哪读数据?怎么读数据?

2.Dataset

torch.utils.data.Dataset

功能:dataset抽象类,所有自定义的dataset需要继承它,并且复写

__getitem__()

gentitem:接收一个索引,返回一个样本

七.模型创建与nn.Module

1.模型创建步骤

①构建网络层:卷积层,池化层,激活函数层等

②拼接网络层

③权值初始化

模型构建两要素:构建子模块,拼接子模块

2.nn.Module

torch.nn

nn.Parameter:张量子类,表示可学习参数,如weight,bias

nn.Module:所有网络层基类,管理网络属性

nn.functional:函数具体实现,如卷积,池化,激活函数等

nn.init:参数初始化方法

八.模型容器Containers和AlexNet

1.nn.Sequential:按顺序包装多个网络层

顺序性,各网络层之间严格按顺序执行,常用于block构建

2.nn.ModuleList:像python的list一样包装多个网络层

迭代性,常用于大量重复网构建,通过for循环实现重复构建

3.nn.ModuleDict:像python的dict一样包装多个网络层,以索引方式调用网络层

索引性,常用于可选择的网络层

4.AlexNet

采用ReLU:替换饱和激活函数,减轻梯度消失

采用LRU(local response normalization):对数据归一化,减轻梯度消失

Dropout:提高全连接层的鲁棒性,增加网络的泛化能力

Data Augmentation TenCrop,色彩修改

九.卷积层

1.1d/2d/3d卷积

卷积运算:卷积核在输入信号(图像)上滑动,相应位置上进行乘加

卷积核:又称滤波器,过滤器,可认为是某种模式,某种特征

卷积过程类似于用一个模板去图像上寻找和它相似的区域,与卷积核模式越相似,激活值越高,从而实现特征提取

AlexNet卷积核可视化,发现卷积核学习到的是边缘,条纹,色彩这一些细节模式

卷积维度:一般情况下,卷积核在几个维度上滑动,就是几维卷积

2.卷积 - nn.Conv2d()

功能:对多个二维信号进行二维卷积

in_channels:输入通道数

out_channels:输出通道数,等价于卷积核个数

kernel_size:卷积核尺寸

stride:步长

padding:填充个数

dilation:空洞卷积大小

groups:分组卷积设置

bias:偏置

3.转置卷积 - nn.ConvTranspose

转置卷积又称为反卷积和部分跨越卷积,用于对图像进行上采样

十.池化,线性,激活函数层

1.池化层 - pooling layer

池化运算:对信号进行“收集”并“总结”,类似水池收集水资源,因而得名池化层

“收集”:多变少

“总结”:最大值/平均值

nn.MaxPool2d

功能:对二维信号(图像)进行最大值池化

kernel_size:池化核尺寸

stride:步长

padding:填充个数

dilation:池化核间隔大小

ceil_mode:尺寸向上取整

return_indices:记录池化像素索引

nn.AvgPool2d

功能:对二维信号(图像)进行平均值池化

nn.MaxUnpool2d

功能:对二维信号(图像)进行最大值池化上采样

2.线性层 - linear layer

线性层又称全连接层,其每个神经元与上一层所有神经元相连,实现对前一层的线性组合,线性变换

nn.Linear

功能:对一维信号(向量)进行线性组合

in_features:输入结点数

out_features:输出结点数

bias:是否需要偏置

3.激活函数层 - activation layer

激活函数对特征进行非线性变换,赋予多层神经网络具有深度的意义

nn.Sigmoid

输出值在(0,1),符合概率

导数范围是[0,0.25],易导致梯度消失

输出为非0均值,破坏数据分布

nn.tanh

输出值在(-1,1),数据符合0均值

导数范围是(0,1),易导致梯度消失

nn.ReLU

输出值均为正数,负半轴导致死神经元

导数是1,缓解梯度消失,但易引发梯度爆炸

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pytorch是机器学习中的一个重要框架,它与TensorFlow一起被认为是机器学习的两大框架。Pytorch学习可以从以下几个方面入手: 1. Pytorch基本语法:了解Pytorch的基本语法和操作,包括张量(Tensors)的创建、导入torch库、基本运算等\[2\]。 2. Pytorch中的autograd:了解autograd的概念和使用方法,它是Pytorch中用于自动计算梯度的工具,可以方便地进行反向传播\[2\]。 3. 使用Pytorch构建一个神经网络:学习使用torch.nn库构建神经网络的典型流程,包括定义网络结构、损失函数、反向传播和更新网络参数等\[2\]。 4. 使用Pytorch构建一个分类器:了解如何使用Pytorch构建一个分类器,包括任务和数据介绍、训练分类器的步骤以及在GPU上进行训练等\[2\]。 5. Pytorch的安装:可以通过pip命令安装Pytorch,具体命令为"pip install torch torchvision torchaudio",这样就可以在Python环境中使用Pytorch了\[3\]。 以上是一些关于Pytorch学习笔记,希望对你有帮助。如果你需要更详细的学习资料,可以参考引用\[1\]中提到的网上帖子,或者查阅Pytorch官方文档。 #### 引用[.reference_title] - *1* [pytorch自学笔记](https://blog.csdn.net/qq_41597915/article/details/123415393)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Pytorch学习笔记](https://blog.csdn.net/pizm123/article/details/126748381)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值