文章目錄
Keras入門體驗
詳見https://keras.io/zh/。
Keras簡介
Keras 是一個用 Python 編寫的高級神經網絡 API,它能夠以 TensorFlow,CNTK或者 Theano 作爲後端運行。
Keras 的開發目的是支持快速的實驗。能夠以最短的耗時,將你的想法轉換爲實驗結果。
keras深度學習庫優點:
- 允許簡單而快速的原型設計(用戶友好、高度模塊化、可擴展性)。
- 同時支持卷積神經網絡和循環神經網絡,以及兩者的組合。
- 在 CPU 和 GPU 上無縫運行。
相關知識點
keras.models.Sequential()
Sequential模型可以構建非常複雜的神經網絡,包括全連接神經網絡(Dense)、卷積神經網絡(CNN)、循環神經網絡(RNN)等等。
Sequential的核心操作是添加圖層(Layers),從而構建出深度神經網絡。
keras.optimizers.Adam()
Adam爲自適應學習率優化器之一。
代碼片段:
keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)
參數意義:
- lr:float >= 0。【學習率】
- beta_1:float,0 < beta < 1,一般接近1。【一階矩估計的指數衰減率】
- beta_2:float,0 < beta < 1,一般接近1。【二階矩估計的指數衰減率】
- epsilon:float >= 0。如果None,默認爲K.epsilon()。該參數是非常小的數,其爲了防止在實現中除以零。【模糊因子】
- decay:float >= 0。【每次更新時學習率衰減值】
keras.losses.categorical_crossentropy()
多分類交叉熵損失函數
當使用 categorical_crossentropy 爲損失時,你的目標值應該是分類格式 (如果你有 10 個類,每個樣本的目標值應該是一個 10 維的向量,這個向量除了表示類別的那個索引爲 1,其他均爲 0)。【onehot編碼】
keras.utils.to_categorical()
爲了將“整數目標值”轉換爲“分類目標值”,你可以使用 Keras.to_categorical()。
keras.layers.Activation()
Sigmoid激活函數
(softmax爲其多分類問題)
sigmoid函數
sigmoid導數
Sigmoid函數的優點:
- 求導容易。
- Sigmoid函數的輸出映射在(0,1)之間,單調連續輸出範圍有限,優化穩定可以用作輸出層。
Sigmoid函數的缺點:
- 由於其軟飽和性,容易造成梯度消失問題。
- 其輸出沒有以0爲中心。
Relu激活函數
Relu函數
Relu導數
Relu函數的優點:
- 在SGD(隨機梯度下降算法)中收斂速度夠快。
- 不會出現像Sigmoid那樣梯度消失問題。
- 提供了網絡稀疏表達能力。
- 在 無監督訓練中也有良好的表現。
Relu函數的缺點:
- 不以0爲中心。
- 前向傳導(forward pass)過程中,如果 x < 0,則神經元保持非激活狀態,且在後向傳導(backward pass)中「殺死」梯度。這樣權重無法得到更新,網絡無法學習。神經元死亡是不可逆的。
代碼示例
導入相關庫
import keras
from keras.models import Sequential
from keras.layers import Convolution2D, Dense, Flatten, Activation, MaxPooling2D
from keras.optimizers import Adam
from keras.losses import categorical_crossentropy
from keras.models import load_model
導入數據
from keras.datasets import mnist # 手寫體識別
(x_train, y_train), (x_test, y_test) = mnist.load_data() # 注意數據格式
x_train = x_train.reshape(60000, 28, 28, 1)
x_test = x_test.reshape(10000, 28, 28, 1)
y_test = keras.utils.to_categorical(y_test, 10) # 將整型的類別標籤轉爲onehot編碼
y_train = keras.utils.to_categorical(y_train, 10)
print("y test is :::::", y_test)
設計模型
model = Sequential()
# 一層卷積+池化
model.add(Convolution2D(10, (5, 5), input_shape=(28, 28, 1))) # 10個卷積5 × 5卷積盒,注意輸入格式
model.add(MaxPooling2D(2, 2)) # 池化
model.add(Activation('relu')) # 激活
# 二層卷積+池化+扁平化處理
model.add(Convolution2D(8, (5, 5)))
model.add(MaxPooling2D(2, 2))
model.add(Activation('relu'))
model.add(Flatten())
# 全連接層
model.add(Dense(30))
model.add(Activation('relu'))
model.add(Dense(10))
model.add(Activation('softmax'))
訓練模型
adam = Adam(lr=0.001) # 學習率
# 編譯模型
model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['accuracy'])
# 訓練模型
model.fit(x_train, y_train, batch_size=100, epochs=1)
# 保存模型
model.save("keras_test.h5")
使用模型
# 加載模型並進行預測
model = load_model("keras_test.h5")
print(model.summary()) # 打印參數數量
print("加載模型進行預測:", model.predict(x_test))
總結
Keras是一個非常方便的深度學習神經網絡API,模型保存格式"xx.h5"。
歡迎點贊,敬請關注!
返回頂部