无法使用python3解压缩MNIST数据集

时间:2017-08-24 04:43:36

标签: python mnist

我正在尝试根据http://yann.lecun.com/exdb/mnist/中所述的数据格式将MNIST数据转换为png格式

以下是TRAINING SET IMAGE FILE的格式(train-images-idx3-ubyte):

[offset] [type]          [value]          [description] 
0000     32 bit integer  0x00000803(2051) magic number 
0004     32 bit integer  60000            number of images 
0008     32 bit integer  28               number of rows 
0012     32 bit integer  28               number of columns

这是我的代码。我使用struct来解压缩数据集并尝试在数据集中打印前4个32位整数。

from PIL import Image
import struct

def read_image(filename):
  f = open(filename, 'rb')

  index = 0
  buf = f.read()

  magic, images, rows, columns = struct.unpack_from('>IIII' , buf , index)
  index += struct.calcsize('>IIII')

  print(magic, images, rows, columns)
  f.close()
  # for i in range(images):
  # #for i in xrange(2000):
  #   image = Image.new('L', (columns, rows))

  #   for x in range(rows):
  #     for y in range(columns):
  #       image.putpixel((y, x), int(struct.unpack_from('>B', buf, index)[0]))
  #       index += struct.calcsize('>B')

  #   print('save ' + str(i) + 'image')
  #   image.save('test/' + str(i) + '.png')
if __name__ == '__main__':
  read_image('train-images-idx3-ubyte.gz')

但输出完全错误:

  

529205256 2055376946 226418 1634299437

1 个答案:

答案 0 :(得分:0)

我意识到我忘记提取“train-images-idx3-ubyte.gz”。提取后,我得到了一个名为“train-images.idx3-ubyte”的文件,取而代之的是“train-images-idx3-ubyte” .gz“使用这个新文件名,最后它起作用了。