在 Flux 中手动更新层参数
Manually update layer params in Flux
如何在 Flux 中手动设置图层的权重?该层是不可变结构,因此无法直接更新它们:
> a = rand(Float64, (2, 3))
> d = Dense(3, 2, relu)
> d.W = a
ERROR: setfield! immutable struct of type Dense cannot be changed
update!
函数假定使用渐变。虽然我可能会破解一个梯度矩阵一起使用 update!(x, x̄)
,但这似乎不是一个很好的解决方案。
理想情况下,我想编写一些函数来获取现有权重,计算新权重,然后设置这些新权重,例如 d.W = func(d.W; args)
如您所见,Dense
结构被定义为不可变。但是,您仍然可以修改参数 d.W .= a
.
当d.W为普通矩阵时,使用d.W .= a
。
但是,当d.W是一个Tracked Matrix时,你需要做d.W.data .= a
如何在 Flux 中手动设置图层的权重?该层是不可变结构,因此无法直接更新它们:
> a = rand(Float64, (2, 3))
> d = Dense(3, 2, relu)
> d.W = a
ERROR: setfield! immutable struct of type Dense cannot be changed
update!
函数假定使用渐变。虽然我可能会破解一个梯度矩阵一起使用 update!(x, x̄)
,但这似乎不是一个很好的解决方案。
理想情况下,我想编写一些函数来获取现有权重,计算新权重,然后设置这些新权重,例如 d.W = func(d.W; args)
如您所见,Dense
结构被定义为不可变。但是,您仍然可以修改参数 d.W .= a
.
当d.W为普通矩阵时,使用d.W .= a
。
但是,当d.W是一个Tracked Matrix时,你需要做d.W.data .= a