LeNet-5是由Yann LeCun设计的用于手写数字识别和机器打印字符的卷积神经网络。她在1998年发表的论文《基于梯度学习的文本识别》中提出了该模型,并给出了对该模型网络架构的介绍。如下图所示,LeNet-5共有7层(不包括输入层),包含卷积层、下采样层、全连接层,而其输入图像为32*32.论文链接:Gradient-based learning applied to document recognition | IEEE Journals & Magazine | IEEE Xplore

 图1. LeNet-5网络架构

1.C1:卷积层

c1层采用卷积层对输入的图像进行特征提取,利用6个5*5的卷积核生成6个特征图(feature map)。其步长为1且不使用扩充值。因此卷积后的特征层为28*28.一个卷积核拥有的可训练参数为5*5+1=26,其中1为偏置参数。整个C1层可训练参数为(5*5+1)*6=156.

2.S2:下采样层

下采样(subsampling)层主要对特征进行降维处理,效果与池化相同。S2层使用2*2的滤波器池化C1的特征图,因此将生成6个尺寸为14*14的特征图。在计算时,将滤波器中的4个值相加,然后乘以可训练权值参数w,加上偏置参数b,最后通过sigmoid函数形成新的值。S2层的每个特征图中都有两个参数,一个是权值参数,一个是偏置参数,因此该层共有2*6=12个参数。

3.C3:卷积层

C3层有16个大小为5*5的卷积核,步长为1且不填充边界。C3层将S2层6个14*14的特征图卷积成16个10*10的特征图。值得注意的是,S2层与C3层的卷积核并不是全连接的,而是部分连接的。

图2:S2层特征图与C3层卷积核连接的组合

4.S4:下采样层

S4的滤波器与S2层的滤波器相似,也是2*2的,所以,S4层的特征图池化后,将生成16个5*5的特征图。S4层参数的个数为2*16=32.

5.C5:卷积层

C5层有120个5*5的卷积核,将产生120个1*1的特征图,与S4层是全连接的。C5层参数的个数不能参照C1层来计算,而是要参照C3层来计算,且此时是没有组合的,因此,应该是(5*5*16+1)*120=48120.

6.F6:全连接层

F6有84个单元,单元的个数与输出层的设计有关。该层作为典型的神经网络层,每一个单元都计算输入向量与权值参数的点积并加上偏置参数,然后传给sigmoid函数,产生该单元的一个状态并传递给输出层。在这里,将输出作为输出层的径向基函数的初始参数,用于识别完整的ASCII字符集。C5有120个单元;F6层有84个单元,每个单元都将容纳120个单元的计算结果。因此,F6层参数的个数为(120+1)*84=10164.

7.output:输出层

output层是全连接层,共有10个单元,代表数字0~9。利用径向基函数,将F6层84个单元的输出作为节点的输入xj,计算欧氏距离。距离越近,结果就越小,意味着识别的样本越符合该节点所代表的字符。由于该层是全连接层,参数个数为84*10=840。

网络搭建:

import torch.nn as nn
import torch.nn.functional as F class Net(nn.Module): def __init__(self):
super(Net, self).__init__()
#input image channel is one, output channels is six,5*5 square convolution
self.conv1=nn.Conv2d(1, 6, 5)
self.conv2=nn.Conv2d(6, 16, 5)
self.fc1=nn.Linear(16*5*5, 120)
self.fc2=nn.Linear(120, 84)
self.fc3=nn.Linear(84, 10) def forward(self, x):
#max pooling over a (2,2) window
#c1
x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
#if the kernel size is a square you can only specify a single number
x = F.max_pool2d(F.relu(self.conv2(x)), 2)
x = x.view(-1, self.num_flat_features(x))
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x def num_flat_features(self, x):
#all dimensions except the batch dimension
size = x.size()[1:]
num_features = 1
for s in size:
num_features *= s
return num_features net = Net()
print(net)

