{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/neural-controlled-differential-equations-for","title":"Neural Controlled Differential Equations for Irregular Time Series","arxiv_id":"2005.08926","date":"2020-05-18","proceeding":"NeurIPS 2020 12","authors":["Patrick Kidger","James Morrill","James Foster","Terry Lyons"],"abstract":"Neural ordinary differential equations are an attractive option for modelling temporal dynamics. However, a fundamental issue is that the solution to an ordinary differential equation is determined by its initial condition, and there is no mechanism for adjusting the trajectory based on subsequent observations. Here, we demonstrate how this may be resolved through the well-understood mathematics of \\emph{controlled differential equations}. The resulting \\emph{neural controlled differential equation} model is directly applicable to the general setting of partially-observed irregularly-sampled multivariate time series, and (unlike previous work on this problem) it may utilise memory-efficient adjoint-based backpropagation even across observations. We demonstrate that our model achieves state-of-the-art performance against similar (ODE or RNN based) models in empirical studies on a range of datasets. Finally we provide theoretical results demonstrating universal approximation, and that our model subsumes alternative ODE models.","url_abs":"https://arxiv.org/abs/2005.08926v2","url_pdf":"https://arxiv.org/pdf/2005.08926v2.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"neural-controlled-differential-equations-for","repo_url":"https://github.com/patrick-kidger/NeuralCDE","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}},{"paper_slug":"neural-controlled-differential-equations-for","repo_url":"https://github.com/dungxibo123/NeuralCDE","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}},{"paper_slug":"neural-controlled-differential-equations-for","repo_url":"https://github.com/google-research/torchsde","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"neural-controlled-differential-equations-for","repo_url":"https://github.com/patrick-kidger/FasterNeuralDiffEq","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"neural-controlled-differential-equations-for","repo_url":"https://github.com/philipdarke/torchtime","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"irregular-time-series","task_name":"Irregular Time Series"},{"task_slug":"time-series-1","task_name":"Time Series"},{"task_slug":"time-series","task_name":"Time Series Analysis"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2005.08926","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2005.08926"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"deterministic:regex_extraction","url":"https://github.com/patrick-kidger/NeuralCDE","reach":{"status":"ok","spdx":"Apache-2.0"}},{"provenance":"deterministic:regex_extraction","url":"https://github.com/patrick-kidger/torchcde","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/google-research/torchsde","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/philipdarke/torchtime","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/patrick-kidger/FasterNeuralDiffEq","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/dungxibo123/NeuralCDE","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran":1,"ran_draft_wrong":1,"ran_fixture":1,"ran_violates":1,"unverified":16},"by_repo_kind":{"official":{"samples":6,"ran":0,"repositories":1},"listed":{"samples":12,"ran":2,"repositories":3}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":2,"samples":[{"code_sha256_prefix":"a4dafc84cbeb2bb5","entry":"cdeint","repo":"dungxibo123/NeuralCDE","repo_kind":"listed","path":"controldiffeq/cdeint_module.py","file_url":"https://github.com/dungxibo123/NeuralCDE/blob/HEAD/controldiffeq/cdeint_module.py","link_basis":"plan_row","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a4dafc84cbeb2bb5"}},{"code_sha256_prefix":"582d465aad5dd543","entry":"get_data","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"582d465aad5dd543"}},{"code_sha256_prefix":"bd70944e548b69cd","entry":"parse_return","repo":"google-research/torchsde","repo_kind":"listed","path":"torchsde/_core/sdeint.py","file_url":"https://github.com/google-research/torchsde/blob/HEAD/torchsde/_core/sdeint.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"bd70944e548b69cd"}},{"code_sha256_prefix":"6a904c09f82ab220","entry":"str2bool","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"6a904c09f82ab220"}},{"code_sha256_prefix":"95c5d0ccacb5efc4","entry":"GRU_ODE","repo":"dungxibo123/NeuralCDE","repo_kind":"listed","path":"experiments/models/vector_fields.py","file_url":"https://github.com/dungxibo123/NeuralCDE/blob/HEAD/experiments/models/vector_fields.py","link_basis":"plan_row","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"95c5d0ccacb5efc4"}},{"code_sha256_prefix":"f3fd7f081ad2b0ac","entry":"cheap_stack","repo":"patrick-kidger/NeuralCDE","repo_kind":"official","path":"controldiffeq/misc.py","file_url":"https://github.com/patrick-kidger/NeuralCDE/blob/HEAD/controldiffeq/misc.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f3fd7f081ad2b0ac"}},{"code_sha256_prefix":"e6f3ab1566910024","entry":"check_contract","repo":"google-research/torchsde","repo_kind":"listed","path":"torchsde/_core/sdeint.py","file_url":"https://github.com/google-research/torchsde/blob/HEAD/torchsde/_core/sdeint.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"e6f3ab1566910024"}},{"code_sha256_prefix":"3d00ef924475de36","entry":"dataloader","repo":"patrick-kidger/NeuralCDE","repo_kind":"official","path":"experiments/datasets/common.py","file_url":"https://github.com/patrick-kidger/NeuralCDE/blob/HEAD/experiments/datasets/common.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"3d00ef924475de36"}},{"code_sha256_prefix":"3588c9b656c72587","entry":"dataloader","repo":"dungxibo123/NeuralCDE","repo_kind":"listed","path":"experiments/datasets/common.py","file_url":"https://github.com/dungxibo123/NeuralCDE/blob/HEAD/experiments/datasets/common.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"3588c9b656c72587"}},{"code_sha256_prefix":"ff96c7be4662524f","entry":"evaluate_loss","repo":"google-research/torchsde","repo_kind":"listed","path":"examples/sde_gan.py","file_url":"https://github.com/google-research/torchsde/blob/HEAD/examples/sde_gan.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"ff96c7be4662524f"}},{"code_sha256_prefix":"13f770aeadd69af7","entry":"forward_impute","repo":"philipdarke/torchtime","repo_kind":"listed","path":"src/torchtime/impute.py","file_url":"https://github.com/philipdarke/torchtime/blob/HEAD/src/torchtime/impute.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"13f770aeadd69af7"}},{"code_sha256_prefix":"9ecdee7c3249e7c8","entry":"natural_cubic_spline_coeffs","repo":"patrick-kidger/NeuralCDE","repo_kind":"official","path":"controldiffeq/interpolate.py","file_url":"https://github.com/patrick-kidger/NeuralCDE/blob/HEAD/controldiffeq/interpolate.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"9ecdee7c3249e7c8"}},{"code_sha256_prefix":"b9dfe82fa3003be5","entry":"normalise_data","repo":"patrick-kidger/NeuralCDE","repo_kind":"official","path":"experiments/datasets/common.py","file_url":"https://github.com/patrick-kidger/NeuralCDE/blob/HEAD/experiments/datasets/common.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"b9dfe82fa3003be5"}},{"code_sha256_prefix":"aceed8741052218d","entry":"normalise_data","repo":"dungxibo123/NeuralCDE","repo_kind":"listed","path":"experiments/datasets/common.py","file_url":"https://github.com/dungxibo123/NeuralCDE/blob/HEAD/experiments/datasets/common.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"aceed8741052218d"}},{"code_sha256_prefix":"d01650eee408e749","entry":"packed_sequence","repo":"philipdarke/torchtime","repo_kind":"listed","path":"src/torchtime/collate.py","file_url":"https://github.com/philipdarke/torchtime/blob/HEAD/src/torchtime/collate.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"d01650eee408e749"}},{"code_sha256_prefix":"a1971b5815c2fc7a","entry":"replace_missing","repo":"philipdarke/torchtime","repo_kind":"listed","path":"src/torchtime/impute.py","file_url":"https://github.com/philipdarke/torchtime/blob/HEAD/src/torchtime/impute.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a1971b5815c2fc7a"}},{"code_sha256_prefix":"9828f771a54b575c","entry":"sort_by_length","repo":"philipdarke/torchtime","repo_kind":"listed","path":"src/torchtime/collate.py","file_url":"https://github.com/philipdarke/torchtime/blob/HEAD/src/torchtime/collate.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"9828f771a54b575c"}},{"code_sha256_prefix":"39ae76dc29320765","entry":"split_data","repo":"patrick-kidger/NeuralCDE","repo_kind":"official","path":"experiments/datasets/common.py","file_url":"https://github.com/patrick-kidger/NeuralCDE/blob/HEAD/experiments/datasets/common.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"39ae76dc29320765"}},{"code_sha256_prefix":"a5ee2b2e1aa03e18","entry":"split_data","repo":"dungxibo123/NeuralCDE","repo_kind":"listed","path":"experiments/datasets/common.py","file_url":"https://github.com/dungxibo123/NeuralCDE/blob/HEAD/experiments/datasets/common.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a5ee2b2e1aa03e18"}},{"code_sha256_prefix":"bd529c79265ef41b","entry":"tridiagonal_solve","repo":"patrick-kidger/NeuralCDE","repo_kind":"official","path":"controldiffeq/misc.py","file_url":"https://github.com/patrick-kidger/NeuralCDE/blob/HEAD/controldiffeq/misc.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"bd529c79265ef41b"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}