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])


效果

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
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神经网络的核心

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱笑的男孩。

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

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

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

打赏作者

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

抵扣说明:

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

余额充值