在 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