淺談keras中的后端backend及其相關(guān)函數(shù)(K.prod,K.cast)
一、K.prod
prod
keras.backend.prod(x, axis=None, keepdims=False)
功能:在某一指定軸,計算張量中的值的乘積。
參數(shù)
x: 張量或變量。
axis: 一個整數(shù)需要計算乘積的軸。
keepdims: 布爾值,是否保留原尺寸。 如果 keepdims 為 False,則張量的秩減 1。 如果 keepdims 為 True,縮小的維度保留為長度 1。
返回
x 的元素的乘積的張量。
Numpy 實現(xiàn)
def prod(x, axis=None, keepdims=False): if isinstance(axis, list): axis = tuple(axis) return np.prod(x, axis=axis, keepdims=keepdims)
具體例子:
import numpy as np x=np.array([[2,4,6],[2,4,6]]) scaling = np.prod(x, axis=1, keepdims=False) print(x) print(scaling)
【運行結(jié)果】
二、K.cast
cast
keras.backend.cast(x, dtype)
功能:將張量轉(zhuǎn)換到不同的 dtype 并返回。
你可以轉(zhuǎn)換一個 Keras 變量,但它仍然返回一個 Keras 張量。
參數(shù)
x: Keras 張量(或變量)。
dtype: 字符串, ('float16', 'float32' 或 'float64')。
返回
Keras 張量,類型為 dtype。
例子
>>> from keras import backend as K >>> input = K.placeholder((2, 3), dtype='float32') >>> input <tf.Tensor 'Placeholder_2:0' shape=(2, 3) dtype=float32> # It doesn't work in-place as below. >>> K.cast(input, dtype='float16') <tf.Tensor 'Cast_1:0' shape=(2, 3) dtype=float16> >>> input <tf.Tensor 'Placeholder_2:0' shape=(2, 3) dtype=float32> # you need to assign it. >>> input = K.cast(input, dtype='float16') >>> input <tf.Tensor 'Cast_2:0' shape=(2, 3) dtype=float16>
補充知識:keras源碼之backend庫目錄
backend庫目錄
先看common.py
一上來是一些說明
# the type of float to use throughout the session. 整個模塊都是用浮點型數(shù)據(jù) _FLOATX = 'float32' # 數(shù)據(jù)類型為32位浮點型 _EPSILON = 1e-7 # 很小的常數(shù) _IMAGE_DATA_FORMAT = 'channels_last' # 圖像數(shù)據(jù)格式 最后顯示通道,tensorflow格式
接下來看里面的一些函數(shù)
def epsilon(): """Returns the value of the fuzz factor used in numeric expressions. 返回數(shù)值表達(dá)式中使用的模糊因子的值 # Returns A float. # Example ```python >>> keras.backend.epsilon() 1e-07 ``` """ return _EPSILON
該函數(shù)定義了一個常量,值為1e-07,在終端可以直接輸出,如下:
def set_epsilon(e): """Sets the value of the fuzz factor used in numeric expressions. # Arguments e: float. New value of epsilon. # Example ```python >>> from keras import backend as K >>> K.epsilon() 1e-07 >>> K.set_epsilon(1e-05) >>> K.epsilon() 1e-05 ``` """ global _EPSILON _EPSILON = e
該函數(shù)允許自定義值
以string的形式返回默認(rèn)的浮點類型:
def floatx(): """Returns the default float type, as a string. (e.g. 'float16', 'float32', 'float64'). # Returns String, the current default float type. # Example ```python >>> keras.backend.floatx() 'float32' ``` """ return _FLOATX
把numpy數(shù)組投影到默認(rèn)的浮點類型:
def cast_to_floatx(x): """Cast a Numpy array to the default Keras float type.把numpy數(shù)組投影到默認(rèn)的浮點類型 # Arguments x: Numpy array. # Returns The same Numpy array, cast to its new type. # Example ```python >>> from keras import backend as K >>> K.floatx() 'float32' >>> arr = numpy.array([1.0, 2.0], dtype='float64') >>> arr.dtype dtype('float64') >>> new_arr = K.cast_to_floatx(arr) >>> new_arr array([ 1., 2.], dtype=float32) >>> new_arr.dtype dtype('float32') ``` """ return np.asarray(x, dtype=_FLOATX)
默認(rèn)數(shù)據(jù)格式、自定義數(shù)據(jù)格式和檢查數(shù)據(jù)格式:
def image_data_format(): """Returns the default image data format convention ('channels_first' or 'channels_last'). # Returns A string, either `'channels_first'` or `'channels_last'` # Example ```python >>> keras.backend.image_data_format() 'channels_first' ``` """ return _IMAGE_DATA_FORMAT def set_image_data_format(data_format): """Sets the value of the data format convention. # Arguments data_format: string. `'channels_first'` or `'channels_last'`. # Example ```python >>> from keras import backend as K >>> K.image_data_format() 'channels_first' >>> K.set_image_data_format('channels_last') >>> K.image_data_format() 'channels_last' ``` """ global _IMAGE_DATA_FORMAT if data_format not in {'channels_last', 'channels_first'}: raise ValueError('Unknown data_format:', data_format) _IMAGE_DATA_FORMAT = str(data_format) def normalize_data_format(value): """Checks that the value correspond to a valid data format. # Arguments value: String or None. `'channels_first'` or `'channels_last'`. # Returns A string, either `'channels_first'` or `'channels_last'` # Example ```python >>> from keras import backend as K >>> K.normalize_data_format(None) 'channels_first' >>> K.normalize_data_format('channels_last') 'channels_last' ``` # Raises ValueError: if `value` or the global `data_format` invalid. """ if value is None: value = image_data_format() data_format = value.lower() if data_format not in {'channels_first', 'channels_last'}: raise ValueError('The `data_format` argument must be one of ' '"channels_first", "channels_last". Received: ' + str(value)) return data_format
剩余的關(guān)于維度順序和數(shù)據(jù)格式的方法:
def set_image_dim_ordering(dim_ordering): """Legacy setter for `image_data_format`. # Arguments dim_ordering: string. `tf` or `th`. # Example ```python >>> from keras import backend as K >>> K.image_data_format() 'channels_first' >>> K.set_image_data_format('channels_last') >>> K.image_data_format() 'channels_last' ``` # Raises ValueError: if `dim_ordering` is invalid. """ global _IMAGE_DATA_FORMAT if dim_ordering not in {'tf', 'th'}: raise ValueError('Unknown dim_ordering:', dim_ordering) if dim_ordering == 'th': data_format = 'channels_first' else: data_format = 'channels_last' _IMAGE_DATA_FORMAT = data_format def image_dim_ordering(): """Legacy getter for `image_data_format`. # Returns string, one of `'th'`, `'tf'` """ if _IMAGE_DATA_FORMAT == 'channels_first': return 'th' else: return 'tf'
在common.py之后有三個backend,分別是cntk,tensorflow和theano。
__init__.py
首先從common.py中引入了所有需要的東西
from .common import epsilon from .common import floatx from .common import set_epsilon from .common import set_floatx from .common import cast_to_floatx from .common import image_data_format from .common import set_image_data_format from .common import normalize_data_format
接下來是檢查環(huán)境變量與配置文件,設(shè)置backend和format,默認(rèn)的backend是tensorflow。
# Set Keras base dir path given KERAS_HOME env variable, if applicable. # Otherwise either ~/.keras or /tmp. if 'KERAS_HOME' in os.environ: # 環(huán)境變量 _keras_dir = os.environ.get('KERAS_HOME') else: _keras_base_dir = os.path.expanduser('~') if not os.access(_keras_base_dir, os.W_OK): _keras_base_dir = '/tmp' _keras_dir = os.path.join(_keras_base_dir, '.keras') # Default backend: TensorFlow. 默認(rèn)后臺是TensorFlow _BACKEND = 'tensorflow' # Attempt to read Keras config file.讀取keras配置文件 _config_path = os.path.expanduser(os.path.join(_keras_dir, 'keras.json')) if os.path.exists(_config_path): try: with open(_config_path) as f: _config = json.load(f) except ValueError: _config = {} _floatx = _config.get('floatx', floatx()) assert _floatx in {'float16', 'float32', 'float64'} _epsilon = _config.get('epsilon', epsilon()) assert isinstance(_epsilon, float) _backend = _config.get('backend', _BACKEND) _image_data_format = _config.get('image_data_format', image_data_format()) assert _image_data_format in {'channels_last', 'channels_first'} set_floatx(_floatx) set_epsilon(_epsilon) set_image_data_format(_image_data_format) _BACKEND = _backend
之后的tensorflow_backend.py文件是一些tensorflow中的函數(shù)說明,詳細(xì)內(nèi)容請參考tensorflow有關(guān)資料。
以上這篇淺談keras中的后端backend及其相關(guān)函數(shù)(K.prod,K.cast)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python matplotlib超詳細(xì)教程實現(xiàn)圖形繪制
matplotlib 模塊不僅提供了繪制統(tǒng)計圖表的功能,還支持繪制圓形、正方形、矩形等各種圖形。這篇文章主要為大家詳細(xì)介紹了利用matplotlib.patches 繪制一些基本圖形,快來跟隨小編一起學(xué)習(xí)吧2021-12-12Python實現(xiàn)從多表格中隨機(jī)抽取數(shù)據(jù)
這篇文章主要介紹了如何基于Python語言實現(xiàn)隨機(jī)從大量的Excel表格文件中選取一部分?jǐn)?shù)據(jù),并將全部文件中隨機(jī)獲取的數(shù)據(jù)合并為一個新的Excel表格文件的方法,希望對大家有所幫助2023-05-05django model去掉unique_together報錯的解決方案
本文給大家分享的是在使用django model去掉unique_together時報錯的解決思路和具體步驟,提供給大家參考下,希望對大家學(xué)習(xí)使用django能夠有所幫助2016-10-10Python列表(list)、字典(dict)、字符串(string)基本操作小結(jié)
這篇文章主要介紹了Python列表(list)、字典(dict)、字符串(string)基本操作小結(jié),本文總結(jié)了最基本最常用的一些操作,需要的朋友可以參考下2014-11-11Python獲取江蘇疫情實時數(shù)據(jù)及爬蟲分析
為了關(guān)注疫情狀況,今天我們用python來爬一爬疫情的實時數(shù)據(jù),本文通過實例圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-08-08python字典setdefault方法和get方法使用實例
這篇文章主要介紹了python字典setdefault方法和get方法使用實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12