@@ -146,7 +146,7 @@ Create an input layer for informed echo state networks [^Pathak2018].
146146 Chaos: An Interdisciplinary Journal of Nonlinear Science 28.4 (2018).
147147"""
148148function informed_init (rng:: AbstractRNG , :: Type{T} , dims:: Integer... ;
149- scaling= T (0.1 ), model_in_size, gamma= T (0.5 )) where {T <: Number }
149+ scaling= T (0.1 ), model_in_size:: Int , gamma= T (0.5 )) where {T <: Number }
150150 res_size, in_size = dims
151151 state_size = in_size - model_in_size
152152
@@ -162,18 +162,17 @@ function informed_init(rng::AbstractRNG, ::Type{T}, dims::Integer...;
162162 for i in 1 : num_for_state
163163 idxs = findall (Bool[zero_connections .== input_matrix[i, :]
164164 for i in 1 : size (input_matrix, 1 )])
165- random_row_idx = idxs[DeviceAgnostic . rand (rng, T, 1 : end )]
166- random_clm_idx = range ( 1 , state_size; step = 1 )[DeviceAgnostic . rand (rng, T, 1 : end)]
165+ random_row_idx = idxs[rand (1 : length (idxs) )]
166+ random_clm_idx = rand ( state_size+ 1 : in_size)
167167 input_matrix[random_row_idx, random_clm_idx] = (DeviceAgnostic. rand (rng, T) -
168168 T (0.5 )) .* (T (2 ) * scaling)
169169 end
170170
171171 for i in 1 : num_for_model
172172 idxs = findall (Bool[zero_connections .== input_matrix[i, :]
173173 for i in 1 : size (input_matrix, 1 )])
174- random_row_idx = idxs[DeviceAgnostic. rand (rng, T, 1 : end)]
175- random_clm_idx = range (state_size + 1 , in_size; step= 1 )[DeviceAgnostic. rand (
176- rng, T, 1 : end)]
174+ random_row_idx = idxs[rand (1 : length (idxs))]
175+ random_clm_idx = rand (state_size+ 1 : in_size)
177176 input_matrix[random_row_idx, random_clm_idx] = (DeviceAgnostic. rand (rng, T) -
178177 T (0.5 )) .* (T (2 ) * scaling)
179178 end
@@ -298,7 +297,7 @@ function irrational(rng::AbstractRNG, ::Type{T}, res_size::Int, in_size::Int;
298297 end
299298 end
300299
301- return T .( input_matrix)
300+ return map (T, input_matrix)
302301end
303302
304303@doc raw """
888887
889888"""
890889 pseudo_svd([rng], [T], dims...;
891- max_value=1.0, sparsity=0.1, sorted=true, reverse_sort=false,
892- return_sparse=false)
890+ max_value=1.0, sparsity=0.1, sorted=true,
891+ return_sparse=false, return_diag=false )
893892
894893Returns an initializer to build a sparse reservoir matrix with the given
895894`sparsity` by using a pseudo-SVD approach as described in [^yang].
@@ -910,8 +909,6 @@ Returns an initializer to build a sparse reservoir matrix with the given
910909 Default is 0.1
911910 - `sorted`: A boolean indicating whether to sort the singular values before
912911 creating the diagonal matrix. Default is `true`.
913- - `reverse_sort`: A boolean indicating whether to reverse the sorted
914- singular values. Default is `false`.
915912 - `return_sparse`: flag for returning a `sparse` matrix.
916913 Default is `false`.
917914 - `return_diag`: flag for returning a `Diagonal` matrix. If both `return_diag`
@@ -936,13 +933,12 @@ julia> res_matrix = pseudo_svd(5, 5)
936933"""
937934function pseudo_svd (rng:: AbstractRNG , :: Type{T} , dims:: Integer... ;
938935 max_value:: Number = T (1.0 ), sparsity:: Number = 0.1 , sorted:: Bool = true ,
939- reverse_sort :: Bool = false , return_sparse:: Bool = false ,
936+ return_sparse:: Bool = false ,
940937 return_diag:: Bool = false ) where {T <: Number }
941938 throw_sparse_error (return_sparse)
942939 reservoir_matrix = create_diag (rng, T, dims[1 ],
943940 max_value;
944- sorted= sorted,
945- reverse_sort= reverse_sort)
941+ sorted= sorted)
946942 tmp_sparsity = get_sparsity (reservoir_matrix, dims[1 ])
947943
948944 while tmp_sparsity <= sparsity
@@ -960,25 +956,17 @@ function pseudo_svd(rng::AbstractRNG, ::Type{T}, dims::Integer...;
960956 end
961957end
962958
963- # hacky workaround for the moment
964- function rand_range (rng, T, n:: Int )
965- return Int (1 + floor (DeviceAgnostic. rand (rng, T) * n))
966- end
967-
968- function create_diag (rng:: AbstractRNG , :: Type{T} , dim:: Number , max_value:: Number ;
969- sorted:: Bool = true , reverse_sort:: Bool = false ) where {T <: Number }
959+ function create_diag (rng:: AbstractRNG , :: Type{T} , dim:: Integer , max_value:: Number ;
960+ sorted:: Bool = true ) where {T <: Number }
970961 diagonal_matrix = DeviceAgnostic. zeros (rng, T, dim, dim)
971- if sorted == true
972- if reverse_sort == true
973- diagonal_values = sort (
974- DeviceAgnostic. rand (rng, T, dim) .* max_value; rev= true )
975- diagonal_values[1 ] = max_value
976- else
977- diagonal_values = sort (DeviceAgnostic. rand (rng, T, dim) .* max_value)
978- diagonal_values[end ] = max_value
979- end
980- else
981- diagonal_values = DeviceAgnostic. rand (rng, T, dim) .* max_value
962+ diagonal_values = Array (DeviceAgnostic. rand (rng, T, dim) .* T (max_value))
963+ if sorted
964+ # if reverse_sort
965+ # Base.sort!(diagonal_values; rev=true)
966+ # diagonal_values[1] = T(max_value)
967+ # else
968+ Base. sort! (diagonal_values)
969+ diagonal_values[end ] = T (max_value)
982970 end
983971
984972 for i in 1 : dim
@@ -1003,6 +991,11 @@ function create_qmatrix(rng::AbstractRNG, ::Type{T}, dim::Number,
1003991 return qmatrix
1004992end
1005993
994+ # hacky workaround for the moment
995+ function rand_range (rng, T, n:: Int )
996+ return Int (1 + floor (DeviceAgnostic. rand (rng, T) * n))
997+ end
998+
1006999function get_sparsity (M, dim)
10071000 return size (M[M .!= 0 ], 1 ) / (dim * dim - size (M[M .!= 0 ], 1 )) # nonzero/zero elements
10081001end
0 commit comments