--- myst: html_meta: description: Neural network utilities in PyTorch C++ — parameter initialization, module cloning, padding layers, and vision utilities. keywords: PyTorch, C++, nn utilities, init, Cloneable, AnyModule, padding, PixelShuffle, Upsample --- # Utilities Additional utilities for building neural networks: parameter initialization, module cloning, type-erased containers, padding layers, and vision utilities. ## Parameter Initialization The `torch::nn::init` namespace provides functions for initializing module parameters: ```cpp #include // Xavier/Glorot initialization torch::nn::init::xavier_uniform_(linear->weight); torch::nn::init::xavier_normal_(linear->weight); // Kaiming/He initialization torch::nn::init::kaiming_uniform_(conv->weight, /*a=*/0, torch::kFanIn, torch::kReLU); torch::nn::init::kaiming_normal_(conv->weight); // Other initializations torch::nn::init::zeros_(linear->bias); torch::nn::init::ones_(bn->weight); torch::nn::init::constant_(linear->bias, 0.1); torch::nn::init::normal_(linear->weight, /*mean=*/0, /*std=*/0.01); torch::nn::init::uniform_(linear->weight, /*a=*/-0.1, /*b=*/0.1); torch::nn::init::orthogonal_(rnn->weight_hh); ``` ## Cloneable ```{doxygenclass} torch::nn::Cloneable ``` All `torch::nn` modules inherit from `Cloneable`, enabling deep copies: ```cpp auto model = torch::nn::Linear(10, 5); auto model_copy = std::dynamic_pointer_cast(model->clone()); ``` ## AnyModule `AnyModule` provides type-erased storage for any module, allowing you to store heterogeneous modules in a single container. ```{doxygenclass} torch::nn::AnyModule :members: :undoc-members: ``` **Example:** ```cpp torch::nn::AnyModule any_module(torch::nn::Linear(10, 5)); auto output = any_module.forward(input); ``` ## Functional Wraps a function or callable as a module, useful for inserting arbitrary functions into a `Sequential` container. ```{doxygenclass} torch::nn::FunctionalImpl :members: :undoc-members: ``` ## ModuleHolder ```{doxygenclass} torch::nn::ModuleHolder :members: :undoc-members: ``` ## CosineSimilarity ```{doxygenclass} torch::nn::CosineSimilarity :members: :undoc-members: ``` ## PairwiseDistance ```{doxygenclass} torch::nn::PairwiseDistance :members: :undoc-members: ``` ## PackedSequence ```{cpp:class} torch::nn::utils::rnn::PackedSequence Holds the data and list of `batch_sizes` of a packed sequence. All RNN modules accept packed sequences as inputs. ``` ```{cpp:function} const Tensor& data() const Returns the packed tensor containing all sequence elements. ``` ```{cpp:function} const Tensor& batch_sizes() const Returns a 1D tensor of batch sizes at each time step. ``` ```{cpp:function} const Tensor& sorted_indices() const Returns indices used to sort sequences by length (descending). ``` ```{cpp:function} const Tensor& unsorted_indices() const Returns indices to restore the original sequence order. ``` ```{cpp:function} PackedSequence to(torch::Device device) const Moves the packed sequence to the specified device. ``` See also: `torch::nn::utils::rnn::pack_padded_sequence` and `torch::nn::utils::rnn::pad_packed_sequence`. ## Padding Layers ### ReflectionPad1d / ReflectionPad2d / ReflectionPad3d ```{doxygenclass} torch::nn::ReflectionPad1d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::ReflectionPad2d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::ReflectionPad3d :members: :undoc-members: ``` ### ReplicationPad1d / ReplicationPad2d / ReplicationPad3d ```{doxygenclass} torch::nn::ReplicationPad1d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::ReplicationPad2d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::ReplicationPad3d :members: :undoc-members: ``` ### ZeroPad1d / ZeroPad2d / ZeroPad3d ```{doxygenclass} torch::nn::ZeroPad1d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::ZeroPad2d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::ZeroPad3d :members: :undoc-members: ``` ### ConstantPad1d / ConstantPad2d / ConstantPad3d ```{doxygenclass} torch::nn::ConstantPad1d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::ConstantPad2d :members: :undoc-members: ``` ```{doxygenclass} torch::nn::ConstantPad3d :members: :undoc-members: ``` ## Vision Layers ### PixelShuffle ```{doxygenclass} torch::nn::PixelShuffle :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::PixelShuffleOptions :members: :undoc-members: ``` ### PixelUnshuffle ```{doxygenclass} torch::nn::PixelUnshuffle :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::PixelUnshuffleOptions :members: :undoc-members: ``` ### Upsample ```{doxygenclass} torch::nn::Upsample :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::UpsampleOptions :members: :undoc-members: ``` ### Fold / Unfold ```{doxygenclass} torch::nn::Fold :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::FoldOptions :members: :undoc-members: ``` ```{doxygenclass} torch::nn::Unfold :members: :undoc-members: ``` ```{doxygenstruct} torch::nn::UnfoldOptions :members: :undoc-members: ```