2018年1月10日 星期三

Python Deep Learning 深學筆記 - MNIST 資料集

←前一篇     後一篇→

驗證佮開發仝款重要
咱學一項物件,  無論你是學趣味--ê 抑是欲賺食, 總是愛有法度驗證你學ê物件有路用--無. 若學規半晡 , 紲干焦會當家己歕雞胿講家己偌gâu, 這就毋是科學 ê 精神.

神經網路閣較是按呢生.

毋過佇咧開發階段, 欲按怎了解佇咧初步階段到一个坎站, 就先看家己開發 ê 方向有走精去--無?


另外, 若是欲教學, 予學生作實驗,  欲按怎設計咧?

咱需要一寡教具, 佇這本書: Deep Learning|用Python進行深度學習的基礎理論實作  ê 作者, 提供咱一咧真好資料庫: MNIST 資料集

MNIST 資料集

MNIST (台羅:Em-ni-sut) 資料集是佇網路公開 ê 資料集 (database). 佇機器學習領域中方, 是名聲蓋響亮. 伊是數字 0 到 9 ê 圖片組成, 有 6 萬張訓練圖片, 1 萬張測試圖片. 

訓練圖片是予你用來訓練你 ê 機器. 佇咱 ê Python Deep Learning 課程中, 機器就是咱寫个神經網路程式.

測試圖片是予你用來測你个機器 ê 程度: 予伊看圖, 伊看著 ê 數字著--無?

MNIST 佇網路 ê 地址是: http://yann.lecun.com/exdb/mnist/


欲按怎使用 MNIST 資料集

既然伊是一咧圖片 ê 資料集, 伊都是牽涉著電腦欲按怎處理影像 (image) ê 智識, 閣有欲按怎使用 Python ê 工具 (Module, function) 來處理影像 ê 智識. 這若是欲講起來就話頭長, 咱這馬先欲注心佇深學這个學問本身, 所以知影按怎使用就好. 若有需要 ê 智識, 咱拄著才閣來了解就好--阿.

MNIST 資料集, 愛去網路頂仔kā伊捎--轉來, 佇這本冊 ê 作者已經寫好一个現成 ê Python ê 式來做這項大誌, 這囥佇伊書內佮 ê github 網頁:

https://github.com/oreilly-japan/deep-learning-from-scratch

你會使用 git 命令kā伊搝--落來:(所以頭一擺運行愛 kā 你的電腦連出去網路)

git clone https://github.com/oreilly-japan/deep-learning-from-scratch

才閣去予伊 ê mnist_show.py 起行:

cd deep-learning-from-scratch/ch03
python3 mnist_show.py

你就會看著:

我佇 Ubuntu 17.10 看著 ê 這个 "5", 是足細足細, 有用貓鼠 kā 伊小可搝較大咧.
你若是去伊 ê dataset/ 目錄, 你會看著加 4 ê gz 檔:

$ ls deep-learning-from-scratch/dataset/
__init__.py    lena.png   mnist.py     t10k-images-idx3-ubyte.gz  train-images-idx3-ubyte.gz
lena_gray.png  mnist.pkl  __pycache__  t10k-labels-idx1-ubyte.gz  train-labels-idx1-ubyte.gz

彼就是去網路頂搝--落來--ê.

書頂面有解說講 mnist.py 是按怎寫--ê. 若有興趣會當去讀. 毋過, 我想重點是 欲按怎使用 load_mnist() 這个寫好 ê 函式, 咱測試會使用著, 佇 mnist_show.py 咱就有看著伊的使用是真簡單, 這是伊的原始碼:

# coding: utf-8
import sys, os
sys.path.append(os.pardir)  # 設定搜揣路草,予咱揣會著 dataset
import numpy as np
from dataset.mnist import load_mnist
from PIL import Image


def img_show(img):
    pil_img = Image.fromarray(np.uint8(img))
    pil_img.show()

(x_train, t_train), (x_test, t_test) = load_mnist(flatten=True, normalize=False)

img = x_train[0]
label = t_train[0]
print(label)  # 5

print(img.shape)  # (784,)
img = img.reshape(28, 28)  # kā img 成做 28*28 ê 陣列, 為著欲顯--出來
print(img.shape)  # (28, 28)

img_show(img)

咱小來解說這个程式个內容:

sys.path.append(os.pardir)

是共你的頂一棧目錄加入去 Module ê 搜揣路草. 咱用 cd deep-learning-from-scratch/ch03 來去予 python3 mnist_show.py 起行deep-learning-from-scratch/ch03/ 就是現此時/目前目錄(current directorypython 程式本身起行 ê 路徑os.pardir 是頂一沿(upper layer), 也就是 deep-learning-from-scratch/.
因為咱欲使用 ê load_mnist() 是囥佇  deep-learning-from/scratch/dataset/所致愛共搜揣路草設懸一棧.

dataset/ 規个子目錄, 就是定義一組 module, 伊的名是 dataset. dataset.mnist 就是去共 dataset/mnist.py 內面寫好的物件捎--入來!


load_mnist() 介紹

load_mnist() 是真重要 ê 函式, 愛共伊小了解一个:

(x_train, t_train), (x_test, t_test) = load_mnist(flatten=True, normalize=False,one_hot_label = False)

咱看伊會落尾會擲轉來 (x_train, t_train), (x_test, t_test).

神經網路有兩的崁站: 訓練 (training) 佮測驗 (test), (x_train, t_train) 是訓練用--个. (x_test, t_test) 是測驗用--个.

x_train 是規組訓練个圖, t_train 是圖 ê 內容. x_train[i] ê 圖若是 5, t_train[i] 就是數字 5. in 兩个攏是陣列 (array)

flatten 是欲共資料抹予平--無? 因為本底一張圖是 28x28 ê 二維陣列, 共伊抹予平就是仝款 ê 資料, 毋過共伊降低維度, uì兩維陣列成做相連紲 ê 28*28 = 784 ê 孤維陣列.

normalize 是欲 kā 圖內底逐个 pixel (台羅:Phí-sòo) 个數字範圍限制佇 1 來底--無?本底若是一个 Phí-sòo, 數字範圍是 0~255. normalize 了後就成做 0~1 之間.

one_hot_label=True/False 是予你指定正確答案 t 表示个形式. 若是 True, 掠準 3 是 t[123] ê 答案, t[123] = [ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]. 若是 False, t[123] 就是 3 爾爾. 這也是愛看佗一種表示較合用.

這寡選項是和圖形處理按怎做較好有關係, 咱這馬先照咧做.


我 ê mnist_show-mine.py

為著予家己較熟手一咧, 嘛閣較了解 load_mnist(), 我小可改 mnist_show(), 予伊印較濟圖出來, 程式囥佇遮: mnist_show-mine.py:

簡單是kā 28x28 ê 圖, 佇 y 方向一直疊--起哩. 這當然是愛小可了解圖佇電腦--裡, 陣列是按怎表示, 才予咱人看有?
你看, 平平是 1, 有向前小可仔斜斜(tshiâ), 嘛有向後略略仔䖙䖙, 有个一屑屑仔鬚鬚, 抑是彎彎. 這對咱人來講無問題, 攏是 1. 毋過對機器來講, 就是大問題.

2 則留言:

匿名 提到...

你好,我想知道怎麼使用mnist.py,按照您說的輸入git clone https://github.com/oreilly-japan/deep-learning-from-scratch.git,但會出現invalid syntax,在git clone的e下面會有小箭頭,目前卡在這,也就無法使用mnist_show.py了,請老師幫忙解惑,謝謝!

Black 提到...

你好:
請問: 你是
git clone https://github.com/oreilly-japan/deep-learning-from-scratch.git

有問題是無?
對我來講, 共 "git clone https://github.com/oreilly-japan/deep-learning-from-scratch.git" 規逝 copy 落來是會使用个, 凡勢是你的網路抑是 git 這個工具無安裝好?

佇 Linux 來看GPX 檔案

最近定定有戶外活動。使用𤆬路機 (GPS) 來記錄行過的路線。普通我記錄路線,攏是用手機仔抑是專門个𤆬路機,罕得用電腦來看。 毋過,"仙人拍鼓有時錯,跤步踏差啥人無"。有一擺我無細膩,袂記得共一擺活動的路線收煞起來,閣直接開始記錄下一擺的活動,按呢共幾落...