Pytorch | 学习笔记(二)

注:本系列博客在于汇总帖,类似自用笔记,方便复习回顾,博文中的引用都注明出处,点赞收藏原博主

一、加载数据和tensorboard

1.加载数据:Dataset和DataLoader

2.tensorboard:add_scalar()  ,add_image()  ,numpy.array()

Pytorch | 学习笔记(二)_第1张图片

 二、神经网络(nn,Neural Networdk)

Pytorch | 学习笔记(二)_第2张图片

1.基本骨架 

1.1基本概念

 1.1.1整体架构

Pytorch | 学习笔记(二)_第3张图片

1.1.2 卷积神经网络与传统网络的区别

 Pytorch | 学习笔记(二)_第4张图片

 1.1.3卷积神经网络优势与缺陷

Pytorch | 学习笔记(二)_第5张图片

 1.1.4 其它

Pytorch | 学习笔记(二)_第6张图片

1.2官网解释    -nn.Module

Pytorch | 学习笔记(二)_第7张图片

2.Convolution Layer

2.1基本概念

2.1.1 卷积层 是CNN最重要的部分。若第一层为图像,则只与一个小矩形区域内的像素相连接。该结构使CNN的前一个卷积层专注于的相对低级的特征,后一个卷积层整合前一个卷积层的特征,形成相对复杂的特征。这种层次结构与视觉皮层的处理方式极其类似,是CNN在图像识别领域中具有优势的一个原因。同时,单个卷积层的结构是2D的,这使得其更容易接收输入数据。
2.2.2 训练时 ,若出现内存不足的情况,可以减小mini-batch的大小;采用步长减小维度;删除一些层;用16-bit float代替32-bit float;采用分布式训练。
2.2.3 卷积核 ,可以认为是一张图,图的尺寸为接收域的大小,过滤器中每个权重可以认为是一个像素值。假设权重只包含0和1两个值,那么过滤器将忽略0对应的输入,仅保留1对应的输入。同一层中所有的神经元都具有同样的过滤器,那这一层的输出就是一张特征图(feature map)。特征图突出了输入中与过滤器极其相似的所有区域。在训练中,CNN会根据任务寻找最有效的过滤器,然后将这些过滤器组合为更复杂的模式。
2.2.4 特征图堆叠 ,实际中,卷积层大多是以3D的形式存在,即同一个卷积层中包含多个特征图,这些特征图具有相同的尺寸,堆叠在一起构成3D卷积层。在一个特征图中,所有神经元共享权重,不同的特征图具有不同的权重;神经元的接收域将作用到前一层的所有特征图。因此,一个卷积层会应用多个过滤器至其输入,得到多个特征图,每个过滤器对应一个特征图,每个特征图包含不同的特征。特征图中所有神经元共享权重不仅会大大减少模型参数,而且会将在某区域学习得到的模式应用到其他区域,在其他区域识别出该模式。
2.2.5 TensorFlow 实现 ,TensorFlow中,输入图像通常表示为[height, weight, channels]的3D tensor。

2.2官网解释     nn.Conv2d

Pytorch | 学习笔记(二)_第8张图片

 2.3二维卷积计算过程简单示例 

Pytorch | 学习笔记(二)_第9张图片

3.Pooling Layer

3.1基本概念

3.1.1 分类:
    常见的的池化层有最大池化(max pooling)和平均池化(average pooling).
3.1.2 作用:
    通过池化层可以减少空间信息的大小,也就提高了运算效率;
    减少空间信息也就意味着减少参数,这也降低了overfit的风险;
    获得空间变换不变性(translation rotation scale invarance,平移旋转缩放的不变性).

3.2官网解释  nn.MaxPool2d

Pytorch | 学习笔记(二)_第10张图片
3.3二维最大池化计算过程简单示例 

Pytorch | 学习笔记(二)_第11张图片

4.Padding Layer

4.1基本概念

4.1.1 增加各个边的pixels的数量
4.1.2 作用:
    为了不丢弃原图信息
    为了保持feature map 的大小与原图一致
    为了让更深层的layer的input依旧保持有足够大的信息量
    为了实现上述目的,且不做多余的事情,padding出来的pixel的值都是0,不存在噪音问题。

