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详细原理(含tensorflow版源码)_第1张图片

        在训练过程中,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])


效果

LeNet5详细原理(含tensorflow版源码)_第2张图片

你可能感兴趣的:(tensorflow,深度学习,计算机视觉,python)