Feed-forward actor network coupled to a Gaussian or Beta action distribution. More...
#include <LibtorchActorNeuralNet.h>
Public Member Functions | |
| LibtorchActorNeuralNet (const std::string name, const unsigned int num_inputs, const unsigned int num_outputs, const std::vector< unsigned int > &num_neurons_per_layer, const std::vector< std::string > &activation_function={"relu"}, const std::vector< Real > &minimum_values={}, const std::vector< Real > &maximum_values={}, const torch::DeviceType device_type=torch::kCPU, const torch::ScalarType scalar_type=torch::kDouble, const bool build_on_construct=true, const std::vector< Real > &input_shift_factors={}, const std::vector< Real > &input_scaling_factors={}, const std::vector< Real > &output_scaling_factors={}, const bool state_independent_std=true) | |
| Build an actor network with either a Gaussian or Beta action distribution. | |
| LibtorchActorNeuralNet (const Moose::LibtorchActorNeuralNet &nn, const bool build_on_construct=true) | |
| Copy-construct an actor network. | |
| virtual torch::Tensor | forward (const torch::Tensor &x) override |
| Run a forward pass through the actor body. | |
| virtual torch::Tensor | evaluate (torch::Tensor &input, bool sampled, c10::optional< at::Generator > generator=c10::nullopt) |
| Evaluate the actor and either sample from it or use its deterministic action. | |
| virtual torch::Tensor | sample (c10::optional< at::Generator > generator=c10::nullopt) |
| Sample an action from the already-reset distribution. | |
| virtual void | constructNeuralNetwork () override |
| Construct the actor body and action-distribution modules. | |
| const LibtorchActionDistribution & | actionDistribution () const |
| Return the active action distribution as the common base type. | |
| LibtorchActionDistribution & | actionDistribution () |
| Return the active action distribution as the common base type. | |
| const LibtorchGaussianActionDistribution * | gaussianActionDistributionPtr () const |
| Return the Gaussian action distribution pointer, or nullptr for bounded actors. | |
| LibtorchGaussianActionDistribution * | gaussianActionDistributionPtr () |
| Return the Gaussian action distribution pointer, or nullptr for bounded actors. | |
| const LibtorchGaussianActionDistribution & | gaussianActionDistribution () const |
| Return the Gaussian action distribution reference. | |
| LibtorchGaussianActionDistribution & | gaussianActionDistribution () |
| Return the Gaussian action distribution reference. | |
| const LibtorchBetaActionDistribution * | betaActionDistributionPtr () const |
| Return the Beta action distribution pointer, or nullptr for Gaussian actors. | |
| LibtorchBetaActionDistribution * | betaActionDistributionPtr () |
| Return the Beta action distribution pointer, or nullptr for Gaussian actors. | |
| const LibtorchBetaActionDistribution & | betaActionDistribution () const |
| Return the Beta action distribution reference. | |
| LibtorchBetaActionDistribution & | betaActionDistribution () |
| Return the Beta action distribution reference. | |
| bool | stateIndependentStd () const |
| Return whether the Gaussian standard deviation ignores the current actor features. | |
| const std::vector< Real > & | minValues () const |
| Return the configured lower action bounds. | |
| const std::vector< Real > & | maxValues () const |
| Return the configured upper action bounds. | |
| void | resetDistributionParams (torch::Tensor input) |
| Refresh the cached distribution parameters from a fresh input tensor. | |
| torch::Tensor | logProbability (const torch::Tensor &other) |
| Evaluate the log-probability of an action under the current actor state. | |
| torch::Tensor | entropy () |
| Compute the entropy of the current action distribution. | |
| virtual void | initializeNeuralNetwork (c10::optional< at::Generator > generator=c10::nullopt) override |
| Initialize the actor body and action-distribution parameters. | |
| virtual void | addLayer (const std::string &layer_name, const std::unordered_map< std::string, unsigned int > ¶meters) |
| const std::string & | name () const |
| unsigned int | numInputs () const |
| unsigned int | numOutputs () const |
| unsigned int | numHiddenLayers () const |
| const std::vector< unsigned int > & | numNeuronsPerLayer () const |
| const MultiMooseEnum & | activationFunctions () const |
| torch::DeviceType | deviceType () const |
| torch::ScalarType | dataType () const |
| const std::vector< Real > & | inputShiftFactors () const |
| const std::vector< Real > & | inputScalingFactors () const |
| const std::vector< Real > & | outputScalingFactors () const |
| void | synchronizeAffineFactorsFromBuffers () |
| Real | determineGain (const std::string &activation) |
| void | store (nlohmann::json &json) const |
Protected Member Functions | |
| void | initializeAffineBuffers () |
| virtual torch::Tensor | preprocessInput (const torch::Tensor &x) const |
| virtual torch::Tensor | scaleOutput (const torch::Tensor &y) const |
Static Protected Member Functions | |
| static std::vector< Real > | setAffineFactors (const std::vector< Real > &factors, unsigned int expected_size, Real default_value, const std::string &factor_name) |
Protected Attributes | |
| const std::vector< Real > | _minimum_values |
| Lower action bounds used by bounded actor distributions. | |
| const std::vector< Real > | _maximum_values |
| Upper action bounds used by bounded actor distributions. | |
| const bool | _state_independent_std |
| Whether the Gaussian std ignores the current actor features. | |
| std::shared_ptr< LibtorchActionDistribution > | _action_distribution |
| Action-distribution module attached to the actor output. | |
| const std::string | _name |
| std::vector< torch::nn::Linear > | _weights |
| const unsigned int | _num_inputs |
| const unsigned int | _num_outputs |
| const std::vector< unsigned int > | _num_neurons_per_layer |
| MultiMooseEnum | _activation_function |
| const torch::DeviceType | _device_type |
| const torch::ScalarType | _data_type |
| std::vector< Real > | _input_shift_factors |
| std::vector< Real > | _input_scaling_factors |
| std::vector< Real > | _output_scaling_factors |
| torch::Tensor | _input_shift_tensor |
| torch::Tensor | _input_scale_tensor |
| torch::Tensor | _output_scale_tensor |
Feed-forward actor network coupled to a Gaussian or Beta action distribution.
Definition at line 24 of file LibtorchActorNeuralNet.h.
| Moose::LibtorchActorNeuralNet::LibtorchActorNeuralNet | ( | const std::string | name, |
| const unsigned int | num_inputs, | ||
| const unsigned int | num_outputs, | ||
| const std::vector< unsigned int > & | num_neurons_per_layer, | ||
| const std::vector< std::string > & | activation_function = {"relu"}, |
||
| const std::vector< Real > & | minimum_values = {}, |
||
| const std::vector< Real > & | maximum_values = {}, |
||
| const torch::DeviceType | device_type = torch::kCPU, |
||
| const torch::ScalarType | scalar_type = torch::kDouble, |
||
| const bool | build_on_construct = true, |
||
| const std::vector< Real > & | input_shift_factors = {}, |
||
| const std::vector< Real > & | input_scaling_factors = {}, |
||
| const std::vector< Real > & | output_scaling_factors = {}, |
||
| const bool | state_independent_std = true |
||
| ) |
Build an actor network with either a Gaussian or Beta action distribution.
| name | Name of the neural network module. |
| num_inputs | Number of actor inputs. |
| num_outputs | Number of action outputs. |
| num_neurons_per_layer | Hidden-layer widths. |
| activation_function | Hidden-layer activation names. |
| minimum_values | Optional lower action bounds. Leave empty for Gaussian actions. |
| maximum_values | Optional upper action bounds. Leave empty for Gaussian actions. |
| device_type | Torch device used by the module. |
| scalar_type | Torch scalar type used by the module. |
| build_on_construct | Whether to build the torch modules right away. |
| input_shift_factors | Optional affine input shifts. |
| input_scaling_factors | Optional affine input scales. |
| output_scaling_factors | Optional per-action scaling in physical units. |
| state_independent_std | Whether the Gaussian std should ignore the current state. |
Definition at line 64 of file LibtorchActorNeuralNet.C.
| Moose::LibtorchActorNeuralNet::LibtorchActorNeuralNet | ( | const Moose::LibtorchActorNeuralNet & | nn, |
| const bool | build_on_construct = true |
||
| ) |
Copy-construct an actor network.
| nn | Actor network to copy. |
| build_on_construct | Whether to rebuild the module structure during the copy. |
Definition at line 114 of file LibtorchActorNeuralNet.C.
|
inline |
Return the active action distribution as the common base type.
Definition at line 102 of file LibtorchActorNeuralNet.h.
|
inline |
Return the active action distribution as the common base type.
Definition at line 97 of file LibtorchActorNeuralNet.h.
Referenced by Moose::loadLibtorchActorNeuralNetState().
| LibtorchBetaActionDistribution & Moose::LibtorchActorNeuralNet::betaActionDistribution | ( | ) |
Return the Beta action distribution reference.
Errors if the actor is unbounded.
Definition at line 253 of file LibtorchActorNeuralNet.C.
| const LibtorchBetaActionDistribution & Moose::LibtorchActorNeuralNet::betaActionDistribution | ( | ) | const |
Return the Beta action distribution reference.
Errors if the actor is unbounded.
Definition at line 244 of file LibtorchActorNeuralNet.C.
| LibtorchBetaActionDistribution * Moose::LibtorchActorNeuralNet::betaActionDistributionPtr | ( | ) |
Return the Beta action distribution pointer, or nullptr for Gaussian actors.
Definition at line 238 of file LibtorchActorNeuralNet.C.
| const LibtorchBetaActionDistribution * Moose::LibtorchActorNeuralNet::betaActionDistributionPtr | ( | ) | const |
Return the Beta action distribution pointer, or nullptr for Gaussian actors.
Definition at line 232 of file LibtorchActorNeuralNet.C.
Referenced by betaActionDistribution(), and betaActionDistribution().
|
overridevirtual |
Construct the actor body and action-distribution modules.
Reimplemented from Moose::LibtorchArtificialNeuralNet.
Definition at line 154 of file LibtorchActorNeuralNet.C.
Referenced by LibtorchActorNeuralNet(), and LibtorchActorNeuralNet().
| torch::Tensor Moose::LibtorchActorNeuralNet::entropy | ( | ) |
Compute the entropy of the current action distribution.
Definition at line 196 of file LibtorchActorNeuralNet.C.
Referenced by LibtorchRLPPOLoss::compute().
|
virtual |
Evaluate the actor and either sample from it or use its deterministic action.
| input | Input tensor for the evaluation. |
| sampled | Whether to draw a stochastic sample. |
| generator | Optional random-number generator used for sampling. |
Definition at line 294 of file LibtorchActorNeuralNet.C.
Referenced by LibtorchRLPPOLoss::compute().
|
overridevirtual |
Run a forward pass through the actor body.
| x | Input tensor for the evaluation. |
Reimplemented from Moose::LibtorchArtificialNeuralNet.
Definition at line 268 of file LibtorchActorNeuralNet.C.
Referenced by evaluate(), and forward().
| LibtorchGaussianActionDistribution & Moose::LibtorchActorNeuralNet::gaussianActionDistribution | ( | ) |
Return the Gaussian action distribution reference.
Errors if the actor is bounded.
Definition at line 223 of file LibtorchActorNeuralNet.C.
| const LibtorchGaussianActionDistribution & Moose::LibtorchActorNeuralNet::gaussianActionDistribution | ( | ) | const |
Return the Gaussian action distribution reference.
Errors if the actor is bounded.
Definition at line 214 of file LibtorchActorNeuralNet.C.
| LibtorchGaussianActionDistribution * Moose::LibtorchActorNeuralNet::gaussianActionDistributionPtr | ( | ) |
Return the Gaussian action distribution pointer, or nullptr for bounded actors.
Definition at line 208 of file LibtorchActorNeuralNet.C.
| const LibtorchGaussianActionDistribution * Moose::LibtorchActorNeuralNet::gaussianActionDistributionPtr | ( | ) | const |
Return the Gaussian action distribution pointer, or nullptr for bounded actors.
Definition at line 202 of file LibtorchActorNeuralNet.C.
Referenced by gaussianActionDistribution(), and gaussianActionDistribution().
|
overridevirtual |
Initialize the actor body and action-distribution parameters.
| generator | Optional random-number generator used for reproducible initialization. |
Reimplemented from Moose::LibtorchArtificialNeuralNet.
Definition at line 139 of file LibtorchActorNeuralNet.C.
| torch::Tensor Moose::LibtorchActorNeuralNet::logProbability | ( | const torch::Tensor & | other | ) |
Evaluate the log-probability of an action under the current actor state.
| other | Action tensor in physical units. |
Definition at line 315 of file LibtorchActorNeuralNet.C.
Referenced by LibtorchRLPPOLoss::compute().
|
inline |
|
inline |
| void Moose::LibtorchActorNeuralNet::resetDistributionParams | ( | torch::Tensor | input | ) |
Refresh the cached distribution parameters from a fresh input tensor.
| input | Input tensor used to update the distribution. |
Definition at line 262 of file LibtorchActorNeuralNet.C.
Referenced by evaluate().
|
virtual |
Sample an action from the already-reset distribution.
| generator | Optional random-number generator used for sampling. |
Definition at line 309 of file LibtorchActorNeuralNet.C.
Referenced by evaluate().
|
inline |
Return whether the Gaussian standard deviation ignores the current actor features.
Definition at line 147 of file LibtorchActorNeuralNet.h.
|
protected |
Action-distribution module attached to the actor output.
Definition at line 191 of file LibtorchActorNeuralNet.h.
Referenced by actionDistribution(), actionDistribution(), betaActionDistributionPtr(), betaActionDistributionPtr(), constructNeuralNetwork(), entropy(), evaluate(), gaussianActionDistributionPtr(), gaussianActionDistributionPtr(), initializeNeuralNetwork(), logProbability(), resetDistributionParams(), and sample().
|
protected |
Upper action bounds used by bounded actor distributions.
Definition at line 187 of file LibtorchActorNeuralNet.h.
Referenced by constructNeuralNetwork(), LibtorchActorNeuralNet(), and maxValues().
|
protected |
Lower action bounds used by bounded actor distributions.
Definition at line 185 of file LibtorchActorNeuralNet.h.
Referenced by constructNeuralNetwork(), LibtorchActorNeuralNet(), and minValues().
|
protected |
Whether the Gaussian std ignores the current actor features.
Definition at line 189 of file LibtorchActorNeuralNet.h.
Referenced by constructNeuralNetwork(), and stateIndependentStd().