目录
1. pytorch介绍
Pytorch是Torch7团队开发的,与Torch的不同之处在于Pytorch使用了Python作为开发语言,同样说明它是一个以Python优先的深度学习框架,它不仅能够实现强大的GPU加速,同时还支持动态神经网络,这是TensorFlow等很多主流框架不支持的。而且Pytorch可以轻松扩展,近两年有赶超TensorFlow的势头
Pytorch中有两种变量类型,一种是Tensor,一种是Variable。并且Tensor和Numpy之间可以自由转换。
2. 卷积神经网络(CNN)
卷积神经网络(CNN——Convolutional Neural Network)是一种前馈神经网络。长期以来是图像识别领域的核心算法之一
这是一张卷及神经网络机构示意图,让我们理解下各部分:
- 输入层(Input Layer):对于我们人来说输入的是一张图片,但是对于电脑来说输入的是一个矩阵类型的数据,这些数据代表着这张图片的像素值
- 卷积层(Convolution Layer):对输入的数据进行特征提取,每个卷积核每次从一个小区域提取到一个特征值,所有的特征值组合起来就得到了一个特征图,当用多个卷积核对输入数据进行特征提取时,就得到了多个特征图。这个卷积核我们称为(kernel)
- 激活函数(Activation Function):在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端,引入激活函数是为了增加神经网络模型的非线性
- 池化层(Pooling Layer):在不影响特征质量的情况下对图片进行压缩,以减少参数,池化主要有两种,一种是MaxPooling,一种是AvePooling。假设池化的内核是一个2*2的矩阵,采用MaxPooling则是输出其中的最大值,采用AvePooling则输出所有数据的平均值
- 全连接层(Fully Connected Layer,简称FC):在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用
- 输出层(Output Layer):卷积神经网络中输出层的上游通常是全连接层,因此其结构和工作原理与传统前馈神经网络中的输出层相同。对于图像分类问题,输出层使用逻辑函数或归一化指数函数(softmax function)输出分类标签 [。在物体识别(object detection)问题中,输出层可设计为输出物体的中心坐标、大小和分类 。在图像语义分割中,输出层直接输出每个像素的分类结果
理解完卷积神经网络后,让我们来看下PyTorch中的卷积神经网络
3. PyTorch中的卷积神经网络
3.1卷积层:nn.Conv2d()
其参数如下:
参数 | 含义 |
in_channels | 输入信号的通道数. |
out_channels | 卷积后输出结果的通道数. |
kernel_size | 卷积核的形状. 例如kernel_size=(3, 2)表示3X2的卷积核,如果宽和高相同,可以只用一个数字表示 |
stride | 卷积每次移动的步长, 默认为1. |
padding | 处理边界时填充0的数量, 默认为0(不填充). |
dilation | 采样间隔数量, 默认为1, 无间隔采样 |
groups | 输入与输出通道的分组数量. 当不为1时, 默认为1(全连接 |
bias | 为 True 时, 添加偏置. |
3.2 池化层:nn.MaxPool2d()
其参数如下: