{"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/ot-flow-fast-and-accurate-continuous","title":"OT-Flow: Fast and Accurate Continuous Normalizing Flows via Optimal Transport","arxiv_id":"2006.00104","date":"2020-05-29","proceeding":null,"authors":["Derek Onken","Samy Wu Fung","Xingjian Li","Lars Ruthotto"],"abstract":"A normalizing flow is an invertible mapping between an arbitrary probability distribution and a standard normal distribution; it can be used for density estimation and statistical inference. Computing the flow follows the change of variables formula and thus requires invertibility of the mapping and an efficient way to compute the determinant of its Jacobian. To satisfy these requirements, normalizing flows typically consist of carefully chosen components. Continuous normalizing flows (CNFs) are mappings obtained by solving a neural ordinary differential equation (ODE). The neural ODE's dynamics can be chosen almost arbitrarily while ensuring invertibility. Moreover, the log-determinant of the flow's Jacobian can be obtained by integrating the trace of the dynamics' Jacobian along the flow. Our proposed OT-Flow approach tackles two critical computational challenges that limit a more widespread use of CNFs. First, OT-Flow leverages optimal transport (OT) theory to regularize the CNF and enforce straight trajectories that are easier to integrate. Second, OT-Flow features exact trace computation with time complexity equal to trace estimators used in existing CNFs. On five high-dimensional density estimation and generative modeling tasks, OT-Flow performs competitively to state-of-the-art CNFs while on average requiring one-fourth of the number of weights with an 8x speedup in training time and 24x speedup in inference.","url_abs":"https://arxiv.org/abs/2006.00104v5","url_pdf":"https://arxiv.org/pdf/2006.00104v5.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":"ot-flow-fast-and-accurate-continuous","repo_url":"https://github.com/EmoryMLIP/OT-Flow","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"ot-flow-fast-and-accurate-continuous","repo_url":"https://github.com/emorymlip/cot-flow","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"ot-flow-fast-and-accurate-continuous","repo_url":"https://github.com/mines-opt-ml/JKO_Flow","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[{"task_slug":"density-estimation","task_name":"Density Estimation"}],"methods":[{"method_slug":"normalizing-flows","method_name":"Normalizing Flows"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2006.00104","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2006.00104"}},"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":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/mines-opt-ml/JKO_Flow","reach":{"status":"ok"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/emorymlip/cot-flow","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/EmoryMLIP/OT-Flow","reach":null}],"summary":{"ran_draft_wrong":2,"ran_honours":1,"unverified":2},"by_repo_kind":{"official":{"samples":1,"ran":0,"repositories":1},"listed":{"samples":4,"ran":3,"repositories":1}},"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":0,"samples":[{"code_sha256_prefix":"41c44754ed5abfbf","entry":"OTFlowProblem","repo":"emorymlip/cot-flow","repo_kind":"listed","path":"src/OTFlowProblem.py","file_url":"https://github.com/emorymlip/cot-flow/blob/HEAD/src/OTFlowProblem.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"41c44754ed5abfbf"}},{"code_sha256_prefix":"16f3649fecc2628c","entry":"stepRK4","repo":"emorymlip/cot-flow","repo_kind":"listed","path":"src/OTFlowProblem.py","file_url":"https://github.com/emorymlip/cot-flow/blob/HEAD/src/OTFlowProblem.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"16f3649fecc2628c"}},{"code_sha256_prefix":"42222c5c6465f835","entry":"vec","repo":"emorymlip/cot-flow","repo_kind":"listed","path":"src/OTFlowProblem.py","file_url":"https://github.com/emorymlip/cot-flow/blob/HEAD/src/OTFlowProblem.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"42222c5c6465f835"}},{"code_sha256_prefix":"9c917e40239330dc","entry":"compute_loss","repo":"emorymlip/cot-flow","repo_kind":"listed","path":"evaluateTabularOTflowCond.py","file_url":"https://github.com/emorymlip/cot-flow/blob/HEAD/evaluateTabularOTflowCond.py","link_basis":"first_harvest_node","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":"9c917e40239330dc"}},{"code_sha256_prefix":"fa06178561e307d5","entry":"compute_loss","repo":"EmoryMLIP/OT-Flow","repo_kind":"official","path":"trainToyOTflow.py","file_url":"https://github.com/EmoryMLIP/OT-Flow/blob/HEAD/trainToyOTflow.py","link_basis":"first_harvest_node","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":"fa06178561e307d5"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}