1. 程式人生 > >《Python深度學習》——第三章 神經網路入門

《Python深度學習》——第三章 神經網路入門

主要內容:

  1. 神經網路核心元件
  2. Keras簡介
  3. 建立深度學習工作站——Jupter
  4. 使用深度學習解決二分類,多分類和迴歸問題

3.1  神經網路剖析

  1. 層,多層構成網路
  2. 輸入函式和目標
  3. 損失函式
  4. 優化器

3.1.1  層:基本元件

權重

2D張量,用密集連線層(densely  connected  layer)

3D張量,迴圈層(recurrent layer,如LSTM層)

4D張量,二維卷積層(conv2D)

層相容性(layer compatiblility):每一層只接受特定層的輸入張量,輸出特定形狀的張量。

例:layers.Dense(32,input_shape=784,))#輸出張量,第一維大小是32。只接受第一維度是784的2D張量。

不寫input_shape,自動和上層匹配。

3.1.2  模型:層構成的網路

有向無環圖

常見網路拓撲結構(其決定假設空間(hypothesis space))

  1. 雙分支網路
  2. 多頭網路
  3. Inception模組

選擇正確的網路架構是門藝術而不是科學。

3.1.3  損失函式與優化器:配置學習過程的關鍵

損失函式(目標函式)

優化器:SGD的變體

具有多個輸出的神經網路,可以具有多個損失函式,但梯度下降必須基於單個標準損失值,所以要對所有損失函式值求平均。

選擇目標函式的指導原則:

二分類問題:二元交叉熵(binary crossentropy)

多分類問題:分類交叉熵(categorical  crossentropy)

迴歸問題:均方誤差(mean-squared error)

序列學習問題:聯結主義時序分類(CTC,coonectionist temporal classification)


3.2  Keras簡介

特點:

  1. 相同程式碼可以在CPU和GPU上無縫切換
  2. 具有友好的API
  3. 內建支援卷積網路(用於視覺)、迴圈網路(用於序列處理)以及二者的任意組合
  4. 支援任意網路框架:多輸入或多輸出、層共享、模型共享

3.2.1 Keras、TensorFlow、Theano和CNTK

後端引擎(backend engine)

3.2.2  使用Keras開發:概述

工作流程:

  1. 定義訓練資料
  2. 定義層組合的網路
  3. 配置學習過程
  4. 呼叫fit進行迭代

定義模型:

1.Sequential:僅用於層的線性堆疊,常用。

model.add(layers.Dense(32,activation='relu',input_shape=(784,)))

2.函式API:構建任意形式的架構

input_tenser=layer.Input(shape=(784,))

x=layers.Dense(32,activation='relu')(input_tenser)


3.3  建立深度學習網路

最好使用UNIX。

3.3.1  Jupyter筆記本:執行深度學習實驗的首選方法

3.3.2  執行Keras的兩種方法

雲端

本地

3.3.3  在雲端執行深度學習任務:優點和缺點

3.3.4  深度學習的最佳GPU

NVIDIA  TITAN  Xp


3.4  舉例

1.二分類

(1)準備資料

轉換方法

  1. 填充列表
  2. 對列表進行one-hot編碼

(2)構建網路

Dense(16,activation='relu')

16指隱藏單元(hidden unit)個數

隱藏單元越多,網路能夠學到更加複雜的表示,計算代價也越大,且可能過擬合

關鍵架構:

  1. 網路有幾層
  2. 每層有幾個隱藏單元

中間層用‘relu’,最後一層用‘sigmoid’(輸出0~1)。

引入啟用函式是為了:為系統引入非線性。

自定義優化器:通過optimizer傳入優化器類例項

自定義損失函式:通過loss和metric傳入函式物件

交叉驗證:validation_data

(3)進一步實驗:

  1. 嘗試增加或減少隱藏層
  2. 嘗試增加或減少隱藏單元
  3. 改變損失函式
  4. 改變啟用函式

rmsprop優化器,在任何問題下都可使用。

2.多分類

標籤向量化:

  1. 整數張量
  2. one-hot編碼(分類編碼(categorical encoding))

中間層維數 一般要大於輸出層維數,不然會造成資訊瓶頸。

one-hot 編碼使用  categorical_crossentropy損失函式

整數標籤使用  sparse_categorical_crossentropy

使用 softmax啟用函式

3.迴歸

不同特徵取值範圍不同,要先標準化

樣本數量少,使用小網路,利用K折驗證。

最後一層,沒有啟用函式,是線性層

損失函式:均方誤差(MSE,mean squared error)

監控指標:平均絕對誤差(MAE,mean absolute error)