LeNet5详细原理(含tensorflow版源码)

#勤写标兵挑战赛#

LeNet5原理

        Lenet5是一种深度学习模型,也是卷积神经网络(CNN)的一种。它是由Yann LeCun等人在1998年提出的,主要用于手写数字识别任务。

        Lenet5的网络结构由七个层组成,包括两个卷积层、两个池化层和三个全连接层。其中,卷积层用于提取特征,池化层用于降低特征维度,全连接层用于进行分类。

具体来说,Lenet5的网络结构如下:

  1. 输入层:28*28的灰度图像(黑白图像)。

  2. 第一层卷积层:6个卷积核,每个卷积核的大小为5*5。采用sigmoid函数作为激活函数。

  3. 第一层池化层:2*2的最大池化,步长为2。

  4. 第二层卷积层:16个卷积核,每个卷积核的大小为5*5。采用sigmoid函数作为激活函数。

  5. 第二层池化层:2*2的最大池化,步长为2。

  6. 全连接层1:120个神经元,采用sigmoid函数作为激活函数。

  7. 全连接层2:84个神经元,采用sigmoid函数作为激活函数。

  8. 输出层:10个神经元,采用softmax函数作为激活函数,用于分类。

        在训练过程中,Lenet5采用反向传播算法对网络中的权重进行更新,以提高模型的准确率。在手写数字识别任务中,Lenet5可以达到接近99%!的(MISSING)准确率。

        总之,Lenet5是一种经典的卷积神经网络,它在深度学习领域有着广泛的应用。它的成功启示了后来更加深入的卷积神经网络的发展。

LeNet5源码(tensorflow版)

import tensorflow as tf
from tensorflow.keras.layers import Dense,Conv2D,MaxPooling2D,Flatten
from tensorflow.keras import utils,optimizers,losses,datasets,models,metrics
nb_output = 10
""""""
# 数据集
(train_x,train_y),(test_x,test_y) = datasets.mnist.load_data()
# 转换类型并归一化
train_x = train_x.reshape(-1,28,28,1).astype("float") / 255
test_x = test_x.reshape(-1,28,28,1).astype("float") / 255
#独热并分类
train_y = utils.to_categorical(train_y,nb_output)
test_y = utils.to_categorical(test_y,nb_output)
#创建类
class lenet5(models.Model):
 def __init__(self,nb_output):
 super(lenet5, self).__init__()
 self.nb_output = nb_output
 self.conv1 = Conv2D(6,(5,5),padding='same',activation='relu')
 self.maxpool = MaxPooling2D()
 self.conv2 = Conv2D(16,(5,5),activation='relu')
 self.flatten = Flatten()
 self.fc3 = Dense(120,activation='relu')
 self.fc4 = Dense(84,activation='relu')
 self.fc5 = Dense(self.nb_output,activation='softmax')
 def call(self, x, training=None, mask=None):
 x = self.conv1(x)#28-5+1 = 24
 x = self.maxpool(x)#6*12*12
 x = self.conv2(x)#12-5+1 = 8
 x = self.maxpool(x)#16*4*4
 x = self.flatten(x)
 x = self.fc3(x)
 x = self.fc4(x)
 x = self.fc5(x)
 return x
if __name__ == '__main__':
 model = lenet5(nb_output)
 model.build(input_shape=(None,28,28,1))
 model.summary()
 #模型编译
 model.compile(optimizer=optimizers.Adam(0.001),
 loss=losses.CategoricalCrossentropy(),
 metrics=['accuracy'])
 #模型训练
 model.fit(train_x,train_y,batch_size=128,epochs=3)
 #模型评估
 score = model.evaluate(test_x,test_y)
 print("loss:",score[0])
 print("acc:",score[1])

效果

作者:爱笑的男孩。原文地址:https://blog.csdn.net/Code_and516/article/details/129812246

%s 个评论

要回复文章请先登录注册