Как DiffEqFlux.sciml_train работает для нейронных ODE в Julia?

У меня общий вопрос о том, как обучаются Neural ODE Nets в Julia. Выбираются ли точки данных из tspan, на котором определено Nural ODE, и по ним вычисляются обновления параметров? Другими словами, происходит ли какое-то перемешивание и пакетирование во время обучения, или потери вычисляются по всем точкам данных в tspan?

2 ответа

Параметры оптимизированы в соответствии с минимизацией функции потерь. Так что вам решать, как происходит выборка в функции потерь. Обычно можно сравнивать выходные данные с дискретными точками данных, и в этом случае они становятся вашими дискретными точками.

Но neuralODE с этим не справляется - вы. Это функция потерь

Я нашел ответ о том, что здесь делает Джулия: https://github.com/JuliaDiffEq/DiffEqFlux.jl/blob/master/src/train.jl.

    "Optimizes the `loss(θ,curdata...)` function with respect to the parameter vector
`θ` iterating over the `data`. By default the data iterator is empty, i.e.
`loss(θ)` is used. The first output of the loss function is considered the loss.
Extra outputs are passed to the callback."

Я думаю, что для пакетной обработки нужно выбрать точки данных, а затем запустить на них Flux.train в цикле, передавая в качестве входных данных точки пакетных данных.

Другие вопросы по тегам