Day2
知识补充
今天学习第二个视频。传送门
这一个视频讲的是数据集,也就是MNIST的使用。up主说要认真阅读上面的信息。我英语能力有限,大部分是用机翻看的。下面贴上机翻出来的内容。
在本次视频中,up主提起来三种数据集:训练集,测试集,验证集。关于这个三种数据集可以看一下这个文章传送门,里面讲解的十分形象,容易理解。
代码解释
接下来的内容在代码中注释出来:
#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))