4.2官网解释   nn.ReflectionPad2d
Pytorch | 学习笔记(二)_第12张图片

5.Non-linear Activations 非线性激活

5.1基本概念

5.1.1 非线性激活函数一般接在全连接层、卷积层、循环层的后面,用以选择性地激活神经网络中的神经元,同时起到限制每个神经元输出值的范围的作用。
5.1.2 应该具备的特点:
    平滑,将更好的信息深入神经网络
    为神经网络引入非线性
    避免梯度消失,防止网络更新过慢
    输出尽量零对称,避免梯度向特定方向移动
    可微或部分可微,满足反向传播过程
    梯度计算不应太复杂,影响网络训练效率

5.2官网解释      nn.ReLU         nn.Sigmoid
Pytorch | 学习笔记(二)_第13张图片

6.Normalization Layer 正则化

6.1基本概念

6.1.1 Normalizer (基于矩阵的行,将样本向量转换为单位向量) 其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准 
6.1.2 常见用于文本分类和聚类、logistic回归中也会使用,有效防止过拟合
6.1.3 目的:防止模型过拟合

6.2官网解释          nn.BatchNorm2d 

Pytorch | 学习笔记(二)_第14张图片

7.Recurrent Layer 递归

7.1基本概念

7.1.1 递归神经网络( RNN)是两种 人工神经网络的总称。一种是 时间递归神经网络(recurrent neural network),另一种是 结构递归神经网络(recursive neural network)。
7.1.2 常规递归网络从理论上应该可以顾及所有过去时刻的依赖,然而实际却无法按人们所想象工作。原因在于梯度消失(vanishinggradient)和梯度爆炸(exploding gradient)问题。
7.1.3 Recurrent Layer在时间结构上存在共享特性。

7.2官网解释  Recurrent Layers 

Pytorch | 学习笔记(二)_第15张图片

8.Transformer Layer  

Pytorch | 学习笔记(二)_第16张图片

9.Linear Layer 线性

9.1基本概念

9.1.1 全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”(下面会讲到这个分布式特征)映射到样本标记空间的作用。
9.1.2 作用:
    通过特征提取,实现分类
9.1.3 全连接层对模型影响参数就是三个:
    1.全接解层的总层数(长度)
    2.单个全连接层的神经元数(宽度)
    3.激活函数
9.1.4 全连接层的输入与输出都是二维张量,一般形状为 [batch_size, size]

9.2官网解释      nn.Linear 

Pytorch | 学习笔记(二)_第17张图片

10.Dropout Layer 随机失活

10.1基本概念

10.1.1 在进行第一个batch的训练时,有以下步骤:
    1.设定每一个神经网络层进行dropout的概率
    2.根据相应的概率拿掉一部分的神经元,然后开始训练,更新没有被拿掉神经元以及权重的参数,将其保留
    3.参数全部更新之后,又重新根据相应的概率拿掉一部分神经元,然后开始训练,如果新用于训练的神经元已经在第一次当中训练过,那么我们继续更新它的参数。而第二次被剪掉的神经元,同时第一次已经更新过参数的,我们保留它的权重,不做修改,直到第n次batch进行dropout时没有将其删除。
10.1.2 作用:
    防止CNN 过拟合因为约大的神经网络就越有可能产生过拟合,因此我们随机删除一些神经元就可以防止其过拟合了,也就是让我们拟合的结果没那么准确。对什么样的神经网络层进行dropout的操作呢?神经元个数较多的层,因为神经元较多的层更容易让整个神经网络进行预测的结果产生过拟合。

10.2官网解释       nn.Dropout

Pytorch | 学习笔记(二)_第18张图片

11.Sparse layers  稀疏

11.1基本概念

11.1.1 能有效地计算稀疏数据的卷积,只计算非零元素(元素指的是图像像素或空间体素)的卷积,而不需要计算所有的元素
11.1.2 目的是对稀疏特征进行降维

