Day2

Day2

知识补充

今天学习第二个视频。传送门
这一个视频讲的是数据集,也就是MNIST的使用。up主说要认真阅读上面的信息。我英语能力有限,大部分是用机翻看的。下面贴上机翻出来的内容。
Day2
在本次视频中,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))

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

上一篇:Day2 Dos命令 学习笔记


下一篇:$NOIP\ 2018\ Day2$ 模拟考试 题解报告