淺談keras 的抽象后端(from keras import backend as K)
keras后端簡介:
Keras 是一個模型級庫,為開發(fā)深度學(xué)習(xí)模型提供了高層次的構(gòu)建模塊。它不處理諸如張量乘積和卷積等底層操作,目的也就是盡量不重復(fù)造輪子。
但是底層操作還是需要的, 所以keras 依賴于一個專門的、優(yōu)化的張量操作庫來完成這個操作。
我們可以簡單的認(rèn)為這是 Keras 的「后端引擎」, keras 有三個后端實現(xiàn)可用 、 即: TensorFlow 后端,Theano 后端,CNTK 后端。

如果你需要修改你的后端, 只要將字段 backend 更改為 theano 或 cntk,Keras 將在下次運行 Keras 代碼時使用新的配置。
你也可以定義環(huán)境變量 KERAS_BACKEND,這會覆蓋配置文件中定義的內(nèi)容:
定義的方式如下。
KERAS_BACKEND=tensorflow python -c “from keras import backend” Using
TensorFlow backend.
在 Keras 中,可以加載比 “tensorflow”, “theano” 和 “cntk” 更多的后端, 即可以選擇你自己所定義的后端。
Keras 也可以使用外部后端,這可以通過更改 keras.json 配置文件和 “backend” 設(shè)置來執(zhí)行。
假設(shè)您有一個名為 my_module 的 Python 模塊,您希望將其用作外部后端。keras.json 配置文件將更改如下:
{
“image_data_format”: “channels_last”,
“epsilon”: 1e-07,
“floatx”: “float32”,
“backend”: “my_package.my_module” }
必須驗證外部后端才能使用,有效的后端必須具有以下函數(shù):placeholder, variable and function.
如果由于缺少必需的條目而導(dǎo)致外部后端無效,則會記錄錯誤,通知缺少哪些條目。
下面我們來看一下 keras 的 json 文件中其他的一些更加詳細(xì)的配置;
The keras.json 配置文件包含以下設(shè)置, 你可以通過編輯 $ HOME/.keras/keras.json 來更改這些設(shè)置。
{
“image_data_format”: “channels_last”,
“epsilon”: 1e-07,
“floatx”: “float32”,
“backend”: “tensorflow” }
第一個參數(shù) image_data_format 的可選參數(shù)為 : “channels_last” 或者 “channels_first”,當(dāng)然, 從名字中你就可以看出他們的作用是什么;
如果是 tensorflow作為后端, 那么就應(yīng)當(dāng)是channel last , 也就是輸入的tensor的shape (height, width, channels);
如果是 theano, 那么就是 channel first。
epsilon: 浮點數(shù),用于避免在某些操作中被零除的數(shù)字模糊常量。
floatx: 字符串,“float16”, “float32”, 或 “float64”。默認(rèn)浮點精度。
backend: 字符串, “tensorflow”, “theano”, 或 “cntk”。
使用抽象 Keras 后端:
如果你希望你編寫的 Keras 模塊與 Theano (th) 和 TensorFlow (tf) 兼容,則必須通過抽象 Keras 后端 API 來編寫它們。
你可以通過以下方式導(dǎo)入后端模塊:
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, 4, 5)) inputs = K.placeholder(ndim=3)
也就是說你一旦引用了 keras 的 backed, 那么大多數(shù)你需要的張量操作都可以通過統(tǒng)一的Keras后端接口完成,
而不關(guān)心具體執(zhí)行這些操作的是Theano還是TensorFlow。
下面的代碼實例化一個變量。它等價于 tf.Variable() 或 th.shared()。
import numpy as np val = np.random.random((3, 4, 5)) var = K.variable(value=val) var = K.zeros(shape=(3, 4, 5)) var = K.ones(shape=(3, 4, 5))
你需要的大多數(shù)張量操作都可以像在 TensorFlow 或 Theano 中那樣完成:
b = K.random_uniform_variable(shape=(3, 4), low=0, high=1) # 均勻分布 c = K.random_normal_variable(shape=(3, 4), mean=0, scale=1) # 高斯分布 d = K.random_normal_variable(shape=(3, 4), mean=0, scale=1)
以上這篇淺談keras 的抽象后端(from keras import backend as K)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python爬蟲獲取AliExpress商品詳情的詳細(xì)步驟
速賣通(AliExpress)是全球知名的在線零售平臺,隸屬于阿里巴巴集團(tuán),下面給大家介紹如何使用Python進(jìn)行這一操作的詳細(xì)步驟,感謝的朋友一起看看吧2024-12-12
一文詳細(xì)介紹PyQt5 QPushButton() 的作用
通過本文的介紹,相信你已經(jīng)對PyQt5中的QPushButton控件有了深入的了解,從基礎(chǔ)介紹到常用屬性和方法,再到應(yīng)用場景和樣式定制,本文為你提供了全面的指南,感興趣的朋友跟隨小編一起看看吧2024-08-08
PyTorch詳解經(jīng)典網(wǎng)絡(luò)ResNet實現(xiàn)流程
ResNet全稱residual neural network,主要是解決過深的網(wǎng)絡(luò)帶來的梯度彌散,梯度爆炸,網(wǎng)絡(luò)退化(即網(wǎng)絡(luò)層數(shù)越深時,在數(shù)據(jù)集上表現(xiàn)的性能卻越差)的問題2022-05-05
python 使用tkinter+you-get實現(xiàn)視頻下載器
這篇文章主要介紹了python 使用tkinter+you-get實現(xiàn)視頻下載器,幫助大家方便的下載視頻資源,感興趣的朋友可以了解下2020-11-11
Pycharm學(xué)習(xí)教程(2) 代碼風(fēng)格
這篇文章主要為大家詳細(xì)介紹了最全的Pycharm學(xué)習(xí)教程第二篇代碼風(fēng)格,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05

