1. 程式人生 > >使用Keras由零開始快速構造自己的深度學習模型

使用Keras由零開始快速構造自己的深度學習模型

《SDCC 2017人工智慧技術實戰》

什麼是keras

Keras是一個高層神經網路API,Keras由純Python編寫而成並基Tensorflow、Theano以及CNTK後端。Keras 為支援快速實驗而生,能夠把你的idea迅速轉換為結果,如果你有如下需求,請選擇Keras:

簡易和快速的原型設計(keras具有高度模組化,極簡,和可擴充特性)
支援CNN和RNN,或二者的結合
無縫CPU和GPU切換

Keras適用的Python版本是:Python 2.7-3.5

pytorch 是另一款有類似功能的框架。

keras 的構造元素

資料處理

  • 文字資料 : 拆分、索引、標註,主要針對英文。

  • 序列資料:補齊、n-gram、skip-gram
    標註類[tokenizer]能批量處理多個文字檔案,統一進行索引,拆分和補齊工作。

  • 影象資料:翻轉、切割、旋轉
    Keras自帶一個具備多種影象變換功能的資料生成器。
    實踐中會將生成器生成的隨機變換的資料和原始資料疊加進行擬合,效果更好。

模型型別

Keras的核心資料結構是“模型”,模型是一種組織網路層的方式。

Sequential model 順序模型

這裡寫圖片描述

Keras中主要的模型是
Sequential模型,Sequential是一系列網路層按順序構成的棧。

  • 損失函式
  • 網路層,有很多初始化引數:
    • 初始化
    • 啟用函式
    • 優化
    • 正則化

Sequential模型如下:

from keras.models import Sequential
model = Sequential()

將一些網路層通過.add()堆疊起來,就構成了一個模型:

from keras.layers import Dense,Activation

model.add(Dense(units=64,input_dim=100))
model.add(Activation("relu"))
model.add(Dense(units=10))
model.add(Activation("softmax"))

完成模型的搭建後,編譯模型

model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])

編譯模型時必須指明損失函式和優化器,如果需要的話可以自己定製損失函式。

在訓練資料上按batch進行一定次數的迭代來訓練網路:

model.fix(x_train, y_train, epochs=5,batch_size=32)

從神經網路模型到keras程式碼的對映1:

這裡寫圖片描述

從神經網路模型到keras程式碼的對映:2

這裡寫圖片描述

泛化模型 generic model

這裡寫圖片描述

模型元素

keras元素與神經網路模型圖的對應關係

keras構造深度學習模型例項

keras構造影象識別模型

影象識別: 遷移學習

  • 最簡單的遷移學習就是將預置模型的頂層去掉,遷移其餘結構到新模型。

這裡寫圖片描述
- 所有引數都要重新訓練

構造自己的模型

這裡寫圖片描述

keras構造深度推薦模型

keras構造時間序列預測模型

這裡寫圖片描述

在生產環境中部署keras模型

輸出為TensorFlow/CNTK的模型檔案,在生產環境中執行。

輸出CNTK可用模型

import cntk as C
C.combine(keras_model.model.outputs).save('trained_cntk_model')

輸出TensorFlow可用模型

import keras.backend as K
session=K.session()
Tf_saver=tf.train.Saver()
Tf_saver.save(sess=session,save+_put=output_path)

利用keras本身的預測函式

利用neocortex.js,在瀏覽器中利用儲存的模型結構和權重執行模型。

模型打分只需要執行前饋網路,計算量小
neocortex.js將需要統一到伺服器的打分計算分散到使用者的瀏覽器或者任何能執行.js程式的地方
適於輕量化應用

使用步驟:

將keras訓練好的模型輸出:
- 模型結構輸出到json檔案
- 模型權重輸出到HDF5檔案
在.js裡指定模型檔案

mm = new NeuralNet({
  modelFilePath:'',
  arrayType:'float64',
  useGPU:false
})

nn.predict()方法即可進行打分操作

Keras對比TensorFlow

簡化模型構建不用自己定義基本的權重要素,keras自動根據資料完成
不用明確地構造組合函式
啟用函式可以在網路層直接作為選項