【发布时间】:2021-05-19 15:11:05
【问题描述】:
我目前正在完成 Julia 语言 (https://tutorials.sciml.ai/html/exercises/01-workshop_exercises.html) 的 SciML 教程研讨会练习。具体来说,我坚持练习 6 第 3 部分,其中涉及训练神经网络以逼近方程组
function lotka_volterra(du,u,p,t)
x, y = u
α, β, δ, γ = p
du[1] = dx = α*x - β*x*y
du[2] = dy = -δ*y + γ*x*y
end
目标是用神经网络替换 du[2] 的方程:du[2] = NN(u, p)
其中 NN 是一个神经网络,参数为p,输入为u。
我有一组网络应该尝试匹配的样本数据。损失函数是网络模型输出与样本数据的平方差。
我定义了我的网络
NN = Chain(Dense(2,30), Dense(30, 1))。我可以让Flux.train! 运行,但问题是有时神经网络的初始参数会导致 10^20 量级的损失,因此训练永远不会收敛。我的最佳尝试是使用 ADAM 优化器在大约 1000 次迭代中将损失从最初的大约 2000 降低到大约 20,但我似乎无法做得更好。
如何确保我的网络始终可训练,有没有办法更好地收敛?
【问题讨论】:
标签: neural-network differentialequations.jl flux-machine-learning