R/Layer.R

Layer

(Deprecated) Create a custom Layer

Description

This function is maintained but deprecated. Please use new_layer_class() or %py_class% to define custom layers.

Usage

 
Layer( 
  classname, 
  initialize, 
  build = NULL, 
  call = NULL, 
  compute_output_shape = NULL, 
  ..., 
  inherit = keras::keras$layers$Layer 
) 

Arguments

Arguments Description
classname the name of the custom Layer.
initialize a function. This is where you define the arguments used to further build your layer. For example, a dense layer would take the units argument. You should always call super()$init()`to initialize the base inherited layer. | | build | a function that takesinput_shapeas argument. This is where you will define your weights. Note that if your layer doesn't define trainable weights then you need not implement this method. | | call | This is where the layer's logic lives. Unless you want your layer to support masking, you only have to care about the first argument passed tocall(the input tensor). | | compute_output_shape | a function that takesinput_shape` as an argument. In case your layer modifies the shape of its input, you should specify here the shape transformation logic. This allows Keras to do automatic shape inference. If you don’t modify the shape of the input then you need not implement this method.
Any other methods and/or attributes can be specified using named arguments. They will be added to the layer class.
inherit the Keras layer to inherit from.

Value

A function that wraps create_layer, similar to keras::layer_dense.

Examples

library(keras)
 
 
layer_dense2 <- Layer( 
  "Dense2", 
 
  initialize = function(units) { 
    super()$`__init__`() 
    self$units <- as.integer(units) 
  }, 
 
  build = function(input_shape) { 
    print(class(input_shape)) 
    self$kernel <- self$add_weight( 
      name = "kernel", 
      shape = list(input_shape[[2]], self$units), 
      initializer = "uniform", 
      trainable = TRUE 
    ) 
  }, 
 
  call = function(x) { 
    tensorflow::tf$matmul(x, self$kernel) 
  }, 
 
  compute_output_shape = function(input_shape) { 
    list(input_shape[[1]], self$units) 
  } 
 
) 
 
l <- layer_dense2(units = 10) 
l(matrix(runif(10), ncol = 1))