LeNet-5网络搭建详解的更多相关文章

  1. Linux下DNS服务器搭建详解

    Linux下DNS服务器搭建详解 DNS  即Domain Name System(域名系统)的缩写,它是一种将ip地址转换成对应的主机名或将主机名转换成与之相对应ip地址的一种机制.其中通过域名解析 ...

  2. MySQL集群搭建详解

    概述 MySQL Cluster 是MySQL 适合于分布式计算环境的高实用.可拓展.高性能.高冗余版本,其研发设计的初衷就是要满足许多行业里的最严酷应用要求,这些应用中经常要求数据库运行的可靠性要达 ...

  3. VirtualBox开发环境的搭建详解(转)

    VirtualBox开发环境的搭建详解   有关VirtualBox的介绍请参考:VirtualBox_百度百科 由于VirtualBox官网提供的搭建方法不够详细,而且本人在它指导下,从下载所需的开 ...

  4. Windows GTK+ 环境搭建(详解)

    来源:http://blog.sina.com.cn/s/blog_a6fb6cc901017ygy.html Windows GTK+ 环境搭建 最近要做界面的一些东西,但是对微软提供的类库MFC不 ...

  5. 用netstat查看网络状态详解

    --用netstat查看网络状态详解 -----------------------------2014/06/11 一.Linux服务器上11种网络连接状态:                     ...

  6. Linux网络配置文件详解

    --Linux网络配置文件详解----------------------2013/10/03 目前在企业级服务器的Linux系统中,RHEL占有绝对的优势,不管是曾经在互联网公司还是在目前测试Vir ...

  7. Python环境搭建详解(Window平台)

    前言 Python,是一种面向对象的解释型计算机程序设计语言,是纯粹的自由软件,Python语法简洁清晰,特色是强制用空白符作为语句缩进,具有丰富和强大的库,它常被称为胶水语言. Python是一种解 ...

  8. Spring4.X + spring MVC + Mybatis3 零配置应用开发框架搭建详解(1) - 基本介绍

    Spring4.X + spring MVC + Mybatis3 零配置应用开发框架搭建详解(1) - 基本介绍 spring集成 mybatis Spring4.x零配置框架搭建 两年前一直在做后 ...

  9. Docker:网络模式详解

    Docker作为目前最火的轻量级容器技术,牛逼的功能,如Docker的镜像管理,不足的地方网络方面. Docker自身的4种网络工作方式,和一些自定义网络模式 安装Docker时,它会自动创建三个网络 ...

随机推荐

  1. php基础-php基本语法

    http://study.163.com/course/courseMain.htm?courseId=246003

  2. 源码简析XXL-JOB的注册和执行过程

    一,前言 XXL-JOB是一个优秀的国产开源分布式任务调度平台,他有着自己的一套调度注册中心,提供了丰富的调度和阻塞策略等,这些都是可视化的操作,使用起来十分方便. 由于是国产的,所以上手还是比较快的 ...

  3. SDK安全测试

    设备调试 strace MI 5X 链接:https://pan.baidu.com/s/1KfsfEgjniozXGUD_69m0SQ 提取码:mulo 推strace到手机中 adb push s ...

  4. tail -n 13 history |awk '{print $2,$3,$4,$5,$6,$7,$8.$9,$10}'提取第2到第11列

    # cat history |awk '{print $2,$3,$4,$5,$6,$7,$8.$9,$10}' # tail -n 13 history 215 systemctl stop 216 ...

  5. 怎么用优启通安装win7 !!!!好好好20191020

    怎么用优启通安装win7 PE技术探索在国内属于前沿梯队.相关PE工具更新的非常及时,两个月一更新,很赞. 尤其是论坛代表作之一:EasyImageX系统备份恢复镜像工具(集成在PE里面),可以说是用 ...

  6. MySQL报错ERROR 1436 (HY000): Thread stack overrun:

    今天搭私服的时候,卡在角色创建画面,日志报错如上. 这是MySQL报错ERROR 1436 (HY000): Thread stack overrun:   修改方法 vim /etc/my.cnf ...

  7. s40 KVM虚拟化企业级实战

    1-为何使用虚拟化 02-KVM虚拟化环境准备 yum install libvirt* virt-* qemu-kvm* -y [root@cs7-kvm ~]# systemctl start l ...

  8. Lua中的异常处理pcall、xpcall、debug使用实例

    如果需要在Lua中处理错误,必须使用函数pcall(protected call)来包装需要执行的代码. pcall接收一个函数和要传递个后者的参数,并执行,执行结果:有错误.无错误:返回值true或 ...

  9. java 文件上传下载

    翻新十年前的老项目,文件上传改为调用接口方式,记录一下子~~~ java后台代码: //取配置文件中的上传目录 @Value("${uploadPath}") String pat ...

  10. 为鸿蒙OS说两句公道话(我对鸿蒙OS的一些看法)

    为鸿蒙说两句公道话 今天看了鸿蒙系统的评测,看完后我感觉很欣慰,为什么这么说 ? 不是很多人吐槽鸿蒙是 Android 套壳吗 ?或者叫鸿蒙 UI 吗?说鸿蒙没有自己的核心技术.看了鸿蒙系统的设计,底 ...