Minst 手寫訓練集 python
以往我們有一個新的類神經訓練模型,我們都會用single pole或是double pole來測試模型的訓練結果。以目前類神經網路發展的狀況,single pole 與double pole已不能滿足需求。進一步,我們會使用MNIST訓練集來訓練。網址在此
http://yann.lecun.com/exdb/mnist/
一進去我們就看到三個作者 Yann LeCun, Corinna Cortes, Christopher J.C. Burges,我們向他們致敬。
然後就是四個重要的檔案。
train-images-idx3-ubyte.gz: training set images (9912422 bytes)
train-labels-idx1-ubyte.gz: training set labels (28881 bytes)
t10k-images-idx3-ubyte.gz: test set images (1648877 bytes)
t10k-labels-idx1-ubyte.gz: test set labels (4542 bytes)
第一跟第二個是拿來訓練用的,第三跟第四個是拿來測試的。我們可以注意到有image跟labels兩種檔。image是圖檔,labels是對應圖檔的答案。
雖然TensorFlow有方便的讀取方法。但如果我們想要自己用python讀來用。要如何做呢?
我們要先看一下網頁中的這部份
我們可以看到offset,代表讀的byte數。就是說我們開了檔之後。read進來,以label檔來說,data[0:4]會等於2049。data[4:8]等於60000。
了解檔案的格式,我們就可以寫一個小程式來讀讀看。
因為offset是4個為一個單位,所以我們先寫一下轉byte為數字的程式
def b2i(b):
return int(codecs.encode(b, 'hex'), 16)
with open("."+os.sep+"train-images.idx3-ubyte", 'rb') as f:
data = f.read()
type = b2i(data[0:4]) # image file 為 2051
dataLen = b2i(data[4:8]) # 訓練集為 60000
rows = b2i(data[8:12])
cols = b2i(data[12:16])
getImage = np.frombuffer(data, dtype=np.uint8, offset=16)#從offset 16 開始為圖資
getImage = getImage.reshape(dataLen, rows, cols)
到這裡,圖資讀完,如果要把圖一張張存下來
for i in range(0, len(getImage)):#小心,共有60000張圖!!
scipy.misc.imsave(str(i) + ".jpg", getImage[i])
讀label檔
with open("."+os.sep+"train-labels.idx1-ubyte", 'rb') as f:
data = f.read()
type = b2i(data[0:4]) # label file 為 2049
dataLen = b2i(data[4:8]) # 訓練集為 60000
getLabel = np.frombuffer(data, dtype=np.uint8, offset=16)#從offset 16 開始為label
getLabel = getLabel.reshape(dataLen)
到這裡,圖資讀完,如果要把圖一張張存下來,加上答案為檔名
for i in range(0, len(getImage)):#小心,共有60000張圖!!
scipy.misc.imsave(str(i) + "_" + str(getLabel[i]) + ".jpg", getImage[i])
對!import 有
import os, codecs
import numpy as np
import scipy.misc
http://yann.lecun.com/exdb/mnist/
一進去我們就看到三個作者 Yann LeCun, Corinna Cortes, Christopher J.C. Burges,我們向他們致敬。
然後就是四個重要的檔案。
train-images-idx3-ubyte.gz: training set images (9912422 bytes)
train-labels-idx1-ubyte.gz: training set labels (28881 bytes)
t10k-images-idx3-ubyte.gz: test set images (1648877 bytes)
t10k-labels-idx1-ubyte.gz: test set labels (4542 bytes)
第一跟第二個是拿來訓練用的,第三跟第四個是拿來測試的。我們可以注意到有image跟labels兩種檔。image是圖檔,labels是對應圖檔的答案。
雖然TensorFlow有方便的讀取方法。但如果我們想要自己用python讀來用。要如何做呢?
我們要先看一下網頁中的這部份
我們可以看到offset,代表讀的byte數。就是說我們開了檔之後。read進來,以label檔來說,data[0:4]會等於2049。data[4:8]等於60000。
了解檔案的格式,我們就可以寫一個小程式來讀讀看。
因為offset是4個為一個單位,所以我們先寫一下轉byte為數字的程式
def b2i(b):
return int(codecs.encode(b, 'hex'), 16)
with open("."+os.sep+"train-images.idx3-ubyte", 'rb') as f:
data = f.read()
type = b2i(data[0:4]) # image file 為 2051
dataLen = b2i(data[4:8]) # 訓練集為 60000
rows = b2i(data[8:12])
cols = b2i(data[12:16])
getImage = np.frombuffer(data, dtype=np.uint8, offset=16)#從offset 16 開始為圖資
getImage = getImage.reshape(dataLen, rows, cols)
到這裡,圖資讀完,如果要把圖一張張存下來
for i in range(0, len(getImage)):#小心,共有60000張圖!!
scipy.misc.imsave(str(i) + ".jpg", getImage[i])
讀label檔
with open("."+os.sep+"train-labels.idx1-ubyte", 'rb') as f:
data = f.read()
type = b2i(data[0:4]) # label file 為 2049
dataLen = b2i(data[4:8]) # 訓練集為 60000
getLabel = np.frombuffer(data, dtype=np.uint8, offset=16)#從offset 16 開始為label
getLabel = getLabel.reshape(dataLen)
到這裡,圖資讀完,如果要把圖一張張存下來,加上答案為檔名
for i in range(0, len(getImage)):#小心,共有60000張圖!!
scipy.misc.imsave(str(i) + "_" + str(getLabel[i]) + ".jpg", getImage[i])
對!import 有
import os, codecs
import numpy as np
import scipy.misc
留言
張貼留言