# Can't differentiate foreigncall expression

**URL:** <https://discourse.julialang.org/t/cant-differentiate-foreigncall-expression/56336>\
**Category:** Numerics\
**Tags:** question\
**Created:** [March 2, 2021, 2:35pm UTC](https://discourse.julialang.org/t/cant-differentiate-foreigncall-expression/56336 "2021-03-02T14:35:09Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![tzr7mm](https://avatars.discourse-cdn.com/v4/letter/t/59ef9b/32.png) [@tzr7mm](https://discourse.julialang.org/u/tzr7mm)\
**Post date:** [March 2, 2021, 2:35pm UTC](https://discourse.julialang.org/t/cant-differentiate-foreigncall-expression/56336/1 "2021-03-02T14:35:09Z")

</div>

Trying to use Flux’s automatic differentiation to solve a toy PINN problem below but keep getting the following error and its traceback. When using manually differentiated field term it works fine but not with auto-diff.  
Here is the error traceback:  
“”"  
_Can’t differentiate foreigncall expression_  
error(::String) at error.jl:33  
get at iddict.jl:87 [inlined]  
(::typeof(∂(get)))(::Nothing) at interface2.jl:0  
accum\_global at lib.jl:56 [inlined]  
(::typeof(∂(accum\_global)))(::Nothing) at interface2.jl:0  
#89 at lib.jl:67 [inlined]  
(::typeof(∂(λ)))(::Nothing) at interface2.jl:0  
#1550#back at adjoint.jl:59 [inlined]  
(::typeof(∂(λ)))(::Nothing) at interface2.jl:0  
getindex at tuple.jl:24 [inlined]  
gradindex at reverse.jl:12 [inlined]  
(::typeof(∂(λ)))(::Tuple{Nothing,Float64}) at interface2.jl:0  
#41 at interface.jl:40 [inlined]  
(::typeof(∂(λ)))(::Tuple{Float64}) at interface2.jl:0  
gradient at interface.jl:49 [inlined]  
(::typeof(∂(gradient)))(::Tuple{Float64}) at interface2.jl:0  
#31 at pinn2.jl:12 [inlined]  
(::typeof(∂(#31)))(::Tuple{Float64}) at interface2.jl:0  
#33 at none:0 [inlined]  
(::typeof(∂(#33)))(::Float64) at interface2.jl:0  
iterate at generator.jl:47 [inlined]  
(::typeof(∂(iterate)))(::Tuple{Float64,Nothing}) at interface2.jl:0  
mean at Statistics.jl:76 [inlined]  
(::typeof(∂(mean)))(::Float64) at interface2.jl:0  
mean at Statistics.jl:44 [inlined]  
loss at pinn2.jl:17 [inlined]  
(::typeof(∂(loss)))(::Float64) at interface2.jl:0  
#150 at lib.jl:191 [inlined]  
#1693#back at adjoint.jl:59 [inlined]  
#14 at train.jl:83 [inlined]  
(::Zygote.var"#54#55"{Zygote.Params,Zygote.Context,typeof(∂(#14))})(::Float64) at interface.jl:172  
gradient(::Function, ::Zygote.Params) at interface.jl:49  
macro expansion at train.jl:82 [inlined]  
macro expansion at progress.jl:119 [inlined]  
train!(::Function, ::Zygote.Params, ::Base.Iterators.Take{Base.Iterators.Repeated{Tuple{}}}, ::Descent; cb::var"#23#24") at train.jl:80  
(::Flux.Optimise.var"#train!##kw")(::NamedTuple{(:cb,),Tuple{var"#23#24"}}, ::typeof(Flux.Optimise.train!), ::Function, ::Zygote.Params, ::Base.Iterators.Take{Base.Iterators.Repeated{Tuple{}}}, ::Descent) at train.jl:78  
top-level scope at pinn2.jl:31

“”"

and here is the code (with the manually differentiated line for g\_grad commented out  
“”"  
using Flux  
using Statistics

NNODE = Chain(x → , # Take in a scalar and transform it into an array  
Dense(1,32,tanh),  
Dense(32,1),  
first) # Take first value, i.e. return a scalar  
NNODE(0.5)

g = t → t\*NNODE(t) + 1f0

g\_grad = t → gradient(g,t)  
ϵ = sqrt(eps(Float32))  
#g\_grad = t → (g(t+ϵ)-g(t))/ϵ

#loss() = mean(abs2(g\_grad(t)[1] - cos(2π_t)) for t in 0:0.01:1.0)  
loss() = mean(abs2(g\_grad(t)[1]-cos(2π_t)) for t in 0:1f-2:1f0)  
#loss() = mean(abs2(((g(t+ϵ)-g(t))/ϵ) - cos(2π\*t)) for t in 0:1f-2:1f0)

opt = Flux.Descent(0.01)  
data = Iterators.repeated((), 5000)

iter = 0  
cb = function () #callback function to observe training  
global iter += 1  
if iter % 50 == 0  
display(loss())  
end  
end  
display(loss())  
Flux.train!(loss, Flux.params(NNODE), data, opt, cb=cb)  
“”"  
I know this shouldn’t be an issue - but I don’t know what I am doing wrong. Any help would be appreciated. Thanks

---

<div class="post-metadata">

**Author:** ![BMval](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bmval/32/7647_2.png) [@BMval](https://discourse.julialang.org/u/BMval)\
**Post date:** [February 13, 2022, 1:57am UTC](https://discourse.julialang.org/t/cant-differentiate-foreigncall-expression/56336/2 "2022-02-13T01:57:47Z")

</div>

Did you find the solution?
