Loading...
Searching...
No Matches
opennn::RecurrentOperator Struct Reference

#include <opennn/network/layers/recurrent_layer.h>

Inheritance diagram for opennn::RecurrentOperator:
opennn::Operator opennn::CudnnRnnState

Public Types

enum  ForwardScratchSlot {
  PreviousStateHistoryForwardSlot = 2 , StepInputForwardSlot , StepHiddenForwardSlot , PreviousHiddenForwardSlot ,
  StepDerivativesForwardSlot , CudnnInputSequenceForwardSlot , CudnnOutputSequenceForwardSlot
}
 
enum  BackwardSlot {
  OutputDeltaSlot = 0 , InputDeltaSlot , StepInputScratchSlot , StepPrevHScratchSlot ,
  DeltaScratchSlot , NextCarryScratchSlot , StepInDeltaScratchSlot , SequenceDeltaScratchSlot ,
  CudnnInputDeltaScratchSlot
}
 

Public Member Functions

void set (Index, Index, Index, ActivationFunction=ActivationFunction::Tanh, Type=Type::FP32)
 
vector< TensorSpec > parameter_specs () const override
 
vector< ParameterSlot > parameter_slots () override
 
void set_parameters_random () override
 
void set_parameters_glorot () override
 
void set_parameters_pytorch () override
 
void forward_propagate (ForwardPropagation &, size_t, ForwardPropagationMode) override
 
void back_propagate (ForwardPropagation &, BackPropagation &, size_t) const override
 
- Public Member Functions inherited from opennn::Operator
virtual ~Operator ()=default
 
virtual vector< TensorSpec > state_specs () const
 
virtual vector< SlotQuantization > parameter_quantization () const
 
virtual void link_parameters (span< const TensorView > views)
 
virtual void link_gradients (span< const TensorView > views)
 
virtual void link_states (span< const TensorView >)
 
virtual void link_parameter_scales (span< const TensorView >)
 
bool link_slots (span< const TensorView > views, TensorView *ParameterSlot::*member)
 
virtual void initialize_states ()
 
virtual void set_weights_dtype (Type new_weights_dtype)
 
virtual void to_JSON (JsonWriter &) const
 
virtual void from_JSON (const Json *)
 
virtual void load_state_from_JSON (const Json *)
 
TensorView & get_input (ForwardPropagation &forward_propagation, size_t layer, size_t slot_index=0) const noexcept
 
vector< TensorView > & get_inputs (ForwardPropagation &forward_propagation, size_t layer) const noexcept
 
TensorView & get_output (ForwardPropagation &forward_propagation, size_t layer, size_t slot_index=0) const noexcept
 
TensorView & get_output_delta (BackPropagation &back_propagation, size_t layer, size_t slot_index=0) const noexcept
 
TensorView & get_input_delta (BackPropagation &back_propagation, size_t layer, size_t slot_index=0) const noexcept
 

Public Attributes

Index input_features = 0
 
Index time_steps = 0
 
Index output_features = 0
 
ActivationFunction activation = ActivationFunction::Tanh
 
bool return_sequences = false
 
TensorView bias
 
TensorView input_weights
 
TensorView recurrent_weights
 
TensorView bias_gradient
 
TensorView input_weight_gradient
 
TensorView recurrent_weight_gradient
 
- Public Attributes inherited from opennn::Operator
Type compute_dtype = Type::FP32
 
Type weights_dtype = Type::FP32
 
vector< size_t > input_slots = {0}
 
vector< size_t > output_slots = {1}
 
vector< size_t > input_delta_slots = {1}
 
vector< size_t > output_delta_slots = {0}
 

Additional Inherited Members

- Protected Member Functions inherited from opennn::CudnnRnnState
unique_lock< mutex > lock_backend_state () const
 
void cudnn_rnn_forward_ (const CudnnRnnShapeSlot &, bool is_training, bool has_cell_state, const void *x, void *y, Buffer &forward_state, const function< CudnnRnnShapeSlot &()> &reconfigure) const
 
void cudnn_rnn_backward_ (const CudnnRnnShapeSlot &, bool has_cell_state, const void *x, const void *y, const void *dy, void *dx, const Buffer &forward_state, Buffer &backward_scratch) const
 
CudnnRnnShapeSlot & cudnn_setup_ (const CudnnRnnConfig &, Index input_features, Index output_features, Index time_steps, Index batch_size, bool for_training) const
 
CudnnRnnShapeSlot & cudnn_setup_attempt_ (const CudnnRnnConfig &, Index input_features, Index output_features, Index time_steps, Index batch_size, bool for_training) const
 
