from __future__ import absolute_import from __future__ import division from __future__ import print_function import numpy as np # the type of float to use throughout the session. _FLOATX = 'float32' _EPSILON = 1e-7 _IMAGE_DATA_FORMAT = 'channels_last' 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 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 = float(e) 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 def set_floatx(floatx): """Sets the default float type. # Arguments floatx: String, 'float16', 'float32', or 'float64'. # Example ```python >>> from keras import backend as K >>> K.floatx() 'float32' >>> K.set_floatx('float16') >>> K.floatx() 'float16' ``` """ global _FLOATX if floatx not in {'float16', 'float32', 'float64'}: raise ValueError('Unknown floatx type: ' + str(floatx)) _FLOATX = str(floatx) def cast_to_floatx(x): """Cast a Numpy array to the default Keras float type. # 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. # 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 symbolic(func): """Dummy decorator used in TensorFlow 2.0 to enter the Keras graph.""" return func def eager(func): """Dummy decorator used in TensorFlow 2.0 to exit the Keras graph.""" return func # Legacy methods 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'