Torch车牌字符识别-网络搭建(五)

目录

1.CNN卷积神经网络的介绍

2.卷积神经网络识别分类原理

3.编码

3.1定义网络

3.2卷积层

 3.2.1卷积层小结

3.4前向传播 

 3.5其他​​​​​​​

1.CNN卷积神经网络的介绍

Torch车牌字符识别-网络搭建(五)_第1张图片

可以处理多维数据是CNN的重要特征(因为有卷积)

车牌也是采用三通道进行训练

先是对一个批次的数据集通过卷积层提取特征

然后是池化层压缩特征

然后再卷积再池化

然后展开输出分类结果

2.卷积神经网络识别分类原理

卷积层主要就是对输入特征进行提取

通过卷积核来实现,卷积核就可以看成一个指定大小的扫描器窗口

扫描器通过滑动来提取整个图片特征 

并且将特征送入池化层

也是滑动窗口实现池化

最后送入全连接层,输入结果

所以实际上前面都是在提取特征

最重要的计算分类还是在全连接层

3.编码

3.1定义网络

Torch车牌字符识别-网络搭建(五)_第2张图片

卷积神经网络的定义类

必须要继承module

打开中文文档

 主页 - PyTorch中文文档

Torch车牌字符识别-网络搭建(五)_第3张图片

init构造方法

然后是super继承父类

3.2卷积层

然后是 两个卷积层,用的是Sequential方法(具体见中文文档)

Sequential是一个时序容器

可以把卷积层需要的一些操作(比如说relu等)放入Sequential中

然后模型运行的时候就会按照传入顺序执行这些操作

Torch车牌字符识别-网络搭建(五)_第4张图片

在卷积层中

先是定义了卷积核的卷积核等一些属性

然后是relu

和池化层

因为输入是3通道rgb,所以这里等in _channels是3

Torch车牌字符识别-网络搭建(五)_第5张图片

out _channels

 就是卷积核的数量

Torch车牌字符识别-网络搭建(五)_第6张图片

Torch车牌字符识别-网络搭建(五)_第7张图片 然后就是再过一层relu和一层pooling

Torch车牌字符识别-网络搭建(五)_第8张图片

nn.MaxPool2d(kernel_size=2)   #维度变换(16,60,40) --> (16,30,20)

Torch车牌字符识别-网络搭建(五)_第9张图片 但是这里对输入维度是2对倍数,所以维度/2就是maxpool2d后对输出维度

 3.2.1卷积层小结

 这个网络就是输入是(3*60*40)对Tensor

然后经过网络变换后:

上面的笔记看错了conv2的out_channles是32

所以输出(32,15,10)的tensor

输出经过线性层给出结果(此结果是24列,代表24哥分类)

Torch车牌字符识别-网络搭建(五)_第10张图片

3.4前向传播 

Torch车牌字符识别-网络搭建(五)_第11张图片

 注意前向传播中有一项.view这是为了将之前conv2输出的(32,15,10)的Tensor拉平为(32*15*10,1)的向量

Torch车牌字符识别-网络搭建(五)_第12张图片

 以下就是24个分类结果(也可以理解为输出的y的ground truth)

Torch车牌字符识别-网络搭建(五)_第13张图片

也就是说,经过前处理的图片输出网络后,会输出一个(1,24)的向量,代表这张图片在24个结果上的最高概率是哪一类 

 3.5其他

然后就是实例化网络

Torch车牌字符识别-网络搭建(五)_第14张图片

然后参照之前的简单的二次函数的网络拟合定义

  1. 先定义优化器
  2. 然后选择损失函数 

具体的看下图

Torch车牌字符识别-网络搭建(五)_第15张图片

 4小结

所以网络实质上就是:

  1. 先写好网络结构(输入到输出所需要经过的网络层)(一些层间的预处理(relu,view等)可以写在网络结构里,也可以写在forward里)
  2. 然后是写好前向传播,在这一部分里,输入到输出的完整流程要体现出来
  3. 定义优化器和损失函数

你可能感兴趣的:(#,pytorch,深度学习,cnn,神经网络)