学习 Julia 元编程以通过表达式自动构建 ANN。虽然一切都适用于推理,但后退阶段会引发错误:
LoadError:无法区分foreigncall表达式
下一个代码显示了问题出现的位置。虽然 eval(net(x)) 运行良好,但由于某种原因,它在梯度计算阶段引发了错误。
# define ANN by expression
net(x) = :($w2 * relu.($w1 * $x .+ $b1) .+ $b2)
# define loss and network evaluation
loss(x, y) = Flux.logitcrossentropy(eval(net(x)), y)
θ = Flux.Params([w1, b1, w2, b2])
# eval network and calculate gradients
gs = gradient(() -> loss(features, labels), θ) # where the problem appears