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

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

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

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

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

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

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

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

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

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

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

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

输出层:10个神经元,采用softmax函数作为激活函数,用于分类。
image.png
在训练过程中,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])

效果
image.png

目录
相关文章
|
机器学习/深度学习 算法 TensorFlow
【Python深度学习】Tensorflow对半环形数据分类、手写数字识别、猫狗识别实战(附源码)
【Python深度学习】Tensorflow对半环形数据分类、手写数字识别、猫狗识别实战(附源码)
527 0
|
机器学习/深度学习 PyTorch TensorFlow
TensorFlow与PyTorch深度对比分析:从基础原理到实战选择的完整指南
蒋星熠Jaxonic,深度学习探索者。本文深度对比TensorFlow与PyTorch架构、性能、生态及应用场景,剖析技术选型关键,助力开发者在二进制星河中驾驭AI未来。
1110 13
|
机器学习/深度学习 算法 TensorFlow
【Python机器学习】梯度下降法的讲解和求解方程、线性回归实战(Tensorflow、MindSpore平台 附源码)
【Python机器学习】梯度下降法的讲解和求解方程、线性回归实战(Tensorflow、MindSpore平台 附源码)
827 0
|
Ubuntu 定位技术 TensorFlow
源码编译安装ROCm以运行tensorflow-rocm(适用于Ubuntu 23.04)
总结一番,完成这趟奇妙的技术之旅后,乐趣多多,还能享受 tensorflow-rocm 带来的便利和速度。这趟旅程需要耐心,勇气,以及对技术的热爱。朋友,做好准备,让你的Ubuntu系统展翅高飞吧!
791 9
|
机器学习/深度学习 人工智能 算法
TensorFlow 的基本原理和使用方法
TensorFlow 的基本原理和使用方法
|
文字识别 算法 TensorFlow
【Keras+计算机视觉+Tensorflow】OCR文字识别实战(附源码和数据集 超详细必看)
【Keras+计算机视觉+Tensorflow】OCR文字识别实战(附源码和数据集 超详细必看)
675 4
|
机器学习/深度学习 TensorFlow 算法框架/工具
【Python深度学习】Tensorflow+CNN进行人脸识别实战(附源码和数据集)
【Python深度学习】Tensorflow+CNN进行人脸识别实战(附源码和数据集)
1335 4
|
机器学习/深度学习 算法 TensorFlow
【Keras+计算机视觉+Tensorflow】实现基于YOLO和Deep Sort的目标检测与跟踪实战(附源码和数据集)
【Keras+计算机视觉+Tensorflow】实现基于YOLO和Deep Sort的目标检测与跟踪实战(附源码和数据集)
726 2
|
机器学习/深度学习 TensorFlow 算法框架/工具
【Python机器学习】神经网络中全连接层与线性回归的讲解及实战(Tensorflow、MindSpore平台 附源码)
【Python机器学习】神经网络中全连接层与线性回归的讲解及实战(Tensorflow、MindSpore平台 附源码)
681 0
|
机器学习/深度学习 TensorFlow 算法框架/工具
【深度学习】Tensorflow、MindSpore框架介绍及张量算子操作实战(超详细 附源码)
【深度学习】Tensorflow、MindSpore框架介绍及张量算子操作实战(超详细 附源码)
846 0

热门文章

最新文章