void cudnn_copy_weight_regions_ (int num_linear_layers, Index input_features, Index output_features, const TensorView *const *matrices, const TensorView *const *vectors, Buffer &packed_weights, bool to_cudnn) const
 
void cudnn_pack_weights_ (int num_linear_layers, Index input_features, Index output_features, const TensorView *const *weights, const TensorView *const *biases, Buffer &forward_state, uint64_t parameters_version) const
 
void cudnn_unpack_gradients_ (int num_linear_layers, Index input_features, Index output_features, const TensorView *const *weight_gradients, const TensorView *const *bias_gradients, Buffer &backward_scratch) const
 
void prepare_cudnn_forward_state_ (Buffer &, bool is_training, const CudnnRnnShapeSlot &) const
 
string cudnn_rnn_configuration_ (const CudnnRnnShapeSlot &, const char *mode) const
 
void drive_cudnn_forward_ (const CudnnRnnDims &, const TensorView &input, TensorView &sequence_output, TensorView &output, TensorView &cudnn_input_sequence, TensorView &cudnn_output_sequence, Buffer &forward_state, bool is_training, uint64_t parameters_version) const
 
void drive_cudnn_backward_ (const CudnnRnnDims &, const TensorView &input, const TensorView &sequence_output, const TensorView &output_delta, const TensorView &cudnn_input_sequence, const TensorView &cudnn_output_sequence, TensorView &input_delta, TensorView &sequence_delta_scratch, TensorView &input_delta_scratch, const Buffer &forward_state, Buffer &backward_scratch) const
 
- Protected Attributes inherited from opennn::CudnnRnnState
BackendState backend_state
 

Member Enumeration Documentation

◆ BackwardSlot

Enumerator
OutputDeltaSlot 
InputDeltaSlot 
StepInputScratchSlot 
StepPrevHScratchSlot 
DeltaScratchSlot 
NextCarryScratchSlot 
StepInDeltaScratchSlot 
SequenceDeltaScratchSlot 
CudnnInputDeltaScratchSlot 

◆ ForwardScratchSlot

Enumerator
PreviousStateHistoryForwardSlot 
StepInputForwardSlot 
StepHiddenForwardSlot 
PreviousHiddenForwardSlot 
StepDerivativesForwardSlot 
CudnnInputSequenceForwardSlot 
CudnnOutputSequenceForwardSlot 

Member Function Documentation

◆ back_propagate()

void opennn::RecurrentOperator::back_propagate ( ForwardPropagation & ,
BackPropagation & ,
size_t  ) const
overridevirtual

Reimplemented from opennn::Operator.

◆ forward_propagate()

void opennn::RecurrentOperator::forward_propagate ( ForwardPropagation & ,
size_t ,
ForwardPropagationMode  )
overridevirtual

Reimplemented from opennn::Operator.

◆ parameter_slots()

vector< ParameterSlot > opennn::RecurrentOperator::parameter_slots ( )
overridevirtual

Reimplemented from opennn::Operator.

◆ parameter_specs()

vector< TensorSpec > opennn::RecurrentOperator::parameter_specs ( ) const
overridevirtual

Reimplemented from opennn::Operator.

◆ set()

void opennn::RecurrentOperator::set ( Index ,
Index ,
Index ,
ActivationFunction = ActivationFunction::Tanh,
Type = Type::FP32 )

◆ set_parameters_glorot()

void opennn::RecurrentOperator::set_parameters_glorot ( )
overridevirtual

Reimplemented from opennn::Operator.

◆ set_parameters_pytorch()

void opennn::RecurrentOperator::set_parameters_pytorch ( )
overridevirtual

Reimplemented from opennn::Operator.

◆ set_parameters_random()

void opennn::RecurrentOperator::set_parameters_random ( )
overridevirtual

Reimplemented from opennn::Operator.

Member Data Documentation

◆ activation

ActivationFunction opennn::RecurrentOperator::activation = ActivationFunction::Tanh

◆ bias

TensorView opennn::RecurrentOperator::bias

◆ bias_gradient

TensorView opennn::RecurrentOperator::bias_gradient

◆ input_features

Index opennn::RecurrentOperator::input_features = 0

◆ input_weight_gradient

TensorView opennn::RecurrentOperator::input_weight_gradient

◆ input_weights

TensorView opennn::RecurrentOperator::input_weights

◆ output_features

Index opennn::RecurrentOperator::output_features = 0

◆ recurrent_weight_gradient

TensorView opennn::RecurrentOperator::recurrent_weight_gradient

◆ recurrent_weights

TensorView opennn::RecurrentOperator::recurrent_weights

◆ return_sequences

bool opennn::RecurrentOperator::return_sequences = false

◆ time_steps

Index opennn::RecurrentOperator::time_steps = 0