- Microsoft Cognitive Toolkit (CNTK) 教程
- 首頁
- 介紹
- 入門
- CPU 和 GPU
- CNTK - 序列分類
- CNTK - 邏輯迴歸模型
- CNTK - 神經網路 (NN) 概念
- CNTK - 建立第一個神經網路
- CNTK - 訓練神經網路
- CNTK - 記憶體資料集和大型資料集
- CNTK - 效能測量
- 神經網路分類
- 神經網路二元分類
- CNTK - 神經網路迴歸
- CNTK - 分類模型
- CNTK - 迴歸模型
- CNTK - 記憶體不足的資料集
- CNTK - 監控模型
- CNTK - 卷積神經網路
- CNTK - 迴圈神經網路
- Microsoft Cognitive Toolkit 資源
- Microsoft Cognitive Toolkit - 快速指南
- Microsoft Cognitive Toolkit - 資源
- Microsoft Cognitive Toolkit - 討論
CNTK - 神經網路 (NN) 概念
本章討論關於 CNTK 的神經網路概念。
眾所周知,神經網路由多層神經元構成。但是,問題在於如何在 CNTK 中建模 NN 的各層?這可以透過層模組中定義的層函式來實現。
層函式
實際上,在 CNTK 中,使用層具有明顯的函數語言程式設計風格。層函式看起來像一個普通函式,它產生一個具有預定義引數的數學函式。讓我們看看如何使用層函式建立最基本的層型別 Dense。
示例
透過以下基本步驟,我們可以建立最基本的層型別:
步驟 1 - 首先,我們需要從 CNTK 的 layers 包中匯入 Dense 層函式。
from cntk.layers import Dense
步驟 2 - 接下來,我們需要從 CNTK 根包中匯入 input_variable 函式。
from cntk import input_variable
步驟 3 - 現在,我們需要使用 input_variable 函式建立一個新的輸入變數。我們還需要提供其大小。
feature = input_variable(100)
步驟 4 - 最後,我們將使用 Dense 函式建立一個新層,並提供我們想要的 neurons 數量。
layer = Dense(40)(feature)
現在,我們可以呼叫已配置的 Dense 層函式將 Dense 層連線到輸入。
完整的實現示例
from cntk.layers import Dense from cntk import input_variable feature= input_variable(100) layer = Dense(40)(feature)
自定義層
正如我們所看到的,CNTK 為我們提供了一套相當不錯的預設設定來構建 NN。根據我們選擇的啟用函式和其他設定,NN 的行為和效能會有所不同。這是另一個非常有用的詞幹提取演算法。因此,瞭解我們可以配置什麼內容是很好的。
配置 Dense 層的步驟
NN 中的每個層都有其獨特的配置選項,當我們談到 Dense 層時,我們有以下重要的設定需要定義:
shape - 顧名思義,它定義了層的輸出形狀,這進一步決定了該層中的神經元數量。
activation - 它定義了該層的啟用函式,因此它可以轉換輸入資料。
init - 它定義了該層的初始化函式。當我們開始訓練 NN 時,它將初始化該層的引數。
讓我們看看我們可以使用哪些步驟來配置Dense層:
步驟 1 - 首先,我們需要從 layers 包中匯入Dense層函式。
from cntk.layers import Dense
步驟 2 - 接下來,我們需要從 CNTK ops 包中匯入sigmoid 運算元。它將用作啟用函式。
from cntk.ops import sigmoid
步驟 3 - 現在,我們需要從 initializer 包中匯入glorot_uniform初始化器。
from cntk.initializer import glorot_uniform
步驟 4 - 最後,我們將使用 Dense 函式建立一個新層,並將神經元數量作為第一個引數提供。此外,還將sigmoid運算元作為activation函式,並將glorot_uniform作為該層的init函式提供。
layer = Dense(50, activation = sigmoid, init = glorot_uniform)
完整的實現示例:
from cntk.layers import Dense from cntk.ops import sigmoid from cntk.initializer import glorot_uniform layer = Dense(50, activation = sigmoid, init = glorot_uniform)
最佳化引數
到目前為止,我們已經瞭解瞭如何建立 NN 的結構以及如何配置各種設定。在這裡,我們將瞭解如何最佳化 NN 的引數。藉助於學習器和訓練器這兩個元件的組合,我們可以最佳化 NN 的引數。
訓練器元件
用於最佳化 NN 引數的第一個元件是訓練器元件。它基本上實現了反向傳播過程。如果我們談論它的工作原理,它會將資料透過 NN 傳遞以獲得預測。
之後,它使用另一個稱為學習器的元件來獲取 NN 中引數的新值。一旦它獲得新值,它就會應用這些新值並重復此過程,直到滿足退出條件。
學習器元件
用於最佳化 NN 引數的第二個元件是學習器元件,它主要負責執行梯度下降演算法。
CNTK 庫中包含的學習器
以下是 CNTK 庫中包含的一些有趣的學習器的列表:
隨機梯度下降 (SGD) - 此學習器表示基本的隨機梯度下降,沒有任何額外功能。
動量隨機梯度下降 (MomentumSGD) - 使用 SGD,此學習器應用動量來克服區域性最大值的問題。
RMSProp - 此學習器為了控制下降率,使用衰減學習率。
Adam - 此學習器為了隨著時間的推移降低下降率,使用衰減動量。
Adagrad - 此學習器對於頻繁出現的和不頻繁出現的特徵使用不同的學習率。