OpenNN
Open-source neural networks library
Loading...
Searching...
No Matches
opennn::Flatten Class Referencefinal

Reshape layer that collapses every input axis into a single feature axis. More...

#include <flatten_layer.h>

Inheritance diagram for opennn::Flatten:
[legend]

Public Member Functions

 Flatten (const Shape &input_shape={})
 Constructs a Flatten layer.
 
Shape get_input_shape () const override
 Returns the per-sample input shape.
 
Shape get_output_shape () const override
 Returns the per-sample output shape.
 
vector< Operator * > get_operators () override
 Returns the single Flat operator that implements this layer.
 
void set (const Shape &)
 Re-initializes the layer.
 
void set_input_shape (const Shape &new_input_shape) override
 Updates the input shape; equivalent to calling set().
 
void back_propagate (ForwardPropagation &, BackPropagation &, size_t) const noexcept override
 Backward pass: reshapes the output gradient back to the input shape.
 
- Public Member Functions inherited from opennn::Layer
virtual ~Layer ()=default
 Virtual destructor; subclasses are owned via unique_ptr<Layer>.
 
const string & get_label () const
 Returns the user-assigned label of this layer.
 
const string & get_name () const
 Returns the canonical type name of this layer.
 
LayerType get_type () const
 Returns the LayerType enumerator for this layer.
 
virtual void set_output_shape (const Shape &)
 Sets the per-sample output shape of this layer.
 
void set_label (string new_label)
 Sets the human-readable label of this layer.
 
Index get_parameters_number () const
 Total number of trainable parameters in this layer.
 
virtual vector< pair< Shape, Type > > get_parameter_specs () const
 Specifications of the trainable parameter tensors owned by this layer.
 
virtual vector< pair< Shape, Type > > get_state_specs () const
 Specifications of the persistent state tensors of this layer.
 
virtual vector< pair< Shape, Type > > get_forward_specs (Index batch_size) const
 Specifications of the forward intermediate buffers for one batch.
 
virtual vector< pair< Shape, Type > > get_backward_specs (Index batch_size) const
 Specifications of the backward intermediate buffers for one batch.
 
vector< Shapeget_parameter_shapes () const
 Shape-only view of get_parameter_specs().
 
vector< Shapeget_state_shapes () const
 Shape-only view of get_state_specs().
 
vector< Shapeget_forward_shapes (Index b) const
 Shape-only view of get_forward_specs() for batch size b.
 
vector< Shapeget_backward_shapes (Index b) const
 Shape-only view of get_backward_specs() for batch size b.
 
vector< Typeget_parameter_dtypes () const
 Dtype-only view of get_parameter_specs().
 
vector< Typeget_forward_dtypes (Index b) const
 Dtype-only view of get_forward_specs() for batch size b.
 
vector< Typeget_backward_dtypes (Index b) const
 Dtype-only view of get_backward_specs() for batch size b.
 
virtual Activation::Function get_output_activation () const
 Activation function fused at the end of this layer, if any.
 
Index get_inputs_number () const
 Total number of scalar inputs per sample (product of input dims).
 
Index get_outputs_number () const
 Total number of scalar outputs per sample (product of output dims).
 
virtual void forward_propagate (ForwardPropagation &fp, size_t layer, bool is_training) noexcept
 Forward pass: reads inputs from fp and writes outputs into fp.
 
virtual void from_JSON (const JsonDocument &document)
 Loads the layer configuration (hyperparameters) from JSON.
 
virtual void read_JSON_body (const Json *)
 Subclass hook for parsing the body of from_JSON().
 
virtual void load_state_from_JSON (const JsonDocument &document)
 Loads parameter and state tensors from a JSON document.
 
virtual void to_JSON (JsonWriter &writer) const
 Writes the layer configuration to JSON.
 
virtual void write_JSON_body (JsonWriter &) const
 Subclass hook for emitting the body of to_JSON().
 
virtual void print () const
 Prints a human-readable summary of the layer to stdout.
 
bool get_is_trainable () const
 Whether this layer has trainable parameters.
 
Type get_compute_dtype () const
 Numerical type used for forward/backward computation.
 
void set_compute_dtype (Type new_compute_dtype)
 Sets the compute dtype and triggers on_compute_dtype_changed().
 
virtual void on_compute_dtype_changed ()
 Hook invoked after set_compute_dtype() mutates the dtype.
 
virtual float * link_parameters (float *pointer)
 Wires this layer's parameter TensorViews onto an external buffer.
 
virtual float * link_states (float *pointer)
 Wires this layer's state TensorViews onto an external buffer.
 
vector< TensorView > & get_parameter_views ()
 Mutable access to this layer's parameter TensorViews.
 
const vector< TensorView > & get_parameter_views () const
 Read-only access to this layer's parameter TensorViews.
 
vector< TensorView > & get_state_views ()
 Mutable access to this layer's state TensorViews.
 
const vector< TensorView > & get_state_views () const
 Read-only access to this layer's state TensorViews.
 
void redistribute_parameters_to_operators ()
 Forwards the current parameter views down to each composing Operator.
 
void redistribute_parameter_gradients_to_operators (vector< TensorView > &gradient_views)
 Forwards externally provided gradient views down to each Operator.
 
void redistribute_states_to_operators ()
 Forwards the current state views down to each composing Operator.
 

Additional Inherited Members

- Protected Member Functions inherited from opennn::Layer
 Layer ()=default
 Default constructor; only invoked by subclasses.
 
float * link_views (float *pointer, const vector< Shape > &shapes, vector< TensorView > &views, const char *tag) const
 Builds views over a contiguous float buffer using shapes.
 
void distribute_to_operators (vector< TensorView > &views, void(Operator::*link)(const vector< TensorView > &), vector< pair< Shape, Type > >(Operator::*specs)() const)
 Generic helper used by the redistribute_*_to_operators() routines.
 
- Protected Attributes inherited from opennn::Layer
string label = "my_layer"
 User-visible label for this layer instance (default "my_layer").
 
string name = "layer"
 Canonical type name set by the subclass (e.g. "dense").
 
LayerType layer_type = LayerType::Dense
 Layer type tag set by the subclass.
 
bool is_trainable = true
 True if the layer has parameters that participate in training.
 
bool is_first_layer = false
 True if this layer is the network's input layer.
 
Type compute_dtype = Type::FP32
 Numerical type used for forward and backward computation.
 
vector< TensorViewparameters
 Parameter TensorViews bound to the network's parameter arena.
 
vector< TensorViewstates
 State TensorViews bound to the network's state arena.
 
vector< unique_ptr< Layer > > layers
 Sub-layers, when this layer is itself a composite.
 

Detailed Description

Reshape layer that collapses every input axis into a single feature axis.

Given an input of any rank, the output is a 1D tensor of length equal to the product of the input dimensions. Forward and backward passes are pure reshapes (no element movement); the layer has no trainable parameters.

Typically inserted between convolutional / pooling layers and dense layers in CNN classifiers.

Constructor & Destructor Documentation

◆ Flatten()

opennn::Flatten::Flatten ( const Shape & input_shape = {})

Constructs a Flatten layer.

Parameters
input_shapePer-sample input shape; the output length is its flat size.

Member Function Documentation

◆ back_propagate()

void opennn::Flatten::back_propagate ( ForwardPropagation & ,
BackPropagation & ,
size_t  ) const
overridevirtualnoexcept

Backward pass: reshapes the output gradient back to the input shape.

Receives the forward intermediates, the BackPropagation buffer and this layer's index inside the network.

Reimplemented from opennn::Layer.

◆ get_input_shape()

Shape opennn::Flatten::get_input_shape ( ) const
inlineoverridevirtual

Returns the per-sample input shape.

Implements opennn::Layer.

◆ get_operators()

vector< Operator * > opennn::Flatten::get_operators ( )
inlineoverridevirtual

Returns the single Flat operator that implements this layer.

Reimplemented from opennn::Layer.

◆ get_output_shape()

Shape opennn::Flatten::get_output_shape ( ) const
inlineoverridevirtual

Returns the per-sample output shape.

Returns
1D shape with length equal to the flat size of the input.

Implements opennn::Layer.

◆ set()

void opennn::Flatten::set ( const Shape & )

Re-initializes the layer.

Receives the new per-sample input shape.

◆ set_input_shape()

void opennn::Flatten::set_input_shape ( const Shape & new_input_shape)
inlineoverridevirtual

Updates the input shape; equivalent to calling set().

Parameters
new_input_shapeNew per-sample input shape.

Reimplemented from opennn::Layer.