培训Julia文档中的CNF示例时出现错误消息

培训Julia文档中的CNF示例时出现错误消息,julia,Julia,Julia刚刚尝试运行在上提出的示例,使用sciml_train定义和训练一个连续的规范化流 我只是复制/粘贴了编写的代码,并得到以下错误: ERROR: MethodError: no method matching (::var"#5#7")(::Array{Float32,1}, ::Float32) 有人知道我为什么会犯这个错误吗?代码如下: nn = Chain(Dense(1, 3, tanh), Dense(3, 1, tanh)) tspan = (0.0f

Julia刚刚尝试运行在上提出的示例,使用sciml_train定义和训练一个连续的规范化流

我只是复制/粘贴了编写的代码,并得到以下错误:

ERROR: MethodError: no method matching (::var"#5#7")(::Array{Float32,1}, ::Float32)
有人知道我为什么会犯这个错误吗?代码如下:

nn = Chain(Dense(1, 3, tanh), Dense(3, 1, tanh))
tspan = (0.0f0,10.0f0)
ffjord_test = FFJORD(nn,tspan, Tsit5())
data_train = Float32.(rand(Normal(6.0,0.7), 1, 100))

function loss_adjoint(θ)
    logpx = ffjord_test(data_train,θ)[1]
    loss = -mean(logpx)
end

res1 = DiffEqFlux.sciml_train(loss_adjoint, ffjord_test.p, ADAM(0.1), cb = cb, maxiters = 100)

res2 = DiffEqFlux.sciml_train(loss_adjoint, res1.minimizer, LBFGS(), allow_f_increases = false)

谢谢

给定,错误消息似乎有点神秘,因为发出了
“#5#7”
,而不是方法的正确函数名,该函数名对于类型为
::Array{Float32,1},::Float32
的两个输入参数似乎无法调用

这可能是由于一些未正确定义的变量/符号,调用者假定这些变量/符号像函数一样可调用。调用方可能来自您正在使用的代码


在我看来,这一错误最可能的来源似乎是
res1=differqflux.sciml\u序列中的
cb
(损失伴随,ffjord\u test.p,ADAM(0.1),cb=cb,maxiters=100)
。它是“回调”的简写,假设是用户定义的函数,从
sciml\u train
中调用。与您从中获取示例的链接文档相比,我可以验证您的代码片段是否与那里的代码匹配。到目前为止,我还没有亲自测试过它,但您是否可以在定义
cb
函数或将其从函数调用中删除后立即检查错误是否消失?如果是这样的话,官方文档中就会有一个错误。

您必须注意回调函数

cb = function(p,l)
println("parameters p = $p \n loss l = $l")
return false
end

另请参见此

嗨,丹尼尔!实际上,问题来自cb()函数。运行没有参数cb的代码是可以的。我在文档中发现了一个使用sciml_序列的回调,如下所示:cb=(args…)->(false)。问题实际上是在关于CNF的文档中没有定义cb函数。