11.2官网解释     nn.Embedding

Pytorch | 学习笔记(二)_第19张图片

12.Distance Functions  距离函数

12.1基本概念

12.1.1 作用:
    计算两个值之间的误差

12.2官网解释

Pytorch | 学习笔记(二)_第20张图片

13.Loss Functions

13.1基本概念

13.1.1 损失函数(loss function)就是用来度量模型的预测值f(x)与真实值Y的差异程度的运算函数,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。
13.1.2 作用:
    衡量module的output和实际的target、label(目标)的差距loss
    然后我们可以根据loss,指导module让它的输出更加接近 target(反向传播)
    loss越小越好

13.2官网解释     nn.L1Loss     nn.MSELoss       nn.CrossEntropyLoss  

Pytorch | 学习笔记(二)_第21张图片

14.优化器  TORCH.OPTIM

Pytorch | 学习笔记(二)_第22张图片

三、备注:

1.torch.nn各层网络介绍说明文档进入的方式如图:

Pytorch | 学习笔记(二)_第23张图片

2.import Image时注意Windows需要路径要双斜杠

from PIL import Image
img_path="E:\\Python demo\\pytorch demo\\hymenoptera_data\\train\\ants\\0013035.jpg"
#windows是双斜杠
image=Image.open(img_path)
image.show()

3.获取文件夹所有照片的方法 :os.listdir()

os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表

import os
#获取文件夹的所有图片
dir_path = "E:\\Python demo\\pytorch demo\\hymenoptera_data\\train\\ants"
img_path_list = os.listdir(dir_path)

 结果如图:

Pytorch | 学习笔记(二)_第24张图片

4.拼接文件路径 : os.path.join()函数用于路径拼接文件路径,可以传入多个路径

import os
root_dir = "hymenoptera_data/train"
label_dir = "ants"
patch = os.path.join(root_dir,label_dir)  #路径相加

  结果如图:

Pytorch | 学习笔记(二)_第25张图片

5.tensorboard的加载

tensorboard --logdir=(事件文件夹名)

tensorboard --logdir=logs --port=6007(指定端口打开)

Pytorch | 学习笔记(二)_第26张图片

 6.模型保存与加载    #        以vgg16为例

vgg16 = torchvision.models.vgg16(pretrained=False)

6.1.1 保存方法 1 : 模型结构 + 参数

torch.save(vgg16, "vgg16_method1.pth") #模型, 路径。这样还保存了模型参数

6.1.2 对应打开方法 1 

model1 = torch.load("vgg16_method1.pth")

 6.2.1 保存方法 2 : 模型参数(官方推荐)

torch.save(vgg16.state_dict(), "vgg16_method2.pth")  #模型中的参数保存成字典格式

6.2.2 对应打开方法 2

vgg16 = torchvision.models.vgg16(pretrained=False)
model2 = torch.load("vgg16_method2.pth")
# print(model2)
vgg16.load_state_dict(vgg16, model2)
# print(vgg16)

7.加载GPU训练

Pytorch | 学习笔记(二)_第27张图片

感谢以下博主提供的帮助:

PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】_哔哩哔哩_bilibili

卷积神经网络(CNN)笔记——卷积层(Convolutional Layer) - 知乎

pooling layer(池化层)介绍及作用_QFJIZHI的博客-CSDN博客_平均池化层的作用

一句话CNN:如何理解padding的作用和算法 - 知乎

深度学习-非线性激活函数 - 知乎

机器学习必知必会:正则化 - 知乎

YJango的循环神经网络——介绍 - 知乎

全连接层详解_pogg_的博客-CSDN博客_全连接层

【深度学习】:一文入门Dropout层 - Geeksongs - 博客园

通俗易懂的解释Sparse Convolution过程 - 知乎

关于Pytorch的入门学习笔记 - Norbury - 博客园

【常用损失函数】5分钟快速复习损失函数 | L1Loss| CrossEntropyLoss| NLLLoss| MSELoss - 知乎 (zhihu.com)

你可能感兴趣的:(Pytorch学习记录,pytorch,学习,深度学习)