#pragma once #include #include namespace torch { namespace nn { namespace init { enum class Nonlinearity { Linear, Conv1D, Conv2D, Conv3D, ConvTranspose1D, ConvTranspose2D, ConvTranspose3D, Sigmoid, Tanh, ReLU, LeakyReLU }; enum class FanMode { FanIn, FanOut }; /// Return the recommended gain value for the given nonlinearity function. TORCH_API double calculate_gain(Nonlinearity nonlinearity, double param = 0.01); /// Fills the given `tensor` with the provided `value` in-place, and returns it. /// No gradient will be recorded for this operation. TORCH_API Tensor constant_(Tensor tensor, Scalar value); /// Fills the given `tensor` with the Dirac delta function in-place, and returns /// it. No gradient will be recorded for this operation. TORCH_API Tensor dirac_(Tensor tensor); /// Fills the given 2-dimensional `matrix` with an identity matrix. /// No gradient will be recorded for this operation. TORCH_API Tensor eye_(Tensor matrix); /// Fills the given 2-dimensional `matrix` with values drawn from a normal /// distribution parameterized by `mean` and `std`. /// No gradient will be recorded for this operation. TORCH_API Tensor normal_(Tensor tensor, double mean = 0, double std = 1); /// Fills the given `tensor` with ones. /// No gradient will be recorded for this operation. TORCH_API Tensor ones_(Tensor tensor); /// Fills the input `Tensor` with a (semi) orthogonal matrix, as described in /// "Exact solutions to the nonlinear dynamics of learning in deep linear neural /// networks" - Saxe, A. et al. (2013). The input tensor must have at least 2 /// dimensions, and for tensors with more than 2 dimensions the trailing /// dimensions are flattened. /// No gradient will be recorded for this operation. TORCH_API Tensor orthogonal_(Tensor tensor, double gain = 1.0); /// Fills the 2D input `Tensor` as a sparse matrix, where the /// non-zero elements will be drawn from a centered normal distribution /// with the given standard deviation `std`, as described in "Deep learning via /// Hessian-free optimization" - Martens, J. (2010). The `sparsity` is a real /// value between 0 and 1 that controls the fraction of elements in each column /// to be set to zero. /// No gradient will be recorded for this operation. TORCH_API Tensor sparse_(Tensor tensor, double sparsity, double std = 0.01); /// Fills the given 2-dimensional `matrix` with values drawn from a uniform /// distribution parameterized by `low` and `high`. /// No gradient will be recorded for this operation. TORCH_API Tensor uniform_(Tensor tensor, double low = 0, double high = 1); /// Fills the input `Tensor` with values according to the method /// described in "Delving deep into rectifiers: Surpassing human-level /// performance on ImageNet classification" - He, K. et al. (2015), using a /// normal distribution. Also known as He initialization. /// No gradient will be recorded for this operation. TORCH_API Tensor kaiming_normal_( Tensor tensor, double a = 0, FanMode mode = FanMode::FanIn, Nonlinearity nonlinearity = Nonlinearity::LeakyReLU); /// Fills the input `Tensor` with values according to the method /// described in "Delving deep into rectifiers: Surpassing human-level /// performance on ImageNet classification" - He, K. et al. (2015), using a /// uniform distribution. Also known as He initialization. /// No gradient will be recorded for this operation. TORCH_API Tensor kaiming_uniform_( Tensor tensor, double a = 0, FanMode mode = FanMode::FanIn, Nonlinearity nonlinearity = Nonlinearity::LeakyReLU); /// Fills the input `Tensor` with values according to the method /// described in "Understanding the difficulty of training deep feedforward /// neural networks" - Glorot, X. & Bengio, Y. (2010). Values are scaled by the /// `gain` parameter. No gradient will be recorded for this operation. TORCH_API Tensor xavier_normal_(Tensor tensor, double gain = 1.0); /// Fills the input `Tensor` with values according to the method /// described in "Understanding the difficulty of training deep feedforward /// neural networks" - Glorot, X. & Bengio, Y. (2010), using a uniform /// distribution. Values are scaled by the `gain` parameter /// No gradient will be recorded for this operation. TORCH_API Tensor xavier_uniform_(Tensor tensor, double gain = 1.0); /// Fills the given `tensor` with zeros. /// No gradient will be recorded for this operation. TORCH_API Tensor zeros_(Tensor tensor); } // namespace init } // namespace nn } // namespace torch