# Matrix Free transpose jacobian using AD

**URL:** <https://discourse.julialang.org/t/matrix-free-transpose-jacobian-using-ad/32511>\
**Category:** General Usage\
**Tags:** forward\
**Created:** [December 20, 2019, 2:00pm UTC](https://discourse.julialang.org/t/matrix-free-transpose-jacobian-using-ad/32511 "2019-12-20T14:00:03Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![rveltz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rveltz/32/2707_2.png) [@rveltz](https://discourse.julialang.org/u/rveltz)\
**Post date:** [December 20, 2019, 2:00pm UTC](https://discourse.julialang.org/t/matrix-free-transpose-jacobian-using-ad/32511/1 "2019-12-20T14:00:03Z")

</div>

Hi,

I would like to evaluate the **transpose** of the jacobian of a function `F` using `ForwardDiff.jl` or any AD. Is it possible? I read that reverse mode would provide this but failed to achieve this using `ReverseDiff.jl`.

I know I can evaluate the matrix-free jacobian using `ForwardDiff.derivative(t -> F(x .+ t .* dx), 0.)`

Thank you for your suggestions,

Best regards

---

<div class="post-metadata">

**Author:** ![mohamed82008](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mohamed82008/32/18171_2.png) [@mohamed82008](https://discourse.julialang.org/u/mohamed82008)\
**Post date:** [December 20, 2019, 2:14pm UTC](https://discourse.julialang.org/t/matrix-free-transpose-jacobian-using-ad/32511/2 "2019-12-20T14:14:47Z")

</div>

There is `ForwardDiff.jacobian`.

```julia
julia> ForwardDiff.jacobian(identity, zeros(2))
2×2 Array{Float64,2}:
 1.0 0.0
 0.0 1.0

```

---

<div class="post-metadata">

**Author:** ![antoine-levitt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/antoine-levitt/32/4008_2.png) [@antoine-levitt](https://discourse.julialang.org/u/antoine-levitt)\
**Post date:** [December 20, 2019, 2:36pm UTC](https://discourse.julialang.org/t/matrix-free-transpose-jacobian-using-ad/32511/3 "2019-12-20T14:36:33Z")

</div>

Reverse diff is indeed the way to go if you don’t want to form the whole matrix. Try Zygote.

---

<div class="post-metadata">

**Author:** ![rveltz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rveltz/32/2707_2.png) [@rveltz](https://discourse.julialang.org/u/rveltz)\
**Post date:** [December 20, 2019, 2:46pm UTC](https://discourse.julialang.org/t/matrix-free-transpose-jacobian-using-ad/32511/4 "2019-12-20T14:46:52Z")

</div>

Sorry I cannot form the jacobian as it is way to big. I just want its action on a vector

---

<div class="post-metadata">

**Author:** ![rveltz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rveltz/32/2707_2.png) [@rveltz](https://discourse.julialang.org/u/rveltz)\
**Post date:** [December 20, 2019, 2:47pm UTC](https://discourse.julialang.org/t/matrix-free-transpose-jacobian-using-ad/32511/5 "2019-12-20T14:47:43Z")

</div>

> [@antoine-levitt](#):
>
> Reverse diff is indeed the way to go if you don’t want to form the whole matrix

I was hoping for a simple example, do you know how to do it?

---

<div class="post-metadata">

**Author:** ![mohamed82008](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mohamed82008/32/18171_2.png) [@mohamed82008](https://discourse.julialang.org/u/mohamed82008)\
**Post date:** [December 20, 2019, 2:54pm UTC](https://discourse.julialang.org/t/matrix-free-transpose-jacobian-using-ad/32511/6 "2019-12-20T14:54:49Z")

</div>

You mean `(f, x, v) -> Tracker.gradient(x -> dot(v, f(x)), x)`? This is equal to the transpose of the Jacobian of `f` at `x` multiplied by `v`.

---

<div class="post-metadata">

**Author:** ![rveltz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rveltz/32/2707_2.png) [@rveltz](https://discourse.julialang.org/u/rveltz)\
**Post date:** [December 20, 2019, 3:10pm UTC](https://discourse.julialang.org/t/matrix-free-transpose-jacobian-using-ad/32511/7 "2019-12-20T15:10:23Z")

</div>

Thank you!

---

<div class="post-metadata">

**Author:** ![mohamed82008](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mohamed82008/32/18171_2.png) [@mohamed82008](https://discourse.julialang.org/u/mohamed82008)\
**Post date:** [December 20, 2019, 4:35pm UTC](https://discourse.julialang.org/t/matrix-free-transpose-jacobian-using-ad/32511/8 "2019-12-20T16:35:43Z")

</div>

No worries 🙂
