julia - Actualizar manualmente los parámetros de capa en Flux

CorePress2024-01-25  10

¿Cómo configuro manualmente los pesos de una capa en Flux? Las capas son estructuras inmutables, por lo que no se pueden actualizar directamente:

> a = rand(Float64, (2, 3))
> d = Dense(3, 2, relu)
> d.W = a
ERROR: setfield! immutable struct of type Dense cannot be changed

¡La actualización! La función asume el uso de un gradiente. Si bien probablemente podría piratear una matriz de gradiente para usar la actualización (x, x̄), esa no parece una muy buena solución.

Lo ideal sería escribir alguna función que tome los pesos existentes, calcule nuevos pesos y luego establezca esos nuevos pesos, como d.W = func(d.W; args)

Si se trata de una simple red neuronal de retroalimentación en elCPU, puedes hacerlo fácilmente con getParam y setParam en el kit de herramientas BetaML.

-Antonello

28/03/2021 a las 19:32



------------------------------------

Como habrás notado, la estructura Densa se define como inmutable. Sin embargo, aún puedes modificar los parámetros con d.W .= a.



------------------------------------

Cuando d.W es una Matriz normal, utilice d.W .= a.

Sin embargo, cuando d.W es una matriz rastreada, es necesario hacer d.W.data .= a

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare