LeNet-5学习笔记

LeNet-5

网络结构
输入→卷积(C1)→池化(S2)→卷积(C3)→池化(S4)→全连接(F5)→全连接(F6)→输出(Output)
在这里插入图片描述

卷积神经网络的构成

输入层

整个网络的输入部分,在图像中,一般就是一个图像的像素矩阵,一般为三维矩阵,其中长宽代表了图像的大小,深度代表了图像的色彩通道(channel),其中,黑白图片的深度为1,彩色采用RGB色彩模式下的深度为3.

卷积层

卷积层中的输入为上一层中的一小块(一般为33或55的卷积块),通过卷积操作,会使节点矩阵变得更深。
卷积层的计算

  • 局部关联:每个神经元看做一个滤波器(filter)
  • 窗口滑动: filter对局部数据计算

深度:如下图
在这里插入图片描述
步长:滑动窗口每次移动的长度
填充值(padding):在原有的矩阵外填充(一般为0)一层,以便遍历矩阵的全部像素
卷积操作:
在这里插入图片描述
特征图的边长:N = ( W − F + 2 P ) / S + 1
其中,W是输入的图像,F是卷积核大小,P是填充值,S是步长。

常用激活函数:

在这里插入图片描述

池化层

池化层可以看作将一张高分辨率的图像转化为低分辨率的图像,通过池化层,可以进一步缩小最后全连接层中节点的个数,以减少神经网络中的参数。

  • 最大池化是指把卷积后函数区域内元素的最大值作为函数输出的结果,对输入图像提取局部最大响应,选取最显著的特征。
  • 平均池化是指把卷积后函数区域内元素的算法平均值作为函数输出结果,对输入图像提取局部响应的均值。

如下图。
在这里插入图片描述

LeNet模型

LeNet-5共有7层,不包含输入,每层都包含可训练参数;每个层有多个Feature Map,每个FeatureMap通过一种卷积滤波器提取输入的一种特征,然后每个FeatureMap有多个神经元。
在这里插入图片描述

输入层:

在上述图像中,输入层为一个32×32像素的图像,其通道数为1.

C1层(卷积层):

使用了6个5×5大小的卷积核,padding=0,stride=1,输出为6个28×28大小的特征图
在这里插入图片描述

S2层(池化层-下采样层):
  • 输入:28*28
  • 卷积核:2*2
  • 采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid
  • 卷积核种类(输出通道):6
  • 输出featureMap大小:14*14(28/2)
  • 神经元数量:14 * 14 *6
  • 可训练参数:2*6(和的权+偏置)
  • 连接数:(2 * 2 + 1)* 6 * 14 *14
  • S2中每个特征图的大小是C1中特征图大小的1/4。
    在这里插入图片描述
S3层(卷积层):

使用 16 个 5×5xn 大小的卷积核,padding=0,stride=1 进行卷积,得到 16 个 10×10 大小的特征图:14-5+1=10
在这里插入图片描述

S4层(池化层-下采样层):

使用 16 个 2×2 大小的卷积核进行池化,padding=0,stride=2,得到 16 个 5×5 大小的特征图:10/2=5。
参数个数:(1+1)*16=32。

F5层(卷积层-全连接层):

使用 120 个 5×5x16 大小的卷积核,padding=0,stride=1进行卷积,得到 120 个 1×1 大小的特征图:5-5+1=1。即相当于 120 个神经元的全连接层。
参数个数:(5516+1)120=48120。
连接数:48120
1*1=48120
在这里插入图片描述

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

Output 层共有 10 个节点,分别代表数字 0 到 9。假设x是上一层的输入,y 是 RBF的输出,则 RBF 输出的计算方式是:
在这里插入图片描述
参数个数:84*10=840。

连接数:84*10=840
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
LeNet-5神经网络 C源代码,这个写的比较好,可以用gcc编译去跑,结合理论可以对深度学习有更深刻的了解 介绍 根据YANN LECUN的论文《Gradient-based Learning Applied To Document Recognition》设计的LeNet-5神经网络,C语言写成,不依赖任何第三方库。 MNIST手写字符集初代训练识别率97%,多代训练识别率98%。 DEMO main.c文件为MNIST数据集的识别DEMO,直接编译即可运行,训练集60000张,测试集10000张。 项目环境 该项目为VISUAL STUDIO 2015项目,用VISUAL STUDIO 2015 UPDATE1及以上直接打开即可编译。采用ANSI C编写,因此源码无须修改即可在其它平台上编译。 如果因缺少openmp无法编译,请将lenet.c中的#include和#pragma omp parallel for删除掉即可。 API #####批量训练 lenet: LeNet5的权值的指针,LeNet5神经网络的核心 inputs: 要训练的多个图片对应unsigned char二维数组的数组,指向的二维数组的batchSize倍大小内存空间指针。在MNIST测试DEMO中二维数组为28x28,每个二维数组数值分别为对应位置图像像素灰度值 resMat:结果向量矩阵 labels:要训练的多个图片分别对应的标签数组。大小为batchSize batchSize:批量训练输入图像(二维数组)的数量 void TrainBatch(LeNet5 *lenet, image *inputs, const char(*resMat)[OUTPUT],uint8 *labels, int batchSize); #####单个训练 lenet: LeNet5的权值的指针,LeNet5神经网络的核心 input: 要训练的图片对应二维数组 resMat:结果向量矩阵 label: 要训练的图片对应的标签 void Train(LeNet5 *lenet, image input, const char(*resMat)[OUTPUT],uint8 label); #####预测 lenet: LeNet5的权值的指针,LeNet5神经网络的核心 input: 输入的图像的数据 labels: 结果向量矩阵指针 count: 结果向量个数 return 返回值为预测的结果 int Predict(LeNet5 *lenet, image input, const char(*labels)[LAYER6], int count); #####初始化 lenet: LeNet5的权值的指针,LeNet5神经网络的核心
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chj65

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值