DimensionMismatch error
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 30/100
Línea de trabajo
Comienza ejecutando el ejemplo de ODE proporcionado con las versiones indicadas de DifferentialEquations, DiffEqSensitivity, ForwardDiff y ReverseDiff, centrándote en las llamadas a ReverseDiff.jacobian y gradient. Compara el error completo del gist enlazado con los casos funcionales de ForwardDiff y Zygote; se considera completado cuando se haya identificado si la discrepancia se debe a un error de ReverseDiff o a una incompatibilidad entre paquetes, y se haya capturado un reproductor mínimo.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
I asked this question in the #autodiff channel on Slack but haven't found out if I'm doing something wrong, hitting a bug in ReverseDiff, or hitting an incompatibility with DifferentialEquations.
I’m trying to differentiate through a system of ODEs. The function F returns simulations F(x) and I’m trying to obtain the product J(x)*u and J(x)ᵀ*v where J is the Jacobian of F. It works with ForwardDiff, but ReverseDiff throws an error…
using DifferentialEquations, DiffEqSensitivity, ForwardDiff, ReverseDiff
function ODE(dx, x, p, t)
V, W = x
I, μ, a, b, c = p
dx[1] = (V - V^3 / 3 - W + I) / μ
dx[2] = μ * (a * V - b * W + c)
end
prob = ODEProblem(ODE, [2.0; 0.0], (0.0, 20.0), [0.5, 0.08, 1.0, 0.8, 0.7])
function F(x)
temp_prob = remake(prob, p = x)
sol = solve(temp_prob, Vern9(), saveat = 0.2)
return vec(sol)
end
jprod_fwd(f, x, u) = ForwardDiff.derivative(t -> f(x + t * u), 0)
jprod_fwd(F, rand(5), rand(5)) # works
jprod_rev(f, x, u) = ReverseDiff.jacobian(t -> f(x + t[1] * u), [zero(eltype(x))])
jprod_rev(F, rand(5), rand(5)) # throws DimensionMismatch ?!
jtprod_rev(f, x, u) = ReverseDiff.gradient(z -> dot(f(z), u), x)
jtprod_rev (generic function with 1 method)
jtprod_rev(F, rand(5), rand(202))
ERROR: DimensionMismatch("arrays could not be broadcast to a common size; got a dimension with lengths 5 and 6")
Here is the full error message: https://gist.github.com/7544d5c680995d4634cab19a2cdccfd6
pkg> status
Status `~/dev/julia/BLA/myenv/Project.toml`
[41bf760c] DiffEqSensitivity v6.57.0
[0c46a032] DifferentialEquations v6.18.0
[f6369f11] ForwardDiff v0.10.19
[37e2e3b7] ReverseDiff v1.9.0
Many thanks in advance!
ps: I am aware that using ReverseDiff for J(x)*u isn't the most efficient in many cases, but it should work. It works with Zygote.
- Lenguaje dominante
- Julia
- Estrellas
- 397
- Forks
- 62
- Merge medio
- 12 h 50 min
- PR fusionados (30 d)
- 8
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 1/5 Menos de una hora Aptitud para principiantes 68/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
bmad-sim/BeamTracking.jl#382 ·
Los mantenedores suelen responder en 1 día
-
Typo in the Adjoint sectionAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 86/100
-
Using the test generatorAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día