1. 程式人生 > 程式設計 >淺談keras 的抽象後端(from keras import backend as K)

淺談keras 的抽象後端(from keras import backend as K)

keras後端簡介:

Keras 是一個模型級庫,為開發深度學習模型提供了高層次的構建模組。它不處理諸如張量乘積和卷積等底層操作,目的也就是儘量不重複造輪子。

但是底層操作還是需要的, 所以keras 依賴於一個專門的、優化的張量操作庫來完成這個操作。

我們可以簡單的認為這是 Keras 的「後端引擎」, keras 有三個後端實現可用 、 即: TensorFlow 後端,Theano 後端,CNTK 後端。

淺談keras 的抽象後端(from keras import backend as K)

如果你需要修改你的後端, 只要將欄位 backend 更改為 theano 或 cntk,Keras 將在下次執行 Keras 程式碼時使用新的配置。

你也可以定義環境變數 KERAS_BACKEND,這會覆蓋配置檔案中定義的內容:

定義的方式如下。

KERAS_BACKEND=tensorflow python -c “from keras import backend” Using
TensorFlow backend.

在 Keras 中,可以載入比 “tensorflow”,“theano” 和 “cntk” 更多的後端, 即可以選擇你自己所定義的後端。

Keras 也可以使用外部後端,這可以通過更改 keras.json 配置檔案和 “backend” 設定來執行。

假設您有一個名為 my_module 的 Python 模組,您希望將其用作外部後端。keras.json 配置檔案將更改如下:

{
“image_data_format”: “channels_last”,“epsilon”: 1e-07,“floatx”: “float32”,“backend”: “my_package.my_module” }

必須驗證外部後端才能使用,有效的後端必須具有以下函式:placeholder,variable and function.

如果由於缺少必需的條目而導致外部後端無效,則會記錄錯誤,通知缺少哪些條目。

下面我們來看一下 keras 的 json 檔案中其他的一些更加詳細的配置;

The keras.json 配置檔案包含以下設定, 你可以通過編輯 $ HOME/.keras/keras.json 來更改這些設定。

{
“image_data_format”: “channels_last”,“backend”: “tensorflow” }

第一個引數 image_data_format 的可選引數為 : “channels_last” 或者 “channels_first”,當然, 從名字中你就可以看出他們的作用是什麼;

如果是 tensorflow作為後端, 那麼就應當是channel last,也就是輸入的tensor的shape (height,width,channels);

如果是 theano,那麼就是 channel first。

epsilon: 浮點數,用於避免在某些操作中被零除的數字模糊常量。

floatx: 字串,“float16”,“float32”,或 “float64”。預設浮點精度。

backend: 字串, “tensorflow”,“theano”,或 “cntk”。

使用抽象 Keras 後端:

如果你希望你編寫的 Keras 模組與 Theano (th) 和 TensorFlow (tf) 相容,則必須通過抽象 Keras 後端 API 來編寫它們。

你可以通過以下方式匯入後端模組:

from keras import backend as K

下面是後端使用的一些介紹:

這段程式碼例項化一個輸入佔位符。它等價於 tf.placeholder() 或 th.tensor.matrix(),th.tensor.tensor3(),等等。

inputs = K.placeholder(shape=(2,4,5))
inputs = K.placeholder(shape=(None,5))
inputs = K.placeholder(ndim=3)

也就是說你一旦引用了 keras 的 backed, 那麼大多數你需要的張量操作都可以通過統一的Keras後端介面完成,

而不關心具體執行這些操作的是Theano還是TensorFlow。

下面的程式碼例項化一個變數。它等價於 tf.Variable() 或 th.shared()。

import numpy as np
val = np.random.random((3,5))
var = K.variable(value=val)

var = K.zeros(shape=(3,5))
var = K.ones(shape=(3,5))

你需要的大多數張量操作都可以像在 TensorFlow 或 Theano 中那樣完成:

b = K.random_uniform_variable(shape=(3,4),low=0,high=1) # 均勻分佈
c = K.random_normal_variable(shape=(3,mean=0,scale=1) # 高斯分佈
d = K.random_normal_variable(shape=(3,scale=1)

以上這篇淺談keras 的抽象後端(from keras import backend as K)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。