CNTK - 建立第一個神經網路



本章將詳細闡述在 CNTK 中建立神經網路。

構建網路結構

為了應用 CNTK 概念來構建我們的第一個 NN,我們將使用 NN 根據萼片寬度和長度以及花瓣寬度和長度的物理特性對鳶尾花種類進行分類。我們將使用的資料集是鳶尾花資料集,它描述了不同品種鳶尾花的物理特性 -

  • 萼片長度
  • 萼片寬度
  • 花瓣長度
  • 花瓣寬度
  • 類別,即山鳶尾、雜色鳶尾或弗吉尼亞鳶尾

在這裡,我們將構建一個稱為前饋 NN 的常規 NN。讓我們看看構建 NN 結構的實現步驟 -

步驟 1 - 首先,我們將從 CNTK 庫中匯入必要的元件,例如我們的層型別、啟用函式以及允許我們為 NN 定義輸入變數的函式。

from cntk import default_options, input_variable
from cntk.layers import Dense, Sequential
from cntk.ops import log_softmax, relu

步驟 2 - 之後,我們將使用 sequential 函式建立我們的模型。建立完成後,我們將向其提供我們想要的層。在這裡,我們將在我們的 NN 中建立兩個不同的層;一個有四個神經元,另一個有三個神經元。

model = Sequential([Dense(4, activation=relu), Dense(3, activation=log_sogtmax)])

步驟 3 - 最後,為了編譯 NN,我們將網路繫結到輸入變數。它具有一個具有四個神經元的輸入層和一個具有三個神經元的輸出層。

feature= input_variable(4)
z = model(feature)

應用啟用函式

有很多啟用函式可供選擇,選擇正確的啟用函式肯定會對深度學習模型的效能產生很大影響。

在輸出層

在輸出層選擇啟用函式將取決於我們將用模型解決的問題型別。

  • 對於迴歸問題,我們應該在輸出層使用線性啟用函式

  • 對於二元分類問題,我們應該在輸出層使用sigmoid 啟用函式

  • 對於多類分類問題,我們應該在輸出層使用softmax 啟用函式

  • 在這裡,我們將構建一個用於預測三個類別之一的模型。這意味著我們需要在輸出層使用softmax 啟用函式

在隱藏層

在隱藏層選擇啟用函式需要一些實驗來監控效能,以檢視哪個啟用函式效果更好。

  • 在分類問題中,我們需要預測樣本屬於特定類別的機率。這就是為什麼我們需要一個啟用函式來為我們提供機率值。為了實現這個目標,sigmoid 啟用函式可以幫助我們。

  • sigmoid 函式的一個主要問題是梯度消失問題。為了克服這個問題,我們可以使用ReLU 啟用函式,它將所有負值轉換為零,並作為正值的直透過濾器。

選擇損失函式

一旦我們有了 NN 模型的結構,就必須對其進行最佳化。為了最佳化,我們需要一個損失函式。與啟用函式不同,我們只有很少的損失函式可供選擇。但是,選擇損失函式將取決於我們將用模型解決的問題型別。

例如,在分類問題中,我們應該使用一個可以衡量預測類別和實際類別之間差異的損失函式。

損失函式

對於我們將用 NN 模型解決的分類問題,分類交叉熵損失函式是最佳選擇。在 CNTK 中,它實現為cross_entropy_with_softmax,可以從cntk.losses包中匯入,如下所示 -

label= input_variable(3)
loss = cross_entropy_with_softmax(z, label)

指標

有了 NN 模型的結構和要應用的損失函式,我們就具備了開始制定最佳化深度學習模型的方案的所有要素。但在深入研究之前,我們應該瞭解一下指標。

cntk.metrics

CNTK 有一個名為cntk.metrics的包,我們可以從中匯入我們將使用的指標。由於我們正在構建一個分類模型,因此我們將使用classification_error指標,它將生成一個介於 0 和 1 之間的數字。介於 0 和 1 之間的數字表示正確預測的樣本百分比 -

首先,我們需要從cntk.metrics包中匯入指標 -

from cntk.metrics import classification_error
error_rate = classification_error(z, label)

上述函式實際上需要 NN 的輸出和預期的標籤作為輸入。

廣告

© . All rights reserved.