Hi,
I have a parameter vector and shape array as below:
shape =[((2,5),2),((2,2),2)] #shape of layers : weights and bias
w = rand(18) #weights and bias together.
In this case elements of w
are divided as below:
- First 10 elements of
w
are weights of layer 1
- Next 2 elements of
w
are bias of layer 1
- First 4elements of
w
are weights of layer 2
- Next 2 elements of
w
are bias of layer 2
What will be the best way to create a Flux model using like below using elements of w
Chain(Dense(5,2), Dense(2,2))
Thanks and Regards
Manu
I would first create the model using something like
model = Chain(map(x -> Dense(x[1]...), shape)...)
and then use loadparams!(model, theta),
where I would create theta
as
theta = mapreduce(x -> [view(parameter_vector, x[1]...),view(parameter_vector, x[2])], vcat, shape)
Also, there is destructure
and restructure
commands, converting model to a vector of parameters and back, so I would take a look on those.
2 Likes
@Tomas_Pevny: I really appreciate your reply. Your solution saved my time… Amazing…
I looked on destructure
θ, re = destructure(model);
Then I can update model with new weight as
re(w)
1 Like
Yeah, destructure was written for exactly this use-case.
1 Like