Не удалось распаковать набор данных MNIST с помощью python3.

Я пытаюсь преобразовать данные MNIST в формат png в соответствии с форматом данных, указанным в http://yann.lecun.com/exdb/mnist/

Ниже приведен формат ФАЙЛА ИЗОБРАЖЕНИЯ ТРЕНИРОВОЧНОГО КОМПЛЕКТА (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


person Vincent_Bryan    schedule 24.08.2017    source источник


Ответы (1)


Я понял, что забыл извлечь «train-images-idx3-ubyte.gz». После извлечения я получил файл с именем «train-images.idx3-ubyte», замененный «train-images-idx3-ubyte.gz». с этим новым именем файла, наконец, это сработало.

person Vincent_Bryan    schedule 25.08.2017