diagonal_init

ReservoirComputing.diagonal_initFunction
diagonal_init([rng], [T], dims...;
    return_sparse=false, weight=randn,
    kwargs...)

Creates a diagonal reservoir (Fette and Eggert, 2005).

Arguments

  • rng: Random number generator. Default is Utils.default_rng()from WeightInitializers.
  • T: Type of the elements in the reservoir matrix. Default is Float32.
  • dims: Dimensions of the reservoir matrix.

Keyword arguments

  • weight: Weight used for the initial self-loop initialization. Can be a single number, vector, or function to generate an array. Default is randn.
  • return_sparse: flag for returning a sparse matrix. true requires SparseArrays to be loaded. Default is false.
  • return_diag: flag for returning a Diagonal matrix. If both return_diag and return_sparse are set to true priority is given to return_diag. Default is false.
  • radius: The desired spectral radius of the reservoir. If nothing is passed, no scaling takes place. Defaults to nothing.
  • signs: Controls sign flips. Use RandomSigns, RegularSigns, or IrrationalDigitSigns. Pass nothing to leave signs unchanged. Default is nothing.

Examples

Default kwargs:

julia> rr = diagonal_init(5, 5)
5×5 Matrix{Float32}:
 -0.359729  0.0       0.0      0.0      0.0
  0.0       1.08721   0.0      0.0      0.0
  0.0       0.0      -0.41959  0.0      0.0
  0.0       0.0       0.0      0.71891  0.0
  0.0       0.0       0.0      0.0      0.420247

Changing the weights magnitudes to a different unique value:

julia> rr = diagonal_init(5, 5; weight=0.1)
5×5 Matrix{Float32}:
 0.1  0.0  0.0  0.0  0.0
 0.0  0.1  0.0  0.0  0.0
 0.0  0.0  0.1  0.0  0.0
 0.0  0.0  0.0  0.1  0.0
 0.0  0.0  0.0  0.0  0.1

Changing the weights signs with different sign patterns:

Changing the weights to random numbers. Note that the length of the given array must be at least as long as the subdiagonal one wants to fill:

julia> rr = diagonal_init(5, 5; weight=0.1, signs = RandomSigns())
5×5 Matrix{Float32}:
 0.1   0.0  0.0   0.0  0.0
 0.0  -0.1  0.0   0.0  0.0
 0.0   0.0  0.1   0.0  0.0
 0.0   0.0  0.0  -0.1  0.0
 0.0   0.0  0.0   0.0  0.1

julia> rr = diagonal_init(5, 5; weight=0.1, signs = IrrationalDigitSigns())
5×5 Matrix{Float32}:
 -0.1  0.0   0.0   0.0   0.0
  0.0  0.1   0.0   0.0   0.0
  0.0  0.0  -0.1   0.0   0.0
  0.0  0.0   0.0  -0.1   0.0
  0.0  0.0   0.0   0.0  -0.1

Returning a sparse matrix:

julia> using SparseArrays

julia> rr = diagonal_init(5, 5; return_sparse=true)
5×5 SparseMatrixCSC{Float32, Int64} with 5 stored entries:
 -0.359729   ⋅         ⋅        ⋅        ⋅
   ⋅        1.08721    ⋅        ⋅        ⋅
   ⋅         ⋅       -0.41959   ⋅        ⋅
   ⋅         ⋅         ⋅       0.71891   ⋅
   ⋅         ⋅         ⋅        ⋅       0.420247

Returning a diagonal matrix:

julia> rr = diagonal_init(MersenneTwister(123), 5, 5; return_diag=true);

julia> rr isa Diagonal{Float32} && size(rr) == (5, 5)
true
source

References