python怎么使用mnist数据集进行数字识别?

python怎么使用mnist数据集进行数字识别?,第1张

其实就是python怎么读取binnaryfile\x0d\x0amnist的结构如下,选取train-images\x0d\x0a\x0d\x0aTRAININGSETIMAGEFILE(train-images-idx3-ubyte):\x0d\x0a[offset][type][value][description]\x0d\x0a000032bitinteger0x00000803(2051)magicnumber\x0d\x0a000432bitinteger60000numberofimages\x0d\x0a000832bitinteger28numberofrows\x0d\x0a001232bitinteger28numberofcolumns\x0d\x0a0016unsignedbyte??pixel\x0d\x0a0017unsignedbyte??pixel\x0d\x0a........\x0d\x0axxxxunsignedbyte??pixel\x0d\x0a\x0d\x0a也就是之前我们要读取4个32bitinteger\x0d\x0a\x0d\x0a试过很多方法,觉得最方便的,至少对我来说还是使用\x0d\x0astruct.unpack_from()\x0d\x0a\x0d\x0afilename='train-images.idx3-ubyte'\x0d\x0abinfile=open(filename,'rb')\x0d\x0abuf=binfile.read()\x0d\x0a\x0d\x0a先使用二进制方式把文件都读进来\x0d\x0a\x0d\x0aindex=0\x0d\x0amagic,numImages,numRows,numColumns=struct.unpack_from('>IIII',buf,index)\x0d\x0aindex+=struct.calcsize('>IIII')\x0d\x0a\x0d\x0a然后使用struc.unpack_from\x0d\x0a'>IIII'是说使用大端法读取4个unsingedint32\x0d\x0a\x0d\x0a然后读取一个图片测试是否读取成功\x0d\x0a\x0d\x0aim=struct.unpack_from('>784B',buf,index)\x0d\x0aindex+=struct.calcsize('>784B')\x0d\x0a\x0d\x0aim=np.array(im)\x0d\x0aim=im.reshape(28,28)\x0d\x0a\x0d\x0afig=plt.figure()\x0d\x0aplotwindow=fig.add_subplot(111)\x0d\x0aplt.imshow(im,cmap='gray')\x0d\x0aplt.show()\x0d\x0a\x0d\x0a'>784B'的意思就是用大端法读取784个unsignedbyte\x0d\x0a\x0d\x0a完整代码如下\x0d\x0a\x0d\x0aimportnumpyasnp\x0d\x0aimportstruct\x0d\x0aimportmatplotlib.pyplotasplt\x0d\x0a\x0d\x0afilename='train-images.idx3-ubyte'\x0d\x0abinfile=open(filename,'rb')\x0d\x0abuf=binfile.read()\x0d\x0a\x0d\x0aindex=0\x0d\x0amagic,numImages,numRows,numColumns=struct.unpack_from('>IIII',buf,index)\x0d\x0aindex+=struct.calcsize('>IIII')\x0d\x0a\x0d\x0aim=struct.unpack_from('>784B',buf,index)\x0d\x0aindex+=struct.calcsize('>784B')\x0d\x0a\x0d\x0aim=np.array(im)\x0d\x0aim=im.reshape(28,28)\x0d\x0a\x0d\x0afig=plt.figure()\x0d\x0aplotwindow=fig.add_subplot(111)\x0d\x0aplt.imshow(im,cmap='gray')\x0d\x0aplt.show()\x0d\x0a\x0d\x0a只是为了测试是否成功所以只读了一张图片

studen=('xzj','jzx','zxj','jxz'),

这一句中最后的逗号去掉

不去掉的话就相当于studen=(('xzj','jzx','zxj','jxz'),)

这样studen就是含有两个元素的tuple,new_studen[0][3]相当于studen[3],所以就超出范围了


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/sjk/10650009.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-10
下一篇2023-05-10

发表评论

登录后才能评论

评论列表(0条)

    保存