JuliaDiff / JuliaDiff/ForwardDiff.jl
Gradients with respect to struct fields?
Open
Nobody has claimed this yet.
- Dominant language
- Julia
- Stars
- 1k
- Forks
- 160
- PR merge metrics
- No merged PRs in 30d
Description
In Zygote.jl, we can take the gradient with respect to all fields of a struct foo passed through a function bar via
g = Zygote.gradient(f -> bar(f), foo)
Can this be done in ForwardDiff as well?
Reproducer:
using Zygote
using ForwardDiff
struct Foo
x::Number
t::Number
c::Number
end
function bar(f::Foo)
return f.x - f.c*f.t
end
foo = Foo(2, 3, 3e8)
println(foo)
g = Zygote.gradient(f -> bar(f), foo)
println(g)
g = ForwardDiff.gradient(f -> bar(f), foo)
println(g)
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Run the supplied Julia reproducer, comparing Zygote.gradient and ForwardDiff.gradient for bar and Foo. Read the ForwardDiff.gradient and Zygote.gradient entry points to determine how struct fields are handled; done should be a tested, clearly documented answer about supporting gradients over Foo fields or the limitation.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- julia
- Domain
- tooling
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100