From e6975624536d0fabbe933e47ff42f655398fbbfc Mon Sep 17 00:00:00 2001 From: jjallaire Date: Fri, 14 Jul 2017 11:50:46 -0400 Subject: [PATCH] rename and export call_layer to create_layer --- NAMESPACE | 1 + R/layer-wrappers.R | 4 ++-- R/layers-activations.R | 10 +++++----- R/layers-convolutional.R | 32 +++++++++++++++---------------- R/layers-core.R | 37 ++++++++++++++++++++++++------------ R/layers-dropout.R | 8 ++++---- R/layers-embedding.R | 2 +- R/layers-locally-connected.R | 4 ++-- R/layers-noise.R | 6 +++--- R/layers-normalization.R | 2 +- R/layers-pooling.R | 24 +++++++++++------------ R/layers-recurrent.R | 6 +++--- man/create_layer.Rd | 27 ++++++++++++++++++++++++++ 13 files changed, 102 insertions(+), 61 deletions(-) create mode 100644 man/create_layer.Rd diff --git a/NAMESPACE b/NAMESPACE index 318e1ac0d..24743ee10 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -40,6 +40,7 @@ export(constraint_minmaxnorm) export(constraint_nonneg) export(constraint_unitnorm) export(count_params) +export(create_layer) export(dataset_boston_housing) export(dataset_cifar10) export(dataset_cifar100) diff --git a/R/layer-wrappers.R b/R/layer-wrappers.R index 7c7f0e316..be4e7b6bd 100644 --- a/R/layer-wrappers.R +++ b/R/layer-wrappers.R @@ -21,7 +21,7 @@ time_distributed <- function(object, layer, input_shape = NULL, batch_input_shape = NULL, batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$TimeDistributed, object, list( + create_layer(keras$layers$TimeDistributed, object, list( layer = layer, input_shape = normalize_shape(input_shape), batch_input_shape = normalize_shape(batch_input_shape), @@ -51,7 +51,7 @@ bidirectional <- function(object, layer, merge_mode = "concat", input_shape = NU batch_input_shape = NULL, batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$Bidirectional, object, list( + create_layer(keras$layers$Bidirectional, object, list( layer = layer, merge_mode = merge_mode, input_shape = normalize_shape(input_shape), diff --git a/R/layers-activations.R b/R/layers-activations.R index 3a5c0fba5..3ca0fc757 100644 --- a/R/layers-activations.R +++ b/R/layers-activations.R @@ -15,7 +15,7 @@ layer_activation <- function(object, activation, input_shape = NULL, batch_input_shape = NULL, batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$Activation, object, list( + create_layer(keras$layers$Activation, object, list( activation = activation, input_shape = normalize_shape(input_shape), batch_input_shape = normalize_shape(batch_input_shape), @@ -47,7 +47,7 @@ layer_activation_leaky_relu <- function(object, alpha = 0.3, input_shape = NULL, dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$LeakyReLU, object, list( + create_layer(keras$layers$LeakyReLU, object, list( alpha = alpha, input_shape = normalize_shape(input_shape), batch_input_shape = normalize_shape(batch_input_shape), @@ -105,7 +105,7 @@ layer_activation_parametric_relu <- function(object, alpha_initializer = "zeros" args$weights <- weights # call layer - call_layer(keras$layers$PReLU, object, args) + create_layer(keras$layers$PReLU, object, args) } @@ -126,7 +126,7 @@ layer_activation_thresholded_relu <- function(object, theta = 1.0, input_shape = dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$ThresholdedReLU, object, list( + create_layer(keras$layers$ThresholdedReLU, object, list( theta = theta, input_shape = normalize_shape(input_shape), batch_input_shape = normalize_shape(batch_input_shape), @@ -158,7 +158,7 @@ layer_activation_elu <- function(object, alpha = 1.0, input_shape = NULL, batch_input_shape = NULL, batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$ELU, object, list( + create_layer(keras$layers$ELU, object, list( alpha = alpha, input_shape = normalize_shape(input_shape), batch_input_shape = normalize_shape(batch_input_shape), diff --git a/R/layers-convolutional.R b/R/layers-convolutional.R index 312043465..17cc5bf15 100644 --- a/R/layers-convolutional.R +++ b/R/layers-convolutional.R @@ -56,7 +56,7 @@ layer_conv_1d <- function(object, filters, kernel_size, strides = 1L, padding = batch_input_shape = NULL, batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$Conv1D, object, list( + create_layer(keras$layers$Conv1D, object, list( filters = as.integer(filters), kernel_size = as_integer_tuple(kernel_size), strides = as_integer_tuple(strides), @@ -138,7 +138,7 @@ layer_conv_2d <- function(object, filters, kernel_size, strides = c(1L, 1L), pad batch_input_shape = NULL, batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$Conv2D, object, list( + create_layer(keras$layers$Conv2D, object, list( filters = as.integer(filters), kernel_size = as_integer_tuple(kernel_size), strides = as_integer_tuple(strides), @@ -225,7 +225,7 @@ layer_conv_3d <- function(object, filters, kernel_size, strides = c(1L, 1L, 1L), batch_input_shape = NULL, batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$Conv3D, object, list( + create_layer(keras$layers$Conv3D, object, list( filters = as.integer(filters), kernel_size = as_integer_tuple(kernel_size), strides = as_integer_tuple(strides), @@ -300,7 +300,7 @@ layer_conv_2d_transpose <- function(object, filters, kernel_size, strides = c(1L batch_input_shape = NULL, batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$Conv2DTranspose, object, list( + create_layer(keras$layers$Conv2DTranspose, object, list( filters = as.integer(filters), kernel_size = as_integer_tuple(kernel_size), strides = as_integer_tuple(strides), @@ -387,7 +387,7 @@ layer_conv_3d_transpose <- function(object, filters, kernel_size, strides = c(1, kernel_constraint = NULL, bias_constraint = NULL, input_shape = NULL, batch_input_shape = NULL, batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$Conv3DTranspose, object, list( + create_layer(keras$layers$Conv3DTranspose, object, list( filters = as.integer(filters), kernel_size = as_integer_tuple(kernel_size), strides = as_integer_tuple(strides), @@ -469,7 +469,7 @@ layer_separable_conv_2d <- function(object, filters, kernel_size, strides = c(1L depthwise_constraint = NULL, pointwise_constraint = NULL, bias_constraint = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$SeparableConv2D, object, list( + create_layer(keras$layers$SeparableConv2D, object, list( filters = as.integer(filters), kernel_size = as_integer_tuple(kernel_size), strides = as_integer_tuple(strides), @@ -516,7 +516,7 @@ layer_separable_conv_2d <- function(object, filters, kernel_size, strides = c(1L layer_upsampling_1d <- function(object, size = 2L, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$UpSampling1D, object, list( + create_layer(keras$layers$UpSampling1D, object, list( size = as.integer(size), batch_size = as_nullable_integer(batch_size), name = name, @@ -552,7 +552,7 @@ layer_upsampling_1d <- function(object, size = 2L, layer_upsampling_2d <- function(object, size = c(2L, 2L), data_format = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$UpSampling2D, object, list( + create_layer(keras$layers$UpSampling2D, object, list( size = as.integer(size), data_format = data_format, batch_size = as_nullable_integer(batch_size), @@ -598,7 +598,7 @@ layer_upsampling_2d <- function(object, size = c(2L, 2L), data_format = NULL, layer_upsampling_3d <- function(object, size= c(2L, 2L, 2L), data_format = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$UpSampling3D, object, list( + create_layer(keras$layers$UpSampling3D, object, list( size = as.integer(size), data_format = data_format, batch_size = as_nullable_integer(batch_size), @@ -628,7 +628,7 @@ layer_upsampling_3d <- function(object, size= c(2L, 2L, 2L), data_format = NULL, #' @export layer_zero_padding_1d <- function(object, padding = 1L, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$ZeroPadding1D, object, list( + create_layer(keras$layers$ZeroPadding1D, object, list( padding = as.integer(padding), batch_size = as_nullable_integer(batch_size), name = name, @@ -667,7 +667,7 @@ layer_zero_padding_1d <- function(object, padding = 1L, layer_zero_padding_2d <- function(object, padding = c(1L, 1L), data_format = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$ZeroPadding2D, object, list( + create_layer(keras$layers$ZeroPadding2D, object, list( padding = normalize_padding(padding, 2L), data_format = data_format, batch_size = as_nullable_integer(batch_size), @@ -714,7 +714,7 @@ layer_zero_padding_2d <- function(object, padding = c(1L, 1L), data_format = NUL layer_zero_padding_3d <- function(object, padding = c(1L, 1L, 1L), data_format = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$ZeroPadding3D, object, list( + create_layer(keras$layers$ZeroPadding3D, object, list( padding = normalize_padding(padding, 3L), data_format = data_format, batch_size = as_nullable_integer(batch_size), @@ -745,7 +745,7 @@ layer_zero_padding_3d <- function(object, padding = c(1L, 1L, 1L), data_format #' @export layer_cropping_1d <- function(object, cropping = c(1L, 1L), batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$Cropping1D, object, list( + create_layer(keras$layers$Cropping1D, object, list( cropping = as.integer(cropping), batch_size = as_nullable_integer(batch_size), name = name, @@ -783,7 +783,7 @@ layer_cropping_1d <- function(object, cropping = c(1L, 1L), layer_cropping_2d <- function(object, cropping = list(c(0L, 0L), c(0L, 0L)), data_format = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$Cropping2D, object, list( + create_layer(keras$layers$Cropping2D, object, list( cropping = normalize_cropping(cropping, 2L), data_format = data_format, batch_size = as_nullable_integer(batch_size), @@ -834,7 +834,7 @@ layer_cropping_2d <- function(object, cropping = list(c(0L, 0L), c(0L, 0L)), dat #' @export layer_cropping_3d <- function(object, cropping = list(c(1L, 1L), c(1L, 1L), c(1L, 1L)), data_format = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$Cropping3D, object, list( + create_layer(keras$layers$Cropping3D, object, list( cropping = normalize_cropping(cropping, 3L), data_format = data_format, batch_size = as_nullable_integer(batch_size), @@ -931,7 +931,7 @@ layer_conv_lstm_2d <- function(object, filters, kernel_size, strides = c(1L, 1L) return_sequences = FALSE, go_backwards = FALSE, stateful = FALSE, dropout = 0.0, recurrent_dropout = 0.0, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL, input_shape = NULL) { - call_layer(keras$layers$ConvLSTM2D, object, list( + create_layer(keras$layers$ConvLSTM2D, object, list( filters = as.integer(filters), kernel_size = as_integer_tuple(kernel_size), strides = as_integer_tuple(strides), diff --git a/R/layers-core.R b/R/layers-core.R index 05ff39ebf..3a77955a6 100644 --- a/R/layers-core.R +++ b/R/layers-core.R @@ -98,7 +98,7 @@ layer_dense <- function(object, units, activation = NULL, use_bias = TRUE, name = NULL, trainable = NULL, weights = NULL ) { - call_layer(keras$layers$Dense, object, list( + create_layer(keras$layers$Dense, object, list( units = as.integer(units), activation = activation, use_bias = use_bias, @@ -141,7 +141,7 @@ layer_reshape <- function(object, target_shape, input_shape = NULL, batch_input_shape = NULL, batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$Reshape, object, list( + create_layer(keras$layers$Reshape, object, list( target_shape = normalize_shape(target_shape), input_shape = normalize_shape(input_shape), batch_input_shape = normalize_shape(batch_input_shape), @@ -179,7 +179,7 @@ layer_permute <- function(object, dims, input_shape = NULL, batch_input_shape = NULL, batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$Permute, object, list( + create_layer(keras$layers$Permute, object, list( dims = as_integer_tuple(dims), input_shape = normalize_shape(input_shape), batch_input_shape = normalize_shape(batch_input_shape), @@ -208,7 +208,7 @@ layer_permute <- function(object, dims, input_shape = NULL, layer_repeat_vector <- function(object, n, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$RepeatVector, object, list( + create_layer(keras$layers$RepeatVector, object, list( n = as.integer(n), batch_size = as_nullable_integer(batch_size), name = name, @@ -259,7 +259,7 @@ layer_lambda <- function(object, f, output_shape = NULL, mask = NULL, arguments if (identical(backend()$backend(), "theano")) args$output_shape = as_integer_tuple(output_shape) - call_layer(keras$layers$Lambda, object, args) + create_layer(keras$layers$Lambda, object, args) } @@ -285,7 +285,7 @@ layer_activity_regularization <- function(object, l1 = 0.0, l2 = 0.0, input_shap dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$ActivityRegularization, object, list( + create_layer(keras$layers$ActivityRegularization, object, list( l1 = l1, l2 = l2, input_shape = normalize_shape(input_shape), @@ -318,7 +318,7 @@ layer_masking <- function(object, mask_value = 0.0, input_shape = NULL, batch_input_shape = NULL, batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$Masking, object, list( + create_layer(keras$layers$Masking, object, list( mask_value = mask_value, input_shape = normalize_shape(input_shape), batch_input_shape = normalize_shape(batch_input_shape), @@ -345,7 +345,7 @@ layer_masking <- function(object, mask_value = 0.0, input_shape = NULL, layer_flatten <- function(object, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$Flatten, object, list()) + create_layer(keras$layers$Flatten, object, list()) } @@ -398,8 +398,21 @@ normalize_shape <- function(shape) { } -# Helper function to call a layer -call_layer <- function(layer_function, object, args) { +#' Create a Keras Layer +#' +#' @param layer_class Python layer class or R6 class of type KerasLayer +#' @param object Object to compose layer with. This is either a +#' [keras_sequential_model()] to add the layer to, or another Layer which +#' this layer will call. +#' @param args Arguments to layer constructor function +#' +#' @return A Keras layer +#' +#' @note The `object` parameter can be missing, in which case the +#' layer is created without a connection to an existing graph. +#' +#' @export +create_layer <- function(layer_class, object, args) { # remove kwargs that are null args$input_shape <- args$input_shape @@ -410,8 +423,8 @@ call_layer <- function(layer_function, object, args) { args$trainable <- args$trainable args$weights <- args$weights - # call function - layer <- do.call(layer_function, args) + # create layer from class + layer <- do.call(layer_class, args) # compose if we have an x if (missing(object) || is.null(object)) diff --git a/R/layers-dropout.R b/R/layers-dropout.R index 67a768074..b10fe11bb 100644 --- a/R/layers-dropout.R +++ b/R/layers-dropout.R @@ -21,7 +21,7 @@ layer_dropout <- function(object, rate, noise_shape = NULL, seed = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$Dropout, object, list( + create_layer(keras$layers$Dropout, object, list( rate = rate, noise_shape = normalize_shape(noise_shape), seed = seed, @@ -58,7 +58,7 @@ layer_dropout <- function(object, rate, noise_shape = NULL, seed = NULL, layer_spatial_dropout_1d <- function(object, rate, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$SpatialDropout1D, object, list( + create_layer(keras$layers$SpatialDropout1D, object, list( rate = rate, batch_size = as_nullable_integer(batch_size), name = name, @@ -102,7 +102,7 @@ layer_spatial_dropout_1d <- function(object, rate, layer_spatial_dropout_2d <- function(object, rate, data_format = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$SpatialDropout2D, object, list( + create_layer(keras$layers$SpatialDropout2D, object, list( rate = rate, data_format = data_format, batch_size = as_nullable_integer(batch_size), @@ -148,7 +148,7 @@ layer_spatial_dropout_2d <- function(object, rate, data_format = NULL, layer_spatial_dropout_3d <- function(object, rate, data_format = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$SpatialDropout3D, object, list( + create_layer(keras$layers$SpatialDropout3D, object, list( rate = rate, data_format = data_format, batch_size = as_nullable_integer(batch_size), diff --git a/R/layers-embedding.R b/R/layers-embedding.R index dad2f689b..32f46e24c 100644 --- a/R/layers-embedding.R +++ b/R/layers-embedding.R @@ -39,7 +39,7 @@ layer_embedding <- function(object, input_dim, output_dim, embeddings_initializer = "uniform", embeddings_regularizer = NULL, activity_regularizer = NULL, embeddings_constraint = NULL, mask_zero = FALSE, input_length = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$Embedding, object, list( + create_layer(keras$layers$Embedding, object, list( input_dim = as.integer(input_dim), output_dim = as.integer(output_dim), embeddings_initializer = embeddings_initializer, diff --git a/R/layers-locally-connected.R b/R/layers-locally-connected.R index 95460c615..105473015 100644 --- a/R/layers-locally-connected.R +++ b/R/layers-locally-connected.R @@ -30,7 +30,7 @@ layer_locally_connected_1d <- function(object, filters, kernel_size, strides = 1 bias_initializer = "zeros", kernel_regularizer = NULL, bias_regularizer = NULL, activity_regularizer = NULL, kernel_constraint = NULL, bias_constraint = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$LocallyConnected1D, object, list( + create_layer(keras$layers$LocallyConnected1D, object, list( filters = as.integer(filters), kernel_size = as_integer_tuple(kernel_size), strides = as_integer_tuple(strides), @@ -96,7 +96,7 @@ layer_locally_connected_2d <- function(object, filters, kernel_size, strides = c bias_initializer = "zeros", kernel_regularizer = NULL, bias_regularizer = NULL, activity_regularizer = NULL, kernel_constraint = NULL, bias_constraint = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$LocallyConnected2D, object, list( + create_layer(keras$layers$LocallyConnected2D, object, list( filters = as.integer(filters), kernel_size = as_integer_tuple(kernel_size), strides = as_integer_tuple(strides), diff --git a/R/layers-noise.R b/R/layers-noise.R index 8c2740c88..e6e2b090c 100644 --- a/R/layers-noise.R +++ b/R/layers-noise.R @@ -23,7 +23,7 @@ layer_gaussian_noise <- function(object, stddev, input_shape = NULL, batch_input_shape = NULL, batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$GaussianNoise, object, list( + create_layer(keras$layers$GaussianNoise, object, list( stddev = stddev, input_shape = normalize_shape(input_shape), batch_input_shape = normalize_shape(batch_input_shape), @@ -59,7 +59,7 @@ layer_gaussian_noise <- function(object, stddev, input_shape = NULL, layer_gaussian_dropout <- function(object, rate, input_shape = NULL, batch_input_shape = NULL, batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$GaussianDropout, object, list( + create_layer(keras$layers$GaussianDropout, object, list( rate = rate, input_shape = normalize_shape(input_shape), batch_input_shape = normalize_shape(batch_input_shape), @@ -102,7 +102,7 @@ layer_gaussian_dropout <- function(object, rate, input_shape = NULL, #' #' @export layer_alpha_dropout <- function(object, rate, noise_shape = NULL, seed = NULL) { - call_layer(keras$layers$AlphaDropout, object, list( + create_layer(keras$layers$AlphaDropout, object, list( rate = rate, noise_shape = noise_shape, seed = as_nullable_integer(seed) diff --git a/R/layers-normalization.R b/R/layers-normalization.R index dc6718f92..0068e81a7 100644 --- a/R/layers-normalization.R +++ b/R/layers-normalization.R @@ -43,7 +43,7 @@ layer_batch_normalization <- function(object, axis = -1L, momentum = 0.99, epsil beta_constraint = NULL, gamma_constraint = NULL, input_shape = NULL, batch_input_shape = NULL, batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$BatchNormalization, object, list( + create_layer(keras$layers$BatchNormalization, object, list( axis = as.integer(axis), momentum = momentum, epsilon = epsilon, diff --git a/R/layers-pooling.R b/R/layers-pooling.R index 08f906b16..3a84e6998 100644 --- a/R/layers-pooling.R +++ b/R/layers-pooling.R @@ -20,7 +20,7 @@ layer_max_pooling_1d <- function(object, pool_size = 2L, strides = NULL, padding = "valid", batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$MaxPooling1D, object, list( + create_layer(keras$layers$MaxPooling1D, object, list( pool_size = as.integer(pool_size), strides = as_nullable_integer(strides), padding = padding, @@ -60,7 +60,7 @@ layer_max_pooling_1d <- function(object, pool_size = 2L, strides = NULL, padding layer_max_pooling_2d <- function(object, pool_size = c(2L, 2L), strides = NULL, padding = "valid", data_format = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$MaxPooling2D, object, list( + create_layer(keras$layers$MaxPooling2D, object, list( pool_size = as.integer(pool_size), strides = as_nullable_integer(strides), padding = padding, @@ -106,7 +106,7 @@ layer_max_pooling_2d <- function(object, pool_size = c(2L, 2L), strides = NULL, layer_max_pooling_3d <- function(object, pool_size = c(2L, 2L, 2L), strides = NULL, padding = "valid", data_format = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$MaxPooling3D, object, list( + create_layer(keras$layers$MaxPooling3D, object, list( pool_size = as.integer(pool_size), strides = as_nullable_integer(strides), padding = padding, @@ -140,7 +140,7 @@ layer_max_pooling_3d <- function(object, pool_size = c(2L, 2L, 2L), strides = NU layer_average_pooling_1d <- function(object, pool_size = 2L, strides = NULL, padding = "valid", batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$AveragePooling1D, object, list( + create_layer(keras$layers$AveragePooling1D, object, list( pool_size = as.integer(pool_size), strides = as_nullable_integer(strides), padding = padding, @@ -179,7 +179,7 @@ layer_average_pooling_1d <- function(object, pool_size = 2L, strides = NULL, pad layer_average_pooling_2d <- function(object, pool_size = c(2L, 2L), strides = NULL, padding = "valid", data_format = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$AveragePooling2D, object, list( + create_layer(keras$layers$AveragePooling2D, object, list( pool_size = as.integer(pool_size), strides = as_nullable_integer(strides), padding = padding, @@ -223,7 +223,7 @@ layer_average_pooling_2d <- function(object, pool_size = c(2L, 2L), strides = NU #' @export layer_average_pooling_3d <- function(object, pool_size = c(2L, 2L, 2L), strides = NULL, padding = "valid", data_format = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$AveragePooling3D, object, list( + create_layer(keras$layers$AveragePooling3D, object, list( pool_size = as.integer(pool_size), strides = as_nullable_integer(strides), padding = padding, @@ -252,7 +252,7 @@ layer_average_pooling_3d <- function(object, pool_size = c(2L, 2L, 2L), strides #' @export layer_global_max_pooling_1d <- function(object, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$GlobalMaxPooling1D, object, list( + create_layer(keras$layers$GlobalMaxPooling1D, object, list( batch_size = as_nullable_integer(batch_size), name = name, trainable = trainable, @@ -275,7 +275,7 @@ layer_global_max_pooling_1d <- function(object, #' @export layer_global_average_pooling_1d <- function(object, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$GlobalAveragePooling1D, object, list( + create_layer(keras$layers$GlobalAveragePooling1D, object, list( batch_size = as_nullable_integer(batch_size), name = name, trainable = trainable, @@ -300,7 +300,7 @@ layer_global_average_pooling_1d <- function(object, #' @export layer_global_max_pooling_2d <- function(object, data_format = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$GlobalMaxPooling2D, object, list( + create_layer(keras$layers$GlobalMaxPooling2D, object, list( data_format = data_format, batch_size = as_nullable_integer(batch_size), name = name, @@ -325,7 +325,7 @@ layer_global_max_pooling_2d <- function(object, data_format = NULL, #' @export layer_global_average_pooling_2d <- function(object, data_format = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$GlobalAveragePooling2D, object, list( + create_layer(keras$layers$GlobalAveragePooling2D, object, list( data_format = data_format, batch_size = as_nullable_integer(batch_size), name = name, @@ -359,7 +359,7 @@ layer_global_average_pooling_2d <- function(object, data_format = NULL, #' @export layer_global_max_pooling_3d <- function(object, data_format = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$GlobalMaxPooling3D, object, list( + create_layer(keras$layers$GlobalMaxPooling3D, object, list( data_format = data_format, batch_size = as_nullable_integer(batch_size), name = name, @@ -392,7 +392,7 @@ layer_global_max_pooling_3d <- function(object, data_format = NULL, #' @export layer_global_average_pooling_3d <- function(object, data_format = NULL, batch_size = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$GlobalAveragePooling3D, object, list( + create_layer(keras$layers$GlobalAveragePooling3D, object, list( data_format = data_format, batch_size = as_nullable_integer(batch_size), name = name, diff --git a/R/layers-recurrent.R b/R/layers-recurrent.R index 83487b5fb..a3c2629ae 100644 --- a/R/layers-recurrent.R +++ b/R/layers-recurrent.R @@ -61,7 +61,7 @@ layer_simple_rnn <- function(object, units, activation = "tanh", use_bias = TRUE kernel_constraint = NULL, recurrent_constraint = NULL, bias_constraint = NULL, dropout = 0.0, recurrent_dropout = 0.0, input_shape = NULL, batch_input_shape = NULL, batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$SimpleRNN, object, list( + create_layer(keras$layers$SimpleRNN, object, list( units = as.integer(units), activation = activation, use_bias = use_bias, @@ -120,7 +120,7 @@ layer_gru <- function(object, units, activation = "tanh", recurrent_activation = kernel_constraint = NULL, recurrent_constraint = NULL, bias_constraint = NULL, dropout = 0.0, recurrent_dropout = 0.0, input_shape = NULL, batch_input_shape = NULL, batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$GRU, object, list( + create_layer(keras$layers$GRU, object, list( units = as.integer(units), activation = activation, recurrent_activation = recurrent_activation, @@ -183,7 +183,7 @@ layer_lstm <- function(object, units, activation = "tanh", recurrent_activation dropout = 0.0, recurrent_dropout = 0.0, input_shape = NULL, batch_input_shape = NULL, batch_size = NULL, dtype = NULL, name = NULL, trainable = NULL, weights = NULL) { - call_layer(keras$layers$LSTM, object, list( + create_layer(keras$layers$LSTM, object, list( units = as.integer(units), activation = activation, recurrent_activation = recurrent_activation, diff --git a/man/create_layer.Rd b/man/create_layer.Rd new file mode 100644 index 000000000..98b64ac3e --- /dev/null +++ b/man/create_layer.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/layers-core.R +\name{create_layer} +\alias{create_layer} +\title{Create a Keras Layer} +\usage{ +create_layer(layer_class, object, args) +} +\arguments{ +\item{layer_class}{Python layer class or R6 class of type KerasLayer} + +\item{object}{Object to compose layer with. This is either a +\code{\link[=keras_sequential_model]{keras_sequential_model()}} to add the layer to, or another Layer which +this layer will call.} + +\item{args}{Arguments to layer constructor function} +} +\value{ +A Keras layer +} +\description{ +Create a Keras Layer +} +\note{ +The \code{object} parameter can be missing, in which case the +layer is created without a connection to an existing graph. +}