如何使用 Flux.jl 绘制函数及其 gradient/derivative
How to plot a function and its gradient/derivative using Flux.jl
我想使用 Flux.jl
和 Plots.jl
绘制函数及其梯度
using Flux.Tracker
using Plots
f(x::Float64) = 3x^2 + 2x + 1
df(x::Float64) = Tracker.gradient(f, x)[1]
d2f(x::Float64) = Tracker.gradient(df, x)[1]
plot([f], -2, 2)
plot!([df], -2, 2)
我得到:
ERROR: LoadError: MethodError: no method matching Float64(::Flux.Tracker.TrackedReal{Float64})
Closest candidates are:
Float64(::Real, ::RoundingMode) where T<:AbstractFloat at rounding.jl:194
Float64(::T<:Number) where T<:Number at boot.jl:741
Float64(::Int8) at float.jl:60
所以我想这个想法是将 Flux.Tracker.TrackedReal{Float64}
转换为 Float64
。我该怎么做?
您可以使用以下(在 Flux 0.8.3 下):
f(x::Float64) = 3x^2 + 2x + 1
df(x::Float64) = Tracker.data(Tracker.gradient(f, x, nest=true)[1])
d2f(x::Float64) = Tracker.data(Tracker.gradient(df, x, nest=true)[1])
我想使用 Flux.jl
和 Plots.jl
using Flux.Tracker
using Plots
f(x::Float64) = 3x^2 + 2x + 1
df(x::Float64) = Tracker.gradient(f, x)[1]
d2f(x::Float64) = Tracker.gradient(df, x)[1]
plot([f], -2, 2)
plot!([df], -2, 2)
我得到:
ERROR: LoadError: MethodError: no method matching Float64(::Flux.Tracker.TrackedReal{Float64})
Closest candidates are:
Float64(::Real, ::RoundingMode) where T<:AbstractFloat at rounding.jl:194
Float64(::T<:Number) where T<:Number at boot.jl:741
Float64(::Int8) at float.jl:60
所以我想这个想法是将 Flux.Tracker.TrackedReal{Float64}
转换为 Float64
。我该怎么做?
您可以使用以下(在 Flux 0.8.3 下):
f(x::Float64) = 3x^2 + 2x + 1
df(x::Float64) = Tracker.data(Tracker.gradient(f, x, nest=true)[1])
d2f(x::Float64) = Tracker.data(Tracker.gradient(df, x, nest=true)[1])