MNISTデータセット解析
5668 ワード
公式サイト
0000 0801
が魔数を表しているのを見てみましょう.その値は0000 0801
です.ここでは魔数とは何かを補足します.実は、このファイルがMNISTのtrain-labelsであるかどうかを判断するための検査数です.idx 1-ubyteファイル;次にオフセット量が4バイトの0000 ea60
を見下ろすと、上記のように容量数、すなわち60000を表すべきであり、60000の16進数はea 60であり、満足していることがわかります.オフセット量が8バイトの05
を見ると、私たちのラベル値を表しています.つまり、最初の画像のラベル値は5で、後ろもこのように推定されています.0000 0803
で魔数を表しています.次に0000 ea60
の値が60000で容量を表し、次に8バイト目から4バイト数があり、値は28、つまり0000 001c
で、各ピクチャの行数を表す.12バイト目から4バイト数があり、値も28、つまり0000 001c
は各ピクチャの列数を表す.16バイト目から私たちの画素値で、画像で話します.さらに、784バイトごとに1枚の画像を表し、ファイルのバイナリコンテンツが私たちが分析したのと同じであることがわかります.コードが来ても
_tag = '>' #
_twoBytes = 'II' #
_fourBytes = 'IIII' #
_pictureBytes = '784B' # 784 ,28*28
_lableByte = '1B' # 1
_msb_twoBytes = _tag + _twoBytes
_msb_fourBytes = _tag + _fourBytes
_msb_pictureBytes = _tag + _pictureBytes
_msb_lableByte = _tag + _lableByte
def getImage(filename = None):
binfile = open(filename, 'rb') #
buf = binfile.read() #
binfile.close()
index = 0 #
numMagic, numImgs, numRows, numCols = struct.unpack_from(_msb_fourBytes, buf, index)
index += struct.calcsize(_fourBytes)
images = []
for i in xrange(numImgs):
imgVal = struct.unpack_from(_msb_pictureBytes, buf, index)
index += struct.calcsize(_pictureBytes)
imgVal = list(imgVal)
#for j in range(len(imgVal)):
# if imgVal[j] > 1:
# imgVal[j] = 1
images.append(imgVal)
return np.array(images)
def getlable(filename=None) :
binfile = open(filename, 'rb')
buf = binfile.read() #
binfile.close()
index = 0 #
numMagic, numItems = struct.unpack_from(_msb_twoBytes,buf, index)
index += struct.calcsize(_twoBytes)
labels = []
for i in range(numItems):
value = struct.unpack_from(_msb_lableByte, buf, index)
index += struct.calcsize(_lableByte)
labels.append(value[0]) #
return np.array(labels)
def load_data(filename = None):
f = gzip.open(filename, 'rb')
training_data, validation_data, test_data = cPickle.load(f)
return (training_data, validation_data, test_data)