手工计算神经网络第三期:数据读取与完成训练

本文介绍了如何使用Numpy读取和处理MNIST手写数据集,将其应用于神经网络训练。讲解了数据的二进制格式、数据预处理、模型训练、梯度计算和验证集的使用,最终达到了约90%的验证准确率。
摘要由CSDN通过智能技术生成

大数据文摘出品

作者:蒋宝尚


小伙伴们大家好呀~~用Numpy搭建神经网络,我们已经来到第三期了。第一期文摘菌教大家如何用Numpy搭建一个简单的神经网络,完成了前馈部分。第二期为大家带来了梯度下降相关的知识点。


这一期,教大家如何读取数据集,以及将数据集用于神经网络的训练,和上两期一样,这次依然用Numpy实现。在开始代码之前,文摘菌先带大家看看今天我们使用的数据集。


数据集介绍


数据集采用著名的MNIST的手写数据集。根据官网介绍,这个数据集有70000个样本,包括60000个训练样本,10000个测试样本。


数据集下载下来之后,文件分为4个部分,分别是:训练集图片、训练集标签、测试集图片、测试集标签。这些数据以二进制的格式储存。


     


其中,训练集图片文件的前16个字节是储存了图片的个数,行数以及列数等。训练集标签文件前8个字节储存了图片标签的个数等。测试集的两个文件同理。


文摘菌下载好的文件存储地址


读取数据

train_img_path=r'C:\Users\Dell\MNIST\train-images.idx3-ubyte'train_lab_path=r'C:\Users\Dell\MNIST\train-labels.idx1-ubyte'test_img_path=r'C:\Users\Dell\MNIST\t10k-images.idx3-ubyte'test_lab_path=r'C:\Users\Dell\MNIST\t10k-labels.idx1-ubyte'


根据文件在本地解压后的储存地址,生成四个地址,上面代码中‘r’是转义字符,因为\在Python中有特殊的用法,所以需用转义字符明确文件地址。


为了让后面的模型表现更好,我们将训练集拆分,拆成50000个训练集和10000个验证集。


注:验证集是模型训练过程中单独留出的样本集,它可以用于调整模型的超参数和用于对模型的能力进行初步评估。


import struct
train_num=50000valid_num=10000test_num=10000
with open(train_img_path,'rb') as f:    struct.unpack('>4i',f.read(16))    tmp_img=np.fromfile(f,dtype=np.
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值