This is with Flux 0.9, Julia1.3
Meta comment: Julia looks amazing. I keep coming back to it, but everything I try does not seem to work. Bad beginner luck.
1a) This example I want to work. It should find [0,0] as the solution to the bottom of z=x^2 + y^2, but it give an error “back!
was already used”
using Flux, Tracker
p = param([0.3, -0.7])
for i=1:5
global p
theloss = sum(p .* p)
Tracker.back!(theloss) # `back!` was already used
p = p - 0.05 * Tracker.grad(p)
println(i," ",p)
end
1b) In this version gradient returns something that does not seem to be a gradient,
also nor a function that can be called to obtain a gradient. I also tried many other variations. But a solution to 1a) above is enough. This is just to show that other things were tried.
p = param([0.3, -0.7])
theloss(p) = sum(p .* p)
for i=1:5
global p
p = p - 0.05 * gradient(theloss,p)
println(i," ",p)
end
- Here, we want to get the gradient with respect to only the first parameter to the function, because the second parameter is not numeric.
f(x,path) = x^2 # path is some other variable, e.g. a string
gradient(f,1) # no method matching f with a single parameter
gradient(f,1,"foo") # no method matching param(String)