Vannesa's Studio

LeNet-5

Word count: 1.4kReading time: 5 min
2020/06/07 Share

大创项目讲座学习笔记

Apr 25,2020 Handwritten digit recognition based on LeNet-5
Record and progress.

Part 1 Introduction to CNN

CNN的基本结构

Image text

  • 输入层:最左端的图像,在计算机“眼里”是矩阵
  • 卷积层(Convolution Layer):CNN特有,使用ReLU激活函数。ReLU(x)=max(0,x)(将小于0的输出值都变为0)
  • 池化层(Pooling Layer):没有激活函数
  • 全连接层(Fully Connected Layer)
  • 输出层:使用了Softmax激活函数来做图像识别的分类。(全连接+Softmax)

输入层与输出层中间统称为隐藏层。可以使用卷积层+卷积层或其他的组合方式,最常见的组合方式为卷积层+池化层(可重复多次出现)。

如图,输入船的图像矩阵,最终有94%的可能性输出为“boat”

Convolution Layer 卷积层

二维输入

Image text

  • 卷积结果:输入图像的不同局部矩阵卷积核矩阵各个位置元素相乘,然后相加。
  • 步幅:图中为1个像素

多维输入

Image text

https://cs231n.github.io/assets/conv-demo/index.html

  • 输入3个5x5的矩阵,加上1的padding(填充0),编程3个7x7的矩阵(7x7x3的张量)
  • 卷积核W0、W1为3x3x3的张量
  • 步幅为2,每次卷积后移动2个像素的位置
  • 卷积操作:7x7x3张量与卷积核W03x3x3张量的子矩阵卷积后,结果相加后+偏移量b
  • 由于有两个卷积核,最终结果为3x3x2的张量

卷积后,使用ReLU激活函数

  • ReLU(x)=max(0,x)(将小于0的输出值都变为0)

Pooling Layer 池化层

Image text

  • 目的:压缩矩阵
  • nxn的池化:将子矩阵每nxn个元素变成一个元素
  • 池化标准:MAX/Average

Part 2 LeNet-5

Image text

INPUT层-输入层

  • 输入图像尺寸 32*32
  • 传统上不将输入层视为网络层次结构之一

C1层-卷积层

  • 输入图片:32 * 32
  • 卷积核大小:5 * 5
  • 卷积核种类:6
  • 输出featuremap大小:28 * 28 (32-5+1)=28
  • 神经元数量:28 * 28 * 6
  • 可训练参数:(5 * 5+1) * 6(每个滤波器5 * 5=25个unit参数和一个bias参数,一共6个滤波器)
  • 连接数:(5 * 5+1)* 6 * 28 * 28=122304

S2层-池化层

  • 输入:28 * 28
  • 采样区域:2 * 2
  • 输出featureMap大小:14 * 14(28/2)
  • 神经元数量:14 * 14 * 6
  • 连接数:(2 * 2+1)* 6 * 14 * 14

C3层-卷积层

  • 输入图片:14 * 14
  • 卷积核大小:5 * 5
  • 卷积核种类:16
  • 输出featuremap大小:10 * 10 (14-5+1)=10
  • 神经元数量:10 * 10 * 16
  • 可训练参数:6 * (3 * 5 * 5+1)+6 * (4 * 5 * 5+1)+3 * (4 * 5 * 5+1)+1 * (6 * 5 * 5+1)=1516
    Image text
  • 连接数:(5 * 5+1)* 6 * 28 * 28=122304

S4层-池化层

  • 输入:10 * 10
  • 采样区域:2 * 2
  • 输出featureMap大小:5 * 5(10/2)
  • 神经元数量:5 * 5 * 16
  • 连接数:(2 * 2+1)* 16 * 5 * 5

C5层-卷积层

  • 输入图片:5 * 5
  • 卷积核大小:5 * 5
  • 卷积核种类:120
  • 输出featuremap大小:1 * 1 (5-5+1)=1
  • 神经元数量:1 * 1 * 120
  • 可训练参数:(16 * 5 * 5+1)* 120
  • 连接数:(16 * 5 * 5+1)* 120 * 1 * 1=48120

F6层-全连接层

  • 输入: 120维向量
  • 计算方式:计算输入向量和权重向量之间的点积,再加上一个偏置,结果通过sigmoid函数输出
  • 可训练参数:84 * (120+1)=10164

OutPut层-全连接层

  • 共有10个节点,分别代表数字0到9,且如果节点i的值为0,,则网络识别的结果是数字i。

Image text

Part 3 Environment Configuration&Code

环境配置

调参

  • 第一次跑结果
    Image text

Part 4 Learning resources

Part 5 Something about Scientific research

本科学习的重点

  • 打好专业基础与数学基础
  • 参与科研,熟悉科研,寻找感兴趣的研究方向

科研和GPA没有直接关联

  • 基础知识
  • 编程能力
  • 思维能力
  • 强烈的学习动力

努力导致质变

  • 科研是一场天赋努力并持的慢跑

如何开始早期的科研训练?

  • 在线网站学习机器学习等课程。(我推荐推b站,慕课,Coursera,edX,Udacity,更喜欢纯英文教学,能明显感受到思维模式的不同
  • 读论文+论文解读
  • 动手写代码(重复2、3
  • 寻找最新的survey文章读。
    • 核心研究问题是什么
    • 哪些研究学者的论文被大量引用
    • follow一个问题
  • 找到该问题最为经典的一篇文章,了解清楚基本的问题定义、评测方法以及已有方法。通过下载真实数据集合,构建评测实验,实现代码,分析bad case等途径查看已有方法具有什么问题。然后试图模仿已有论文论述的研究动机,看看能否将数据中发现的问题转化为学术问题。

    在我看来,科研也许不是每一个人都会选择的道路,想清楚自己想要什么很重要。如果选择了研究生活,确保自己有足够的耐心和热爱去坚持到底。

最后分享一张图

Image text

CATALOG
  1. 1. Part 1 Introduction to CNN
    1. 1.1. CNN的基本结构
    2. 1.2. Convolution Layer 卷积层
      1. 1.2.1. 二维输入
      2. 1.2.2. 多维输入
      3. 1.2.3. 卷积后,使用ReLU激活函数
    3. 1.3. Pooling Layer 池化层
  2. 2. Part 2 LeNet-5
    1. 2.1. INPUT层-输入层
    2. 2.2. C1层-卷积层
    3. 2.3. S2层-池化层
    4. 2.4. C3层-卷积层
    5. 2.5. S4层-池化层
    6. 2.6. C5层-卷积层
    7. 2.7. F6层-全连接层
    8. 2.8. OutPut层-全连接层
  3. 3. Part 3 Environment Configuration&Code
    1. 3.1. 环境配置
    2. 3.2. 调参
  4. 4. Part 4 Learning resources
  5. 5. Part 5 Something about Scientific research
    1. 5.1. 本科学习的重点
    2. 5.2. 科研和GPA没有直接关联
    3. 5.3. 努力导致质变
    4. 5.4. 如何开始早期的科研训练?
    5. 5.5. 最后分享一张图