LeNet-5进行MNIST数据识别

        近来翻看经典网络补基础知识,写下这篇博客,本实验的源码是基于Tensorflow框架来写的,采用GPU完成训练,找本实验代码的小伙伴可以去这里下载,实验的数据是转化为png格式的MNIST数据集,小伙伴们可以从这里下载到。笔者不才,不正之处,欢迎斧正。^o^

        基于梯度的学习算法可用于合成复杂的决策表面,该表面可以对诸如手写字符之类的高维模式进行分类,并且具有最少的预处理。相较于很多传统的用于进行MNIST数据识别的算法,卷积神经网络在处理多变的2D形状上呈现出了较好的效果。

       虽然LeNet是一个小的网络,但却包含了卷积神经网络的基本模块:卷积层、池化层、全连接层。LeNet-5共有7层 ,每层都包含着可训练的参数,每层都有着如图片标注数目的feature map,其中,每个feature map通过一种卷积滤波器提取对应的一种特征。

一、输入层的数据处理

       输入图像的尺寸统一归一化为32×32(原始的MNIST中图像的大小是28×28的)。这里的实验数据是.png形式的图片,可以从这里下载。首先加载训练样本和测试样本,在这里还进行了打乱数据的预处理操作。

# 加载数据
train_path = "./mnist/train/"
test_path = "./mnist/test/"
# 读取图片及其标签
def read_image(path):
    label_dir = [path+x for x in os.listdir(path) if os.path.isdir(path+x)]
    images = []
    labels = []
    for index,folder in enumerate(label_dir):
        for img in glob.glob(folder+'/*.png'):
            print("reading the image:%s"%img)
            image = io.imread(img)
            image = transform.resize(image,(w,h,c))
            images.append(image)
            labels.append(index)
    return np.asarray(images,dtype=np.float32),np.asarray(labels,dtype=np.int32)
train_data,train_label = read_image(train_path)      # 训练样本
test_data,test_label = read_image(test_path)         # 测试样本

# 打乱训练数据及测试数据
train_image_num = len(train_data)
train_image_index = np.arange(train_image_num)
np.random.shuffle(train_image_index)            # 乱序排序
train_data = train_data[train_image_index]
train_label = train_label[train_image_index]

test_image_num = len(t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值