Keras Backend

Overview

Keras is a model-level library, providing high-level building blocks for developing deep learning models. It does not handle itself low-level operations such as tensor products, convolutions and so on. Instead, it relies on a specialized, well-optimized tensor manipulation library to do so, serving as the “backend engine” of Keras.

The R interface to Keras uses TensorFlow™ as it’s default tensor backend engine, however it’s possible to use other backends if desired. At this time, Keras has three backend implementations available:

  • TensorFlow is an open-source symbolic tensor manipulation framework developed by Google.

  • Theano is an open-source symbolic tensor manipulation framework developed by LISA Lab at Université de Montréal.

  • CNTK is an open-source toolkit for deep learning developed by Microsoft.

Selecting a Backend

Keras uses the TensorFlow backend by default. If you want to switch to Theano or CNTK call the use_backend() function just after your call to library(keras). For example:

library(keras)
use_backend("theano")

If you want to use the CNTK backend then you should follow the installation instructions for CNTK and then speicfy “cntk” in your call to use_backend():

library(keras)
use_backend("cntk")

Selecting an Implementation

Keras specifies an API that can be implemented by multiple providers. By default, the Keras R package uses the implementation provided by the Keras Python package (“keras”). TensorFlow also provides an integrated implementation of Keras which you can use by specifying “tensorflow” in a call to the use_implementation() function. For example:

library(keras)
use_implementation("tensorflow")

You would typically specify the “tensorflow” implementation when using Keras with the tfestimators package, as this implementation allows you to use Keras models seamlessly as TensorFlow Estimators.

Keras Configuration File

If you have run Keras at least once, you will find the Keras configuration file at:

~/.keras/keras.json

If it isn’t there, you can create it.

The default configuration file looks like this:

{
    "image_data_format": "channels_last",
    "epsilon": 1e-07,
    "floatx": "float32",
    "backend": "tensorflow"
}

You can change these settings by editing $HOME/.keras/keras.json.

  • image_data_format: String, either "channels_last" or "channels_first". It specifies which data format convention Keras will follow. (backend()$image_data_format() returns it.)
  • For 2D data (e.g. image), "channels_last" assumes (rows, cols, channels) while "channels_first" assumes (channels, rows, cols).
  • For 3D data, "channels_last" assumes (conv_dim1, conv_dim2, conv_dim3, channels) while "channels_first" assumes (channels, conv_dim1, conv_dim2, conv_dim3).
  • epsilon: Float, a numeric fuzzing constant used to avoid dividing by zero in some operations.
  • floatx: String, "float16", "float32", or "float64". Default float precision.
  • backend: String, "tensorflow", "theano", or "cntk".

Using the Backend

If you want the Keras modules you write to be compatible with all available backends, you have to write them via the abstract Keras backend API. Backend API functions have a k_ prefix (e.g. k_placeholder, k_constant, k_dot, etc.).

For example, the code below instantiates an input placeholder. It’s equivalent to tf$placeholder():

library(keras)
inputs <- k_placeholder(shape = c(2, 4, 5))
# also works:
inputs <-  k_placeholder(shape = list(NULL, 4, 5))
# also works:
inputs <- k_placeholder(ndim = 3)

The code below instantiates a variable. It’s equivalent to tf$Variable():

val <- array(runif(60), dim = c(3L, 4L, 5L))
var <- k_variable(value = val)

# all-zeros variable:
var <- k_zeros(shape = c(3, 4, 5))
# all-ones:
var <- k_ones(shape = c(3, 4, 5))

Backend Functions

k_abs

Element-wise absolute value.

k_all

Bitwise reduction (logical AND).

k_any

Bitwise reduction (logical OR).

k_arange

Creates a 1D tensor containing a sequence of integers.

k_argmax

Returns the index of the maximum value along an axis.

k_argmin

Returns the index of the minimum value along an axis.

k_backend

Active Keras backend

k_batch_dot

Batchwise dot product.

k_batch_flatten

Turn a nD tensor into a 2D tensor with same 1st dimension.

k_batch_get_value

Returns the value of more than one tensor variable.

k_batch_normalization

Applies batch normalization on x given mean, var, beta and gamma.

k_batch_set_value

Sets the values of many tensor variables at once.

k_bias_add

Adds a bias vector to a tensor.

k_binary_crossentropy

Binary crossentropy between an output tensor and a target tensor.

k_cast_to_floatx

Cast an array to the default Keras float type.

k_cast

Casts a tensor to a different dtype and returns it.

k_categorical_crossentropy

Categorical crossentropy between an output tensor and a target tensor.

k_clear_session

Destroys the current TF graph and creates a new one.

k_clip

Element-wise value clipping.

k_concatenate

Concatenates a list of tensors alongside the specified axis.

k_constant

Creates a constant tensor.

k_conv1d

1D convolution.

k_conv2d_transpose

2D deconvolution (i.e. transposed convolution).

k_conv2d

2D convolution.

k_conv3d_transpose

3D deconvolution (i.e. transposed convolution).

k_conv3d

3D convolution.

k_cos

Computes cos of x element-wise.

k_count_params

Returns the static number of elements in a Keras variable or tensor.

k_ctc_batch_cost

Runs CTC loss algorithm on each batch element.

k_ctc_decode

Decodes the output of a softmax.

k_ctc_label_dense_to_sparse

Converts CTC labels from dense to sparse.

k_cumprod

Cumulative product of the values in a tensor, alongside the specified axis.

k_cumsum

Cumulative sum of the values in a tensor, alongside the specified axis.

k_depthwise_conv2d

2D convolution with separable filters.

k_dot

Multiplies 2 tensors (and/or variables) and returns a tensor.

k_dropout

Sets entries in x to zero at random, while scaling the entire tensor.

k_dtype

Returns the dtype of a Keras tensor or variable, as a string.

k_elu

Exponential linear unit.

k_epsilon k_set_epsilon

Fuzz factor used in numeric expressions.

k_equal

Element-wise equality between two tensors.

k_eval

Evaluates the value of a variable.

k_exp

Element-wise exponential.

k_expand_dims

Adds a 1-sized dimension at index “axis”.

k_eye

Instantiate an identity matrix and returns it.

k_flatten

Flatten a tensor.

k_floatx k_set_floatx

Default float type

k_foldl

Reduce elems using fn to combine them from left to right.

k_foldr

Reduce elems using fn to combine them from right to left.

k_function

Instantiates a Keras function

k_gather

Retrieves the elements of indices indices in the tensor reference.

k_get_session k_set_session

TF session to be used by the backend.

k_get_uid

Get the uid for the default graph.

k_get_value

Returns the value of a variable.

k_get_variable_shape

Returns the shape of a variable.

k_gradients

Returns the gradients of variables w.r.t. loss.

k_greater_equal

Element-wise truth value of (x >= y).

k_greater

Element-wise truth value of (x > y).

k_hard_sigmoid

Segment-wise linear approximation of sigmoid.

k_identity

Returns a tensor with the same content as the input tensor.

k_image_data_format k_set_image_data_format

Default image data format convention (‘channels_first’ or ‘channels_last’).

k_in_test_phase

Selects x in test phase, and alt otherwise.

k_in_top_k

Returns whether the targets are in the top k predictions.

k_in_train_phase

Selects x in train phase, and alt otherwise.

k_int_shape

Returns the shape of tensor or variable as a list of int or NULL entries.

k_is_tensor

Returns whether x is a symbolic tensor.

k_is_keras_tensor

Returns whether x is a Keras tensor.

k_is_placeholder

Returns whether x is a placeholder.

k_is_sparse

Returns whether a tensor is a sparse tensor.

k_l2_normalize

Normalizes a tensor wrt the L2 norm alongside the specified axis.

k_learning_phase

Returns the learning phase flag.

k_less_equal

Element-wise truth value of (x <= y).

k_less

Element-wise truth value of (x < y).

k_local_conv1d

Apply 1D conv with un-shared weights.

k_local_conv2d

Apply 2D conv with un-shared weights.

k_log

Element-wise log.

k_logsumexp

Computes log(sum(exp(elements across dimensions of a tensor))).

k_manual_variable_initialization

Sets the manual variable initialization flag.

k_map_fn

Map the function fn over the elements elems and return the outputs.

k_max

Maximum value in a tensor.

k_maximum

Element-wise maximum of two tensors.

k_mean

Mean of a tensor, alongside the specified axis.

k_min

Minimum value in a tensor.

k_minimum

Element-wise minimum of two tensors.

k_moving_average_update

Compute the moving average of a variable.

k_ndim

Returns the number of axes in a tensor, as an integer.

k_normalize_batch_in_training

Computes mean and std for batch then apply batch_normalization on batch.

k_not_equal

Element-wise inequality between two tensors.

k_one_hot

Computes the one-hot representation of an integer tensor.

k_ones_like

Instantiates an all-ones variable of the same shape as another tensor.

k_ones

Instantiates an all-ones tensor variable and returns it.

k_permute_dimensions

Permutes axes in a tensor.

k_placeholder

Instantiates a placeholder tensor and returns it.

k_pool2d

2D Pooling.

k_pool3d

3D Pooling.

k_pow

Element-wise exponentiation.

k_print_tensor

Prints message and the tensor value when evaluated.

k_prod

Multiplies the values in a tensor, alongside the specified axis.

k_random_binomial

Returns a tensor with random binomial distribution of values.

k_random_normal_variable

Instantiates a variable with values drawn from a normal distribution.

k_random_normal

Returns a tensor with normal distribution of values.

k_random_uniform_variable

Instantiates a variable with values drawn from a uniform distribution.

k_random_uniform

Returns a tensor with uniform distribution of values.

k_relu

Rectified linear unit.

k_repeat_elements

Repeats the elements of a tensor along an axis.

k_repeat

Repeats a 2D tensor.

k_reset_uids

Reset graph identifiers.

k_reshape

Reshapes a tensor to the specified shape.

k_resize_images

Resizes the images contained in a 4D tensor.

k_resize_volumes

Resizes the volume contained in a 5D tensor.

k_reverse

Reverse a tensor along the specified axes.

k_rnn

Iterates over the time dimension of a tensor

k_round

Element-wise rounding to the closest integer.

k_separable_conv2d

2D convolution with separable filters.

k_set_learning_phase

Sets the learning phase to a fixed value.

k_set_value

Sets the value of a variable, from an R array.

k_shape

Returns the symbolic shape of a tensor or variable.

k_sigmoid

Element-wise sigmoid.

k_sign

Element-wise sign.

k_sin

Computes sin of x element-wise.

k_softmax

Softmax of a tensor.

k_softplus

Softplus of a tensor.

k_softsign

Softsign of a tensor.

k_sparse_categorical_crossentropy

Categorical crossentropy with integer targets.

k_spatial_2d_padding

Pads the 2nd and 3rd dimensions of a 4D tensor.

k_spatial_3d_padding

Pads 5D tensor with zeros along the depth, height, width dimensions.

k_sqrt

Element-wise square root.

k_square

Element-wise square.

k_squeeze

Removes a 1-dimension from the tensor at index “axis”.

k_stack

Stacks a list of rank R tensors into a rank R+1 tensor.

k_std

Standard deviation of a tensor, alongside the specified axis.

k_stop_gradient

Returns variables but with zero gradient w.r.t. every other variable.

k_sum

Sum of the values in a tensor, alongside the specified axis.

k_switch

Switches between two operations depending on a scalar value.

k_tanh

Element-wise tanh.

k_temporal_padding

Pads the middle dimension of a 3D tensor.

k_tile

Creates a tensor by tiling x by n.

k_to_dense

Converts a sparse tensor into a dense tensor and returns it.

k_transpose

Transposes a tensor and returns it.

k_truncated_normal

Returns a tensor with truncated random normal distribution of values.

k_update_add

Update the value of x by adding increment.

k_update_sub

Update the value of x by subtracting decrement.

k_update

Update the value of x to new_x.

k_var

Variance of a tensor, alongside the specified axis.

k_variable

Instantiates a variable and returns it.

k_zeros_like

Instantiates an all-zeros variable of the same shape as another tensor.

k_zeros

Instantiates an all-zeros variable and returns it.