---
# System prepended metadata

title: Python 深度學習 DNN
tags: [Python Tutorial]

---

# Python 深度學習 DNN 
###### tags:`Python Tutorial`
* 神經網路依照隱藏層的不同構造可分為三大類:深度神經網路(DNN)、卷積神
經網路(CNN)及遞迴神經網路(RNN)。
* 有神經網路就稱為深度學習
* 計算權重總和:W1*X1 + W2*X2 + ...... + b
* 激勵函式:轉換計算後的權重總和值,做為神經元的輸出值。
作用為**捨棄極端值**及**避免線性資料**。常用的激勵函式有:ReLU、Sigmoid、tanh等。
* 分類問題要用softmax ,損失函數要用交叉商最好
* 最佳化函式:調整權重值及偏置值大小是由學習率決定。
常用的激勵函數有:SGD、Momentum、Adam等。
* 反向傳播:由於損失函式及最佳化函式的計算是在輸出層之後執行,所以要以
反向傳播將誤差值往回傳遞資訊,使權重可以利用這樣的資訊以最佳化函式
來更新權重,進一步降低誤差。

* Tips:
* keras 架構上tensorflow 所以語法使用上較為簡單 
* DNN
```
from keras.models import Sequential
from keras.layers import Dense(全連接層)
模型變數 model  = Sequential()
模型變數 model.add(Dense(units=數值(要放幾個神經元?), input_dim=784數值, activation=激
勵函式名稱relu))
2層
模型變數 model.add(Dense(units=數值(要放幾個神經元?), activation=激
勵函式名稱)relu)
3層
模型變數 model.add(Dense(units=數值(輸出的類別), input_dim=784數值, activation=激
勵函式relu))
輸出層
模型變數 model.add(Dense(units=數值(輸出的類別), input_dim=784數值, activation=激
勵函式名稱 分類通常用softmax))
model.summary() #查看權重數量

```
Tips:
驗證資料(validtion ):在訓練的時候, 就去驗證資料的正確與否

## DNN 訓練以及存取模型
*  訓練模型:
```
模型變數model.compile(loss=categorical_crossentropy(交叉商)損失函式, optimizer='adam'最佳化函式, metrics=[acctracy]評估
標準)
模型變數model.fit(x=train_feature特徵值,y=train_label標籤,validation_split=(通常0.15~0.3之間)驗證資料比率,
epochs= 10 訓練次數,shuffle=布林值, batch_size=200批次資料數量,verbose=2顯示模式)
```

* 儲存模型: 模型變數.save(檔名)

*  讀取模型:
from keras.models import load_model
模型變數 = load_model(模型檔名)

* 評估模型效能:
score = model.evaluate(x=test_feature,y=test_label)

# CNN
• 卷積神經網路在深度神經網路新增了兩種演算方法:
• 卷積層:提取局部圖片特徵。
• 池化層:降低維度。

```
• 載入模型相關模組:
from keras.layers import Conv2D, MaxPooling2D, Flatten

• 建立卷積層的語法:
模型變數.add(Conv2D(filters=數值（捲機核數量）, kernel_size=５＊５二維元組（基數＊基數）, padding='same'填充方式, strides=1 數值, input_shape=三維元組(80,80,3), activation='relu'激勵函式))

• 建立池化層的語法:
模型變數.add(MaxPooling2D(pool_size=(2,2 or 3,3)二維元組))

* 拋棄層 0.1~0.4之間
model.add(Dropout(0.2))

• 查看權重數量 :
模型變數.summary()
```
tips:

* `input_shape=(80,80,3)  # 80*80 的彩色照片, 黑白照片是2`