Code Monkey home page Code Monkey logo

Comments (4)

jrevels avatar jrevels commented on August 16, 2024

Hessians are slightly different - if you are using a DiffResult, you need to pass it to the HessianConfig. For example, this should work:

using DiffBase, ReverseDiff
f(x) = sum(sin, x)+prod(tan, x)*sum(sqrt, x);
x = rand(4);
result = DiffBase.HessianResult(x);
rcfg = ReverseDiff.HessianConfig(result, x); # let the HessianConfig know you'll be using `result`
ReverseDiff.hessian!(result, f, x, rcfg);
DiffBase.value(result)
DiffBase.gradient(result)
DiffBase.hessian(result)

This can be found in the tests, but isn't documented very well at all, and we don't have example code for it. The error message is also horrible.

We should document this better and provide examples. This might also be a case where we could easily add an informative error message. Alternatively, we might actually be able to allow HessianConfig(x) to work for the second example, though it would be a less efficient way to use the configuration API.

I'll keep this issue open, but rename it to reflect the actual problem (poor docs + examples + error message).

from reversediff.jl.

papamarkou avatar papamarkou commented on August 16, 2024

Thanks a lot @jrevels, I understand the API for Hessians better via your clarifications. I have one more question; it is highly likely I do sth wrong in what follows. When I try to use a tape in the above example, it then breaks:

using DiffBase, ReverseDiff
f(x) = sum(sin, x)+prod(tan, x)*sum(sqrt, x);
x = rand(4);
result = DiffBase.HessianResult(x);
rcfg = ReverseDiff.HessianConfig(result, x); # let the HessianConfig know you'll be using `result`
ftape = ReverseDiff.HessianTape(f, x);
cftape = ReverseDiff.compile(ftape);
ReverseDiff.hessian!(result, cftape, x, rcfg);
DiffBase.value(result)
DiffBase.gradient(result)
DiffBase.hessian(result)

from reversediff.jl.

jrevels avatar jrevels commented on August 16, 2024

ReverseDiff.hessian!(result, cftape, x, rcfg) should just be ReverseDiff.hessian!(result, cftape, x) (this is probably another thing that could be better documented/throw better errors).

from reversediff.jl.

papamarkou avatar papamarkou commented on August 16, 2024

Thanks @jrevels, I now follow the API.

from reversediff.jl.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.