卷积神经网络:LeNet-5

article/2025/7/3 16:30:26

2021SC@SDUSC

LeNet-5卷积神经网络的整体框架:
LeNet-5卷积神经网络的整体框架
特征映射:一幅图在经过卷积操作后得到结果称为特征图。

LeNet-5共有8层,包含输入层,每层都包含可训练参数;每个层有多个特征映射(,每个特征映射通过一种卷积核(或者叫滤波器)提取输入的一种特征,然后每个特征映射有多个神经元。C层代表的是卷积层,通过卷积操作,可以使原信号特征增强,并且降低噪音。 S层是一个降采样层,利用图像局部相关性的原理,对图像进行子抽样,可以减少数据处理量同时保留有用信息。

计算公式:输入图像的大小为nxn,卷积核的大小为mxm,步长为s, 为输入图像两端填补p个零(zero padding),那么卷积操作之后输出的大小为(n - m + 2p) / s + 1。

1. LeNet-5结构:

1.1 First Layer
LeNet-5的输入是一个32×32灰度图像,它通过第一个卷积层,带有6个特征图或过滤器,大小为5x5,步长为1。 图像的尺寸从32x32x1变为28x28x6。
在这里插入图片描述
1.2Second Layer
LeNet-5应用平均池化层或分采样层,过滤器大小为2x2,步长为2。 得到的图像维数将减少到14x14x6。
在这里插入图片描述
1.3Third Layer
第二个卷积层,16个特征图大小为5x5,步幅为1。 在该层中,16个feature map中只有10个连接到上一层的6个feature map,如下图所示。
在这里插入图片描述
1.4Fourth Layer
第四层(S4)也是平均池化层,过滤器大小为2x2,步幅为2。 这一层和第二层(S2)一样,除了它有16个特征映射,所以输出将减少到5x5x16。
在这里插入图片描述
1.5Fifth Layer
第五层(C5)是一个全连接的卷积层,有120个特征映射,每个特征映射的大小为1×1。 C5中的120个单元每一个都连接到第四层S4中的所有400个节点(5x5x16)。
在这里插入图片描述
1.6Sixth Layer
第六层是84个单元的全连接层(F6)。
在这里插入图片描述
1.7Output Layer
最后,有一个全连接的输出层y,有10个可能的值,对应于从0到9的数字。
在这里插入图片描述

2. LeNet-5的总结如下

在这里插入图片描述

3.LeNet-5 代码实现

import pandas as pd
import numpy as np
np.random.seed(1337) # for reproducibilityfrom keras import backend as K
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation, Flatten
from keras.layers.convolutional import Convolution2D, MaxPooling2D
from keras.utils import np_utils# 输入图片
img_rows, img_cols = 28, 28batch_size = 128 # 在每个优化步骤中使用的图像数量  
nb_classes = 10 # 每位数一个类
nb_epoch = 70 # 使用整个数据进行学习的次数  # 读取训练和测试数据集
train = pd.read_csv("../input/train.csv").values
test  = pd.read_csv("../input/test.csv").values# Check Keras backend
if(K.image_dim_ordering()=="th"):# Reshape the data to be used by a Theano CNN. # (nb_of_samples, nb_of_color_channels, img_width, img_heigh)X_train = train[:, 1:].reshape(train.shape[0], 1, img_rows, img_cols)X_test = test.reshape(test.shape[0], 1, img_rows, img_cols)in_shape = (1, img_rows, img_cols)
else:# Reshape the data to be used by a Tensorflow CNN. # (nb_of_samples, img_width, img_heigh, nb_of_color_channels)X_train = train[:, 1:].reshape(train.shape[0], img_rows, img_cols, 1)X_test = test.reshape(test.shape[0], img_rows, img_cols, 1)in_shape = (img_rows, img_cols, 1)
y_train = train[:, 0] # 第一个数据是label(已经从X_train中删除)  # 转换成 [0;1] 之间的浮点数
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255#将类向量转换为二进制类矩阵
Y_train = np_utils.to_categorical(y_train, nb_classes)#显示形状检查
print('X_train shape:', X_train.shape)
print('Y_train shape:', Y_train.shape)
print('X_test shape:', X_test.shape)model = Sequential()model.add(Convolution2D(12, 5, 5, activation = 'relu', input_shape=in_shape, init='he_normal'))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Convolution2D(25, 5, 5, activation = 'relu', init='he_normal'))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Flatten())
model.add(Dense(180, activation = 'relu', init='he_normal'))
model.add(Dropout(0.5))
model.add(Dense(100, activation = 'relu', init='he_normal'))
model.add(Dropout(0.5))
model.add(Dense(nb_classes, activation = 'softmax', init='he_normal')) #最后一层,每个类有一个输出model.compile(loss='categorical_crossentropy', optimizer='adamax', metrics=["accuracy"])# 让模型学习
model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch, verbose=1)# 预测X_test的标签
yPred = model.predict_classes(X_test)# Save prediction
np.savetxt('mnist-pred.csv', np.c_[range(1,len(yPred)+1),yPred], delimiter=',', header = 'ImageId,Label', comments = '', fmt='%d')

http://chatgpt.dhexx.cn/article/WooZgJ3l.shtml

相关文章

LeNet-5网络详解

文章目录 1 模型介绍2 模型结构3 模型特性 1 模型介绍 LeNet-5出自论文《Gradient-Based Learning Applied to Document Recognition》,是由 L e C u n LeCun LeCun 于1998年提出的一种用于识别手写数字和机器印刷字符的卷积神经网络,其命名来源于作者 …

深度学习入门(一):LeNet-5教程与详解

1.什么是LeNet LeNet5诞生于1994年,是最早的卷积神经网络之一,并且推动了深度学习领域的发展。自从1988年开始,在多年的研究和许多次成功的迭代后,这项由Yann LeCun完成的开拓性成果被命名为LeNet5。 LeNet: 主要用来…

卷积神经网络(CNN)开山之作——LeNet-5。卷积神经网络基本介绍。

目录 一、LeNet-5的背景 二、传统分类算法在图像识别上的弊端 三、卷积神经网络的3个基本特征 四、LeNet-5的网络结构 1、Input layer 2、Conv1 3、Subsampling2 4、Conv3 5、Subsampling4 6、Conv5 7、FC6 8、Output7 五、LeNet-5总结 一、LeNet-5的背景 LeNet-5…

这可能是神经网络 LeNet-5 最详细的解释了!

大家好,我是红色石头! 说起深度学习目标检测算法,就不得不提 LeNet- 5 网络。LeNet-5由LeCun等人提出于1998年提出,是一种用于手写体字符识别的非常高效的卷积神经网络。出自论文《Gradient-Based Learning Applied to Document R…

c语言--使用函数输出水仙花数

函数接口定义 1、int narcissistic( int number ); 2、void PrintN( int m, int n ); 函数 narcissistic 判断 number 是否为水仙花数,是则返回1,否则返回0。 函数 PrintN 则打印开区间 (m, n) 内所有的水仙花数,每个数字占一行。 …

【C语言程序设计】C语言水仙花数,阿姆斯特朗数!

阿姆斯特朗数也就是俗称的水仙花数,是指一个三位数,其各位数字的立方和等于该数本身。 例如:153135333,所以 153 就是一个水仙花数。 求出所有的水仙花数。 算法思想 对于阿姆斯特朗数问题,根据水仙花数的定义&#x…

C语言编程练习:水仙花数

文章目录 题目描述思路结果 题目描述 水仙花数是指一个N位正整数(N>3)&#xff0c;它的每个位上的数字的N次幂之和等于它本身。例如:153 1353 33。本题要求编写程序&#xff0c;计算所有N位水仙花数。 输入格式: 输入在一行中给出一个正整数N(3<N<7 )。 输出格式: …

C语言:水仙花数(daffodil),求出三位数中所有水仙花数

水仙花数&#xff08;C语言&#xff09; 文章目录 水仙花数&#xff08;C语言&#xff09;前言一、题目二、解题思路代码运行结果 总结***根据水仙花数满足的条件找出需要求的对象&#xff0c;这里是各位上的位数。*** 前言 刘汝佳算法书《算法竞赛入门经典》第二章上机练习第…

C语言输出三位数的水仙花数

从100-999中找出符合条件的水仙花数 文章目录 从100-999中找出符合条件的水仙花数前言一、水仙花数是什么&#xff1f;二、C语言实现输出水仙花数1.解题思路2.实现过程 总结 前言 提示&#xff1a;找出符合条件的水仙花数&#xff0c;我们需要弄明白什么叫水仙花数&#xff0c…

c语言设计程序计算水仙花数,C语言水仙花数算法

打印出所有的“水仙花数”&#xff0c; 所谓“水仙花数”是指一个三位数&#xff0c;其各位数字立方和等于该数本身。例如&#xff1a;153是一个“水仙花数”&#xff0c;因为1531的三次方5的三次方3的三次方。 1.程序分析&#xff1a;利用for循环控制100-999个数&#xff0c;每…

水仙花数的实现(C语言)

问题描述&#xff1a;一个三位数&#xff0c;百位的立方加上十位的立方加个位的立方对于这个数本身。 即&#xff1a;abc a^3b^3c^3; 例如&#xff1a;153 1^35^33^3 求出所有的水仙花数&#xff1a; 这是一个将一个三位数的百位&#xff0c;十位&#xff0c;个位提出来&…

C语言输出所有的水仙花数

输出所有的“水仙花数”。所谓“水仙花数”是指一个3位数&#xff0c;其各位数字立方之和等于该数本身。 例如&#xff0c;153是一个水仙花数&#xff0c;因为15315&#xff0b;3 解题思路&#xff1a;水仙花数的解题思路是把给出的某个三位数的个位、十位、百位分别拆分&#…

C语言实现求水仙花数

水仙花数是指一个数各位数字的立方和等于该数本身。 例如&#xff1a;153 13 53 33 求100–1000内的水仙花数。 代码如下&#xff1a; #include <stdio.h> #include <math.h>int main () {int i,j,k,n;printf("100-1000中的水仙花数字有:\n");for…

【必懂】C语言水仙花数题解

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我&#xff0c;若你是真心学习可以送你书籍&#xff0c;指导你学习&#xff0c;给予你目标方向的学习路线&#xff0c;无套路&#xff0c;博客为证。 前言 本专栏内容将会以轻松、简单的方式完成习题的解答&#xff0c;用…

C语言 水仙花数两种算法

两种方法&#xff1a;普通解法和巧妙解法 题目&#xff1a;打印出所有的“水仙花数”&#xff0c;所谓“水仙花数”是指一个三位数&#xff0c;其各位数字立方和等于该数本身。 例如&#xff1a;153是一个“水仙花数”&#xff0c;因为1531的三次方&#xff0b;5的三次方&#…

C语言编写水仙花数

C语言输出100~1000之间的水仙花数 水仙花数是什么&#xff1a; 水仙花数是指一个 3 位数&#xff0c;它的每个位上的数字的 3次幂之和等于它本身&#xff08;例如&#xff1a;1^3 5^3 3^3 153&#xff09;。 代码如下&#xff1a; #include<stdio.h> void main() { …

C语言求“水仙花”数(详细)

问题分析 “水仙花数”是指一个三位数&#xff0c;其每位数字的立方和等于该数本身。例如&#xff1a;153是一个“水仙花数”&#xff0c;因为1531的三次方&#xff0b;5的三次方&#xff0b;3的三次方。 基于此&#xff0c;利用for循环控制100-999个数&#xff0c;每个数分…

C语言之水仙花数

题目要求&#xff1a; 水仙花数是指一个N位正整数(N>3)&#xff0c;它的每一位上的数字的N次幂之和等于它本身。例如&#xff1a;153 135333。本题要求编写程序&#xff0c;计算所有N位水仙花数。 输入格式&#xff1a; 输入在一行中给出一个正整数N(3<N<7)。 输出格…

C语言计算水仙花数的两种方法

水仙花数指的是一个n位数&#xff08;n>3&#xff09;,他的每一个位上的数字的n次幂之和等于他的本身&#xff0c;求出所有的三位数的水仙花数。 方法一&#xff1a; 先遍历100~999然后拆出每一个数的个位、十位、百位&#xff0c;最后求三次幂之和是否为此数 #include<…