Custom `rrule` not working with ReverseDiff
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
Línea de trabajo
Comienza con el ejemplo mínimo de Julia del issue y ejecuta la llamada a ReverseDiff.gradient mientras compruebas si se alcanza la ChainRulesCore.rrule personalizada o @scalar_rule. Rastrea la interacción entre ReverseDiff y ChainRules, y considera resuelto el issue cuando se hayan establecido la causa de que se ignoren las reglas y el comportamiento compatible.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Hello everyone,
First off, thank you all for your work on ReverseDiff.
I'm not sure whether this issue belongs here on in the ChainRules repo, so forgive me if it's not relevant here.
I have tried defining my own pullback using ChainRules, which claims to be compatible with ReverseDiff.
However, my attempts so far have been unsuccesful.
As a minimal example, take
using ChainRules, ChainRulesCore, ReverseDiff, Plots
function new_gradient(x)
return conj((abs(x / 2) + 1)^(-2))
end
function H(a)
return (sign(a) + 1) / 2
end
function ϕ(x)
return H(x[1])
end
@scalar_rule ϕ(x) new_gradient(x)
function ChainRulesCore.rrule(::typeof(ϕ), x::AbstractArray)
y = ϕ.(x)
function array_ϕ_pullback(ȳ)
println("Test.")
ϕ̄ = NoTangent()
x̄ = @thunk new_gradient.(x) * ȳ
return ϕ̄, x̄
end
return y, array_ϕ_pullback
end
gradplot = let
xs = -5:0.01:5
vals = [ϕ(x) for x in xs]
grads = [ReverseDiff.gradient(ϕ, [x]) for x in xs]
p = plot(xs, vals, label = "ϕ")
plot!(p, xs, getindex.(grads, 1), label = "∇ϕ")
p
end
My own rrules are never called.
Have I made an elementary mistake here, or is this actually a problem with ChainRules?
- Lenguaje dominante
- Julia
- Estrellas
- 397
- Forks
- 62
- Merge medio
- 6 h 46 min
- PR fusionados (30 d)
- 5
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de JuliaDiff/ReverseDiff.jl
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
JuliaDiff/ReverseDiff.jl#318 ·
-
`@grad`/`@grad_from_chainrules` silently reuse a tangent if a pullback returns too few tangentsAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
JuliaDiff/ReverseDiff.jl#315 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
JuliaDiff/ReverseDiff.jl#314 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 56/100
JuliaDiff/ReverseDiff.jl#321 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 72/100
JuliaDiff/ReverseDiff.jl#320 ·
Todos los issues de JuliaDiff/ReverseDiff.jl
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
Add project: Typst_jll.jlPosiblemente ocupada @github-actions la tomó hace 1 día. Abiertoadd-project
Dificultad 1/5 Menos de una hora Aptitud para principiantes 76/100
YDX-2147483647/best-of-typst#590 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100