紙上得來終覺淺,絕知此事要躬行。
“神經網絡”是“機器學習”的利器之一,常用算法在TensorFlow、MXNet計算架構上,有很好的支援。
為了更好的了解與使用這件利器,我們可以不借助計算架構,從零開始,一步步構模組化型,實作學習算法,并在一個圖像識别資料集上,訓練這個模型,再驗證模型預測的準确率。
MNIST資料集
能正确的提出問題,你已經解決了問題的一半。
這裡“正确的問題”是MNIST,一個手寫數字圖檔集資料的識别問題。
你可以在 Yann LeCun的官網下載下傳這套資料集,共四個檔案包:
train-images-idx3-ubyte.gz: 訓練圖檔集 (9912422 bytes)
train-labels-idx1-ubyte.gz: 訓練圖檔集的正确标簽 (28881 bytes)
t10k-images-idx3-ubyte.gz: 測試圖檔 (1648877 bytes)
t10k-labels-idx1-ubyte.gz: 測試圖檔的正确标簽 (4542 bytes)
每張圖檔包含一個手寫數字。
資料集包含6萬張圖檔用于訓練,1萬張用于測試驗證。
圖像資料格式和圖向量
每張圖檔表達了[0,9]這是10個數字中的一個,有28X28=784個像素,每個像素根據灰階取整數值[0,255];把每張圖檔看作具有784個特征的圖向量,問題就變成:根據D個特征次元,對圖像做K分類的問題,這裡D=784,K=10。
MNIST檔案格式
圖檔images檔案,前16個位元組,是檔案格式和圖檔數量、規格的描述;圖檔的像素資訊從第17個位元組開始。
[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 0016 unsigned byte 0 pixel 0017 unsigned byte 0 pixel ........ xxxx unsigned byte ?? pixel
同樣,标簽labels檔案裡,前8個位元組,是檔案格式和标簽數量的描述;而表述正确分類的标簽資訊,從第9個位元組開始。
[offset] [type] [value] [description]
0000 32 bit integer 0x00000801(2049) magic number 0004 32 bit integer 60000 number of items 0008 unsigned byte 7 label 0009 unsigned byte 2 label ........ xxxx unsigned byte ?? label
了解了檔案格式,就可以很容易地讀取MNIST資料。
讀取MNIST資料
用到struct、os和numpy三個庫。
import struct
import os
import numpy as np
定義你下載下傳和解壓縮MNIST資料的目錄your_download_unpack_MNIST_DATA_path。
path=your_download_unpack_MNIST_DATA_path
kind=train
images_path = os.path.join(path,'%s-images.idx3-ubyte' % kind)
labels_path = os.path.join(path,'%s-labels.idx1-ubyte' % kind)
加載從第17個位元組開始的圖檔像素資料到images,再把每張28*28像素的圖檔都拉直(reshape)為784*1的圖向量。
with open(images_path,'rb') as imagefile:
magic, num, rows, cols = struct.unpack('>IIII',imagefile.read(16))
images = np.fromfile(imagefile,dtype=np.uint8).reshape(len(labels),784)
從第9個位元組開始,加載正确标簽資訊到labels。
with open(labels_path,'rb') as labelfile:
magic, n = struct.unpack('>II',labelfile.read(8))
labels = np.fromfile(labelfile,dtype=np.uint8)
我們就得到了訓練資料集的圖向量矩陣images和正确答案數組labels,可以用同樣的方法加載驗證用圖檔images_v和正确答案labels_v。
下一次,從0開始,建立一個神經網絡的原型-感覺機模型,來對準備好的MNIST資料做訓練和分類預測。
(完)
索引
從0到1:神經網絡實作圖像識别
1.目标問題:MNIST手寫數字識别資料集
無雙譜:從0到1:神經網絡實作圖像識别45 贊同 · 0 評論文章
2.緣起:感覺機模型
無雙譜:從0到1:神經網絡實作圖像識别(二)21 贊同 · 1 評論文章
3.第一個神經網絡:從二分類到多分類
無雙譜:從0到1:神經網絡實作圖像識别(三)22 贊同 · 0 評論文章
4.更好的神經網絡-加入隐藏層
無雙譜:從0到1:神經網絡實作圖像識别(四)53 贊同 · 2 評論文章
5.卷積神經網絡:卷積與池化
無雙譜:從0到1:神經網絡實作圖像識别(五)39 贊同 · 8 評論文章
6.知行合一:優化提速實作
無雙譜:從0到1:神經網絡實作圖像識别(實作篇)79 贊同 · 9 評論文章
#神經網絡##今日頭條小助手##人工智能#