深度學習API——Keras入門初體驗

歡迎點贊,敬請關注!

Keras入門體驗

詳見https://keras.io/zh/。
Keras

Keras簡介

Keras 是一個用 Python 編寫的高級神經網絡 API,它能夠以 TensorFlow,CNTK或者 Theano 作爲後端運行。
Keras 的開發目的是支持快速的實驗。能夠以最短的耗時,將你的想法轉換爲實驗結果。

keras深度學習庫優點:

  1. 允許簡單而快速的原型設計(用戶友好、高度模塊化、可擴展性)。
  2. 同時支持卷積神經網絡和循環神經網絡,以及兩者的組合。
  3. 在 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導數
Sigmoid函數的優點:

  1. 求導容易。
  2. Sigmoid函數的輸出映射在(0,1)之間,單調連續輸出範圍有限,優化穩定可以用作輸出層

Sigmoid函數的缺點:

  1. 由於其軟飽和性,容易造成梯度消失問題。
  2. 其輸出沒有以0爲中心。

Relu激活函數

Relu函數
Relu函數
Relu導數
Relu導數
Relu函數的優點:

  1. 在SGD(隨機梯度下降算法)中收斂速度夠快。
  2. 不會出現像Sigmoid那樣梯度消失問題。
  3. 提供了網絡稀疏表達能力。
  4. 在 無監督訓練中也有良好的表現。

Relu函數的缺點:

  1. 不以0爲中心。
  2. 前向傳導(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"。

歡迎點贊,敬請關注!
返回頂部

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章