LeNet-5源代码(详注)、mnist_data及论文

本文介绍了LeNet-5模型,该模型是1998年提出的用于手写字符识别的卷积神经网络。提供了详细的源代码,并展示了执行效果。同时,给出了论文《Gradient-Based Learning Applied to Document Recognition》的链接以及MNIST数据集的下载地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LeNet-5是论文Gradient-Based Learning Applied to Document Recognition(IEEE-1998)提出的一种用于手写体字符识别的卷积神经网络模型。

  1. 源代码
'''利用tensorflow实现的卷积神经网络来进行MNIST手写数字图像的分类。'''
 
import numpy as np
import tensorflow as tf
 
#下载mnist数据集,并从mnist_data目录中读取数据
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('mnist_data',one_hot=True)
#(1)“mnist_data” 是和当前文件相同目录下的一个文件夹。从https://yann.lecun.com/exdb/mnist/ 下载4个文件,放到目录MNIST_data下。 
#(2)MNIST数据集每个样本都是一张28*28像素的灰度手写数字图片。
#(3)one_hot值被设为true。在分类问题的数据集标注时,如何不采用独热编码的方式, 类别通常就是一个符号,比如9。
#但如果采用独热编码的方式,则每类表示为一个列表list,共计有10个数值,但只有一个为1,其余均为0。如,“9”的独热编码可为[00000 00001]. 
 
#定义输入数据x和输出y的形状。函数tf.placeholder的目的是定义输入,可以理解为采用占位符进行占位。
#None位置的参数被用于表示样本的个数,因为样本数此时无法确定,故设为None。每个输入样本的特征数目为28*28。
input_x = tf.placeholder(tf.float32,[None,28*28])/255 #因为每个像素的取值范围是 0~255
output_y = tf.placeholder(tf.int32,[None,10])  #10表示10个类别
 
 
#输入层的输入数据input_x被reshape成四维数据,其中第一维的数据代表了图片数量
input_x_images = tf.reshape(input_x,[-1,28,28,1])
test_x = mnist.test.images[:3000] #读取测试集图片的特征,读取3000个图片
test_y = mnist.test.labels[: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神经网络的核心
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值