types - 如何使用 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])
推荐阅读
- lisp - 赋予与命令同名的变量会使应用程序崩溃
- arrays - 程序“返回”并在循环中使用 2d 字符数组指针退出?
- java - Quarkus Swagger UI 无法在 Kubernetes 上运行
- c# - C#从datagridview填充excel直到到达某一列
- c# - 应用程序在尝试访问硬盘驱动器上的文件时挂起
- python - 批量提交snakemake作业
- r - 加载库 R 后找不到函数
- python - python pandas可在掩码中调用/对每个条目重新计算
- java - 如何使用 JPA 创建本地数据库?
- javascript - Fetch 调用卡在 promise 上并且永远不会返回