1. 程式人生 > >MNIST資料視覺化

MNIST資料視覺化

  最近一直在弄如何將自己的資料做成google提供MNIST資料格式,用於test。但是一直還沒搞出結果,而本文我想介紹一下如何將google提供的MNIST資料轉化為視覺化的圖片。

google提供的MNIST資料是壓縮包,但是解壓出來發現不是想要的結果,竟然是二進位制檔案,如何將這些二進位制檔案轉換成圖片呢,本文將給出具體的程式碼。

  利用python將影像讀取出來。

#get the images and labels mnist
#-*- coding: utf-8 -*-


from PIL import Image 
import struct 
 
 
def read_image(filename,file_path):
  f = open(filename, 'rb') 
 
  index = 0 
  buf = f.read()
  print buf
 
  f.close() 

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

  for i in xrange(images):  
    image = Image.new('L', (columns, rows)) 
    for x in xrange(rows): 
      for y in xrange(columns): 
        image.putpixel((y, x), int(struct.unpack_from('>B', buf, index)[0])) 
        index += struct.calcsize('>B') 
    print 'save ' + str(i) + 'image' 
    image.save(file_path + str(i) + '.png')

def read_label(filename, saveFilename): 
  f = open(filename, 'rb') 
  index = 0 
  buf = f.read() 

  f.close() 

  magic, labels = struct.unpack_from('>II' , buf , index) 
  index += struct.calcsize('>II')    
  labelArr = [0] * labels 
  for x in xrange(labels):  
    labelArr[x] = int(struct.unpack_from('>B', buf, index)[0]) 
    index += struct.calcsize('>B') 

  save = open(saveFilename, 'w') 

  save.write(','.join(map(lambda x: str(x), labelArr))) 
  save.write('\n') 

  save.close() 
  print 'save labels success' 

if __name__ == '__main__':
  # the filepath of data
  file_path=r'/data/' 

  #get images
  read_image(file_path+'train-images-idx3-ubyte',file_path)
  #get labels
  read_label(file_path+'train-labels-idx1-ubyte', file_path+'label.txt')