Introduction
我們使用 MNIST 資料集訓練一個多層感知器。
我們的多層感知器(Multilayer Perceptron, MLP)只有兩層隱藏(hidden layers)。
Tasks
學習資源:cntk\Tutorials\CNTK_103C_MNIST_MultiLayerPerceptron.ipynb
使用 MNIST 資料集訓練多層感知器,將圖像分成 10 個分類,即 0 ~ 9。
1.資料讀取(Data reading):
2.資料處理(Data preprocessing):
MNIST 手寫數字資料集:邏輯迴歸模型
3.建立模型(Model creation):
每個全連接層(Fully connected layer),包含了輸入維度,輸出維度和激活函數。
有 2 個全連接層,每層都使用 ReLU 作為激活函數。
最後的輸出層輸出一個具有 10 個值的向量,然後使用 Softmax 函數歸一化模型的輸出值。
i:輸入維度 = 784 ,每個像素一個維度。
o:輸出維度 = 400 ,隱藏層的節點數量。
a:激活函式 = ReLU,線性整流函數(Rectified Linear Unit, ReLU)。
2 個隱藏層的維度都設置為 400。
# 隱藏層
num_hidden_layers = 2
# 隱藏層維度
hidden_layers_dim = 400
宣告函式:create_model,CNTK layers 模組提供 Dense 函數,使用 ReLU 作為激活函式。
def create_model(features):
with C.layers.default_options(init = C.layers.glorot_uniform(), activation = C.ops.relu):
h = features
for _ in range(num_hidden_layers):
h = C.layers.Dense(hidden_layers_dim)(h)
r = C.layers.Dense(num_output_classes, activation = None)(h)
return r
z:評估值
# 將每個像素除以 255 ,將輸入轉換成 0 ~ 1 之間的機率值。
z = create_model(input/255.0)
4.訓練模型(Learning the model):
使用 softmax 函式歸一化。
loss = C.cross_entropy_with_softmax(z, label)
5.評估模型(Evaluation):
評估模型,比較輸出值和標籤值。
label_error = C.classification_error(z, label)