Cannot compute gradient with `ArrayPartition` that holds containers of different types
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 48/100
Rechercherichtung
Beginnen Sie mit dem seed!-Einstiegspunkt in ForwardDiff/src/apiutils.jl und verwenden Sie den gemeldeten ArrayPartition-Reproduzierer mit gemischten Float64/Int64 als ersten Testfall. Verfolgen Sie, wie duale Seeds in jede Partition gebroadcastet werden, und ergänzen Sie eine Abdeckung für den fehlschlagenden Gradientenaufruf; als erledigt gilt dies, wenn das Beispiel den erwarteten Gradienten ohne einen MethodError zurückgibt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
ArrayPartition is a useful structure to concatenate arrays of different types. The type is defined in SciML/RecursiveArrayTools.jl
ArrayPartitions are also used in many places in SciML ecosystem, but also in other places like Manopt.jl.
It appears, though, that if ArrayPartition references two containers, one of eltype is Float64 and another one is Int64, the gradient from ForwardDiff fails.
MWE is:
julia> using ForwardDiff, RecursiveArrayTools
julia> v = [ 0.0, 1 ]
2-element Vector{Float64}:
0.0
1.0
julia> f(v) = sum(v)
f (generic function with 1 method)
julia> ForwardDiff.gradient(f, [ 0.0, 1 ])
2-element Vector{Float64}:
1.0
1.0
julia> ForwardDiff.gradient(f, ArrayPartition([ 0.0 ], [ 1 ]))
ERROR: MethodError: no method matching ForwardDiff.Dual{ForwardDiff.Tag{typeof(f), Float64}, Float64, 2}(::Int64, ::ForwardDiff.Partials{2, Float64})
Closest candidates are:
ForwardDiff.Dual{T, V, N}(::Number) where {T, V, N}
@ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:78
ForwardDiff.Dual{T, V, N}(::Any) where {T, V, N}
@ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:77
ForwardDiff.Dual{T, V, N}(::V, ::ForwardDiff.Partials{N, V}) where {T, V, N}
@ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/dual.jl:17
Stacktrace:
[1] _broadcast_getindex_evalf
@ ./broadcast.jl:709 [inlined]
[2] _broadcast_getindex
@ ./broadcast.jl:682 [inlined]
[3] getindex
@ ./broadcast.jl:636 [inlined]
[4] macro expansion
@ ./broadcast.jl:1004 [inlined]
[5] macro expansion
@ ./simdloop.jl:77 [inlined]
[6] copyto!
@ ./broadcast.jl:1003 [inlined]
[7] copyto!
@ ./broadcast.jl:956 [inlined]
[8] materialize!
@ ./broadcast.jl:914 [inlined]
[9] materialize!
@ ./broadcast.jl:911 [inlined]
[10] seed!(duals::ArrayPartition{…}, x::ArrayPartition{…}, seeds::Tuple{…})
@ ForwardDiff ~/.julia/packages/ForwardDiff/PcZ48/src/apiutils.jl:52
[11] vector_mode_dual_eval!
@ ~/.julia/packages/ForwardDiff/PcZ48/src/apiutils.jl:23 [inlined]
- Vorherrschende Sprache
- Julia
- Sterne
- 1k
- Forks
- 162
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus JuliaDiff/ForwardDiff.jl
-
missing floatmin, floatmax, and issubnormal for DualEvtl. vergeben @devmotion hat das vor 16 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
JuliaDiff/ForwardDiff.jl#852 · 6 Kommentare ·
-
`fma` and `muladd` ignore NaN-safe modeEvtl. vergeben @devmotion hat das vor 2 Tagen übernommen. Offen
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 55/100
JuliaDiff/ForwardDiff.jl#860 ·
-
Enable NaN-safe mode by defaultEvtl. vergeben @devmotion hat das vor 4 Tagen übernommen. Offen
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
JuliaDiff/ForwardDiff.jl#857 · 1 Reaktion ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 52/100
JuliaDiff/ForwardDiff.jl#854 · 1 Kommentar ·
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 75/100
JuliaDiff/ForwardDiff.jl#849 ·
Alle Issues in JuliaDiff/ForwardDiff.jl
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
JuliaGPU/KernelAbstractions.jl#897 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
oscar-system/GAP.jl#1455 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
JuliaAI/MLJTransforms.jl#85 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
SciML/OrdinaryDiffEq.jl#4875 ·
Maintainer antworten meist innerhalb von 4 Tagen