2、数据集

本文介绍了数据集的三种类型——训练集、验证集和测试集,通过MNIST数据集的实例展示了如何加载和处理这些数据。训练集用于训练模型,测试集用于评估模型性能,而验证集则用于调整模型参数。代码示例详细解释了如何使用Python读取MNIST数据集的图片和标签文件,并展示了随机选取样本的可视化方法。
部署运行你感兴趣的模型镜像

知识补充

今天学习第二个视频。传送门
这一个视频讲的是数据集,也就是MNIST的使用。up主说要认真阅读上面的信息。我英语能力有限,大部分是用机翻看的。下面贴上机翻出来的内容。
在这里插入图片描述
在本次视频中,up主提起来三种数据集:训练集,测试集,验证集。关于这个三种数据集可以看一下这个文章传送门,里面讲解的十分形象,容易理解。
在这里我就简单解释一下这三者之间的关系。

  • 训练集(Training Dataset):顾名思义,这个里面的数据就是用来训练模型的,形象一点说就是学生在课上学习到知识。让这个学生可以把所学的知识可以输出。
  • 测试集(Test set):对输出结果进行测试,来判断模型参数的正确性。当然用来测试的数据可以是训练集里的数据,也可以是训练集之外的数据。就像是学生考试一样,试卷上题目题型是一样,但是我换了一个数字,会不会做这道题目,就要看学生是否真正掌握了这个知识点。但是如果恰好,我的测试数据都是训练集里的数据,题目都是学生之前学过的,直接写答案就是。这样就会产生过拟合现象。过拟合是指训练误差和测试误差之间的差距太大。遇到一样的题目才会写,换了个数字就不会了。这个误差就很大了。这个时候我们就要引入另外一个数据集了—测试集。
  • 验证集(Validation Dataset):对训练集的输出结果进行一个初步验证,根据验证结果来调整参数,同时通过调整超参数,让模型处于最好的状态。就是学生课后写的练习题,对所学知识进行巩固和强化。

代码解释

接下来的内容在代码中注释出来:

#pathlib 路径操作函数库
from pathlib import Path #从pathlib函数库中,调用Path对象
dataset_path=Path('../MNIST') #在单引号里面填入MNIST所在的路径。 './'表示当前目录,'../'表示上一级目录,'/'表示根目录

#对四个目标文件的路径直接进行拼接
train_img_path=dataset_path/'train-images.idx3-ubyte'
train_lab_path=dataset_path/'train-labels.idx1-ubyte'
test_img_path=dataset_path/'t10k-images.idx3-ubyte'
test_lab_path=dataset_path/'t10k-labels.idx1-ubyte'

train_num=50000 #训练集的数量
valid_num=10000 #验证集的数量
test_num=10000 #测试集的数量

#strtuct模块主要在Python中的值与C语言结构之间的转换。可用于处理存储在文件或网络连接(或其它来源)中的二进制数据。
import struct
#with as 是python中的特殊语句。在java中打开一个文件要进行try catch并抛出异常代码写起来冗余,在python中使用 with as 语句操作上下文管理器,
#它能够帮助我们自动分配并且释放资源。
with open(train_img_path,'rb') as f:#以bite的方式read出文件  训练图
    #unpack(fmt,string) fmt:format 格式 string 字节
    struct.unpack('>4i',f.read(16))# >:大端法存放字节 4:4个一组 i:int类型,
    #把读出的数据用np中的数组表示。uint8:无符号整型,大小是一个字节。reshape是讲数组二维化,第一个参数是行数,第二个参数是列数。-1:自动确定行数
    tmp_img=np.fromfile(f,dtype=np.uint8).reshape(-1,28*28)
    train_img=tmp_img[:train_num] #冒号表示的是范围的意思,:在前表示train_num之前的数据
    valid_img=tmp_img[train_num:]#:在后表示train_num之后的数据

with open(test_img_path,'rb') as f: #测试图
    struct.unpack('>4i',f.read(16))
    test_img=np.fromfile(f,dtype=np.uint8).reshape(-1,28*28)

with open(train_lab_path,'rb') as f: #训练标签
    struct.unpack('>2i',f.read(8))
    tmp_lab=np.fromfile(f,dtype=np.uint8)
    train_lab=tmp_lab[:train_num]
    valid_lab=tmp_lab[train_num:]

with open(test_lab_path,'rb') as f: #测试标签
    struct.unpack('>2i',f.read(8))
    test_lab=np.fromfile(f,dtype=np.uint8)

import matplotlib.pyplot as plt  #将数据图形化
def show_train(index):
    plt.imshow(train_img[index].reshape(28,28),cmap='gray')#camp:颜色图谱(colormap),gray:显示黑白
    print('label : {}'.format(train_lab[index]))#将得出的lable放入lable字典中,并输出

def show_vaild(index):
    plt.imshow(valid_img[index].reshape(28,28),cmap='gray')
    print('label : {}'.format(valid_lab[index]))

def show_test(index):
    plt.imshow(test_img[index].reshape(28,28),cmap='gray')
    print('label : {}'.format(test_lab[index]))
    
#调用三个函数
show_train(np.random.randint(train_num))#randint(x)生成(0,x]的随机整数
show_vaild(np.random.randint(valid_num))
show_test(np.random.randint(test_num))

每日一句:我们的征途是星辰大海。

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

贰拾肆画生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值