0
点赞
收藏
分享

微信扫一扫

基于mnist数据集的手写数字识别

ITWYY 2022-03-12 阅读 150

文章目录

第1关:创建训练样本批量生成器

@任务描述:
补充完成函数:参考任务生成器创建代码,为分类器提供批量样本,每个样本为(图片,标签)对。
(1)输入:def dataReader(imgfile, labelfile, batch_size, drop_last)
imgfile:为IDX图片文件;labelfile:为IDX标签文件,标签顺序与图片顺序相同;batch_size:为生成器提供的批量样本数量;drop_last:是否丢弃不足批量的剩余样本。
(2)返回:batch_size长度的列表,列表中元素为图像和标签对。
形式如下:[(图像1,标签1),(图像2,标签2),(图像3,标签3)…]

#注意:训练时样本顺序必须打乱,随机选取。
列表中的图像元素为28*28的矩阵,类型为<class ‘numpy.ndarray’>
标签元素标量,类型为<class ‘numpy.uint8’>即不改变原文件中存储的数据元素类型。

##1.加载数据
import struct,random,numpy as np
code2type = {0x08: 'B', 0x09: 'b', 0x0B: 'h', 0x0c: 'i', 0x0D: 'f', 0x0E: 'd'}
def readMatrix(filename):
    with open(filename,'rb') as f:
        buff = f.read()
        offset = 0
        fmt = '>HBB'#格式定义,>表示高位在前,I表示4字节整数
        _,dcode,dimslen = struct.unpack_from(fmt,buff,offset)
        offset += struct.calcsize(fmt)

        fmt = '>{}I'.format(dimslen)
        shapes = struct.unpack_from(fmt,buff,offset)
        offset += struct.calcsize(fmt)

        fmt = '>'+ str(np.prod(shapes)) + code2type[dcode]
        matrix = struct.unpack_from(fmt,buff,offset)
        matrix = np.reshape(matrix,shapes).astype(code2type[dcode])
    return matrix

def dataReader(imgfile, labelfile, batch_size, drop_last):
	with open(imgfile,'rt') as f: # 引入with可以自动调用close()方法
    readers = reader(f)
    imgdatas = list(readers)
    #print(labeldatas)
    img_datas = np.array(imgdatas).astype("float32") # 因为模型需要float32格式的数据,所以在这里做下类型转换
    
	with open(labelfile,'rt') as f: #引入with可以自动调用close()方法
    readers = reader(f)
    labeldatas = list(readers)
    #print(labeldatas)
    label_datas = np.array(labeldatas).astype("float32")
    

第2关:创建卷积神经网络

举报

相关推荐

0 条评论