kersのバックエンドbackendとその関連関数(K.prod,K.cast)について話します。
一、K.prod
prod
kersas.backend.prod(x,axis=None,keepdims=False)
機能:ある指定軸で、テンソルの値の積を計算します。
パラメータ
x:テンソルまたは変数。
axis:一つの整数は積軸を計算する必要があります。
keepdims:ブール値は、元のサイズを保持していますか?keepdimsがFalseである場合、テンソルのランクは1を減算する。keepdimsがTrueであれば、縮小された次元は長さ1に保たれる。
戻る
xの要素の積のテンソル。
Numpy実現
二、K.ast
cast
kersas.backend.cast(x,dtype)
機能:テンソルを異なるdtypeに変換して返します。
Keras変数を変えることができますが、それでもKerasテンソルを返します。
パラメータ
x:Kerasテンソル(または変数)
dtype:文字列('float 16'、'float 32'または'float 64')
戻る
Kerasテンソル、タイプはdtypeです。
例
backendライブラリディレクトリ
まず、common.pyを見ます
ちょっと説明します。
デフォルトの浮動小数点タイプをstringで返します。
numpy配列をデフォルトの浮動小数点タイプに投影します。
同前init_.py
まず、common.pyから必要なものを全部導入しました。
以上のこの簡単な話者の中のバックエンドのbackendと関連している関数(K.prod、K.cast)は小さい編纂がみんなのすべての内容に分かち合うので、みんなに一つの参考をあげることができることを望んで、みんながよけいに私達を支持することをも望みます。
prod
kersas.backend.prod(x,axis=None,keepdims=False)
機能:ある指定軸で、テンソルの値の積を計算します。
パラメータ
x:テンソルまたは変数。
axis:一つの整数は積軸を計算する必要があります。
keepdims:ブール値は、元のサイズを保持していますか?keepdimsがFalseである場合、テンソルのランクは1を減算する。keepdimsがTrueであれば、縮小された次元は長さ1に保たれる。
戻る
xの要素の積のテンソル。
Numpy実現
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)
【運転結果】二、K.ast
cast
kersas.backend.cast(x,dtype)
機能:テンソルを異なるdtypeに変換して返します。
Keras変数を変えることができますが、それでもKerasテンソルを返します。
パラメータ
x:Kerasテンソル(または変数)
dtype:文字列('float 16'、'float 32'または'float 64')
戻る
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>
追加の知識:kersソースのbackendライブラリディレクトリbackendライブラリディレクトリ
まず、common.pyを見ます
ちょっと説明します。
# the type of float to use throughout the session.
_FLOATX = 'float32' # 32
_EPSILON = 1e-7 #
_IMAGE_DATA_FORMAT = 'channels_last' # ,tensorflow
次に中の関数を見ます。
def epsilon():
"""Returns the value of the fuzz factor used in numeric expressions.
# Returns
A float.
# Example
```python
>>> keras.backend.epsilon()
1e-07
```
"""
return _EPSILON
この関数は1 e-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
この関数はユーザー定義の値を許可します。デフォルトの浮動小数点タイプをstringで返します。
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配列をデフォルトの浮動小数点タイプに投影します。
def cast_to_floatx(x):
"""Cast a Numpy array to the default Keras float type. numpy
# 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)
デフォルトのデータフォーマット、カスタムデータフォーマット、チェックデータフォーマット:
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
次元順序とデータフォーマットに関する残りの方法:
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の後に3つのbackendがあって、それぞれcntkで、tenson flowと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
次に環境変数と配置ファイルをチェックして、バックエンドとformatを設定します。デフォルトのバックエンドはtenssorflowです。
# Set Keras base dir path given KERAS_HOME env variable, if applicable.
# Otherwise either ~/.keras or /tmp.
if 'KERAS_HOME' in os.environ: #
_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. 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
その後のtenssor flowbackend.pyファイルはいくつかのtenssorflowの関数の説明です。詳しい内容はtenssorflowの関連資料を参照してください。以上のこの簡単な話者の中のバックエンドのbackendと関連している関数(K.prod、K.cast)は小さい編纂がみんなのすべての内容に分かち合うので、みんなに一つの参考をあげることができることを望んで、みんながよけいに私達を支持することをも望みます。