diff --git a/Project.toml b/Project.toml
index 0f2df88..2deeccd 100644
--- a/Project.toml
+++ b/Project.toml
@@ -12,6 +12,7 @@ Manifolds = "1cead3c2-87b3-11e9-0ccd-23c62b72b94e"
NNlib = "872c559c-99b0-510c-b3b7-b6c96a88d5cd"
OneHotArrays = "0b1bfda6-eb8a-41d2-88d8-f5af5cad476f"
StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
+Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
[compat]
Adapt = "4.1.1"
diff --git a/editflow_code/Project.toml b/editflow_code/Project.toml
new file mode 100644
index 0000000..632a12f
--- /dev/null
+++ b/editflow_code/Project.toml
@@ -0,0 +1,26 @@
+[deps]
+Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
+CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
+CannotWaitForTheseOptimisers = "16124dda-d9fe-413b-a880-e3f4df3aa341"
+Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
+Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
+Flowfusion = "5b4e93c8-7b6e-4682-b400-fc3b238f52b1"
+Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c"
+ForwardBackward = "e879419d-bb0f-4252-adee-d266c51ac92d"
+Functors = "d9f16b24-f501-4c13-a1f2-28368ffc5196"
+IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a"
+LearningSchedules = "7e85a9e7-c65d-495e-8ec0-baa06f07ebbf"
+Manifolds = "1cead3c2-87b3-11e9-0ccd-23c62b72b94e"
+Metal = "dde4c033-4e86-420c-a63e-0dd931031962"
+NNlib = "872c559c-99b0-510c-b3b7-b6c96a88d5cd"
+OneHotArrays = "0b1bfda6-eb8a-41d2-88d8-f5af5cad476f"
+Onion = "fdebf6c2-71da-43a1-b539-c3bc3e09c5c6"
+Optimisers = "3bd65402-5787-11e9-1adc-39752487f4e2"
+Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
+ProgressMeter = "92933f4c-e287-5a05-a399-4b506db050ca"
+RandomFeatureMaps = "780baa95-dd42-481b-93db-80fe3d88832c"
+Revise = "295af30f-e4ad-537b-8983-00126c2a3abe"
+StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
+StringDistances = "88034a9c-02f8-509d-84a9-84ec65e18404"
+Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f"
+cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd"
diff --git a/editflow_code/abs.txt b/editflow_code/abs.txt
new file mode 100644
index 0000000..b914fde
--- /dev/null
+++ b/editflow_code/abs.txt
@@ -0,0 +1,108 @@
+QLQLQESGPGLVKPSETLSLTCTVPGGPISSSSYYWGWIRQPPGKGLEWIGSIYYSGSTYYNPSLKSRVTISVDTSKNQSSLKLSSGTAADTAVYYCYSNYKVDYYVDVLGKGTTVTGSS
+EGKRVECGGGGGGRGGARRGGCEEEGVTFDEEGMSGGSQARGKGREGVSGRNWKGGSTGYADSVKGRFTISRDNAKNSLYLQMNSLRAEDTAFSSCAIYITLFEFLYSSFDISGQGTLFTFSS
+EGQRVECGGGGGQRGRDRRGECIEEGVTFGEEGMSGGGQAKGKGREGVGGRRSKEEGGTTEEGVSVKGRFTISRDDSKSIAYLQMNSLKTEDTAVYYCTRALSADYYSSGISLYYSSLDVSGKGTPFTFSS
+EVHLVESGGGLVQPGGSLRLSCAASVLTFSSFALSWVLHAPGKALEWVSAISGSGGCTYYAVTVKGRFTISREKSKNTLYMQMNSLRAEDTAVYCCAKDQQQLFSDWGQETMVTVSS
+EVQLVESGGDLVQPGGSLRLSCAISGFTVSNNHVTWFRQAPGKGLEWVSLIYNAGSTIYADSVKGRFTISRENSKNIVYLQMNSVTAEGTAVYYCLGLGAKAVWGQGTVVTVSA
+QVQLVQSGAEVKKPGASVKISCTASGYTITNHYMHWVRQAPGQGPEWVGVINPSGDRTVYAQKFQGKVTMTRDTSTSTVYMEVSSLKSDDTAVYYCARDNSAQEKSWWFDPWGQGTLVTVSS
+EVQLVESGGGLVQPGGSLILSCAASGFTFSSHWMGWVRQAPGEGLEWVANLNQDGSETYYVDSLKGRFTISRDNTKNSLCLQMNSLRTEDTAVYFCARLGYRLAEYWGQGTLVTVSA
+QVQLVQSGAEVKKPGASVKISCTASGYTITNHYMHWVRQAPGQGPEWVGVINPSGDRTVYAQKFQGKDTMTRDTSTSTVYMEVSSLKSDDTAVYYCARDNSAQEKSWWFVHWGQGTLVTVSS
+QVQLVESGGGVVQPGRSLRLSCAASGFTFSSYGMQWVRQAPGKGLEWVAVISDDGSTKHYADSVNGRFTVSRDNSKNTLYLQMNSLRAEDTAVYYCAKEKGGNYMPLDYWGQGTLVIVSA
+EVQLVESGGGPVKPGGSLRLSCTVSGFTFTSYSMDWVRQAPGQGLEWLSYIHNGGNDVSYADSVRGRFTISRDNAKNSVDLQMNSLRAEDTAVYYCVRDYDYSFDYWGQGILVTVSS
+QVQLVQSGTEVKKPGASVKVSCKASGYTFTSYAMRWVRQAPGQRLEWMGWINAGDGNTKYSQKFQDRVTITRDTSTSTAYMELSSLRSEDTAVYYCAREMVVVMRGRSDTASGGKGTLVTVSS
+QVQLVESGGGVVQPGRSLRLSCAASGFTFSSYGMHWVRQAPGKGLEWVAVIWYDGSNKYYADSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCARDVVTGYSNLSGLGYWGQGTLVTVSP
+EVQLVESGGGLVQTGGSLRLSCAASGFTIINYWMHWVRQAPGKGLVWVSHINGDGRRTTYADSVKGRFTISRDDAKNTVYLQMNSLRDEDTAVYYCARDRFYSPGHWGQGILVTVSS
+QVQVVQSGAEVKRPGASVTVSCKPSGYTFTSYGISWVRQAPGQGLEWMGWISIYNGNTKYAQTLQGRVTLTRDTSTNTAYMELRSLRSDDTAVYYCARGGPACCNGGTCYGDAFDFLGQGTTGTVSS
+EVQLVESGGGLVQPGGSLILSCAASGFTFSSHWMGWVRQAPGEGLEWVANLNQDGSETYYVDSLKGRFTISRDNTKNSLYLQMNSLRTEDTAVYFCARLGYRLAEYWGQGTLVTVSA
+QVQLGQSGAEVEKPGASVKVSCKASGYTFTGYYMHWVRQAPGQGLEWMGWINPNSGGTNYAQKFQGWVTMTRDTSISTAYMELSRLRSDDTAVYYCARDYSSGWYYFDYWGQGTLVIVSP
+QVELRESGRVMVRPSETLSLTCTVSGGSISSYYWSWIRQPPGKGLEWIGYIYYSGSTNYNPSLKSRVTISVDTSKNQFSLKLGSVTAADTAVYYCARRKVVPADISQPHNDAFDIWGQGIMDSVSS
+QLQLQESGPGLVKPSETLSLTCTVSGGSISSSSYYWGWIRQPPGKGLEGIGSIYYSGSTYYNPSLKSRVTISVDTSKNQFSLKLSSVTAADTAVYYCARHRSGLELLSYYYYYMDVWRKGTTHTFSS
+QVQLVQSGAEVKKPGASVKVSCKASGYTFTSYYMHWVRQAPGQGLEWMGIINPSGGSTSYAQKFQGRVTMTRDTSTSTVYMELSSLRSEDTAVYYCARVGVITGTTGGWFDPWGQGTLVTVSS
+QVQLVQSGAEVKRAGASVKVSCKASGYTFTSYYMHWVRQAPGQGLEWMGIINPSGGSTSYAQKFQGRVTMTRDTSTSTVYMELSSLRSEDTAVYYCATSGVGATPFDYWGQGTLVTVSS
+QVLLVQSGTEVKKPGASVKVSCKAYGYSFTTYGTTWVRQAQGLEYMGWISPYNGDTNYAQELQSRVTMTTDTSTSTAYMELRSLTYDDTAVYCWTRSGLQYDSGMNGGGQGTAVTVSS
+QVQLVQSGAEVKKPGASVKVSCRTSGYSFTTYAIHWVRQAHGQRLAWVGCINADNGNTQYSQSFQGRVTITRDTSASTAYMELSSLRSEDAAVYYCARDLAFYGSFGGDYCGQGALIAFSS
+QVQLQESGPGLVKPSETLYLTCTVSGGSISSYYWSWIRQPPGKGLEWIGYIYYSGSTNYNPSLKSRVTKSVDTSKNQFSPKLSSVTAADTAVYYCARDGGGSGSYYPHYYYYYGMDVWGQGFSDTVSS
+QVQLVQSGAEVKKPGASVKVSCKASGYTFTSYGISWVRQAPGQGLEWMGWISAYNGNTNYAQKLQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCAKAGGYSYGWGLFDPWGQGTLVTVSS
+QVQLVQSGAEVKKPGASVKVSCKASGYTFTSYAMHWVRQAPGQRLEWMGWINAGNGNTKYSQKFQGRVTITRDTSASTAYMELSSLRSEDTAVYYCARSITPSGYDYVYFDYWGQGTLFTVSS
+EVQLVESGGGLVQPGGSLRLSCAASGFTFSSYEMNWVRQAPGKGLEWVSYISSSGSTIYYADSVKGRFTISRDNAKNSLYLQMNSLRAEDTAVYYCARDGSGGSLGWFDPWGQGTLVTVSS
+EVQLVESGGGLVQPGGSLRLSCAASGFTFSNYAMTWVRQAPGKGLEWVSSISEAGGSSYYADSVKGHFTISRDNSKNTLYLQMNSLRAEDTAVYYCAKGLLYSGRQALVDYWGQGTLVTVFS
+QVQLQQSGPGLVKPSQTLSLTCAISGDSVSSNSAVWNWIRQSPSRGLEWLGRTYYRSKWYNDYAVSMKSRVTINTDTSRNQFSLQLNSVTPEDTAVYFCARDQSGWYATSWYFDFWGQGPLATLSS
+EVQLVESGGGLVQPGGSLRLSCAASGFTVSSNYMSWVRQAPGKGLEWVSVIYSGVTTYYADSVKGGLTISRDTSKNTLYLQMNSLRAEDTAVYYCARDRSRNWGFDCLGQGTLGTGFS
+QVQLVQSGAEVKKPGASVKVSCKTSGYTFSTYAITWVRQAPGQGLEWVGWISGYNGNTRYGEKLLGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCVAAPTSSDCRSTNCPRGHYYYGVDVWGQGTTVTVSS
+EVQLVESGGGLVQPGGSLTLSCAASAFLFSSYWMHWVRQAPGKGLVWASRINSDGRSTKYADSVTGRFTTSRDNAKNTLYLQMNSRRDEDPAVHYCAREFGPALDDWGQGTLVTVAS
+QVQLQESGPGLVKPSETLPLTCTVSGVSISSYLWSWIRQSPGKGLEWIGYIHYSVSTNYNPSLKSRVTMSVDTSKKQFSLKLSSVTAADTAVYYCARCTGAGRSACDAFDIWGQGTMVTVSS
+QVQLVQSGAEVKKPGSSVNVSCKASGGTFSSYTISWVRQAPGQGLEWMGRIIPILGIANYAQKFQGRVTITADKSTSTAYMELSSLRSEDTAVYYCARGLWFGELLYSWFDPWGQGTLFSVSS
+QVQRVQSGAEVKKPGASVKCSCKASGYTFTSYGISWVRQAPGQGLEWMGWISAYNGNTNYAQKLQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCARDLQGENYDFWSGYYTGPVWYMDVWGKVFTDTVSS
+QVTLRDSVXALVKPTHTLTLTCTFSGFSLSSSGMCVSWIRHPPGNSLEWLALIDWDDDKYYSTSLKTRLTISKDTYKNQVVLTMTNMDPVDTATYYCSRIQAEEGTEYYIDYRGQGNLVNVSS
+QVQLVESGGGVVQPGRSLRLSCAASGFTFSSYGMHWVRQAPGKGLEWVAVIWYDGSNKYYADSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVDYCERPAAIWSGSYIDDWSQGTLVIVSS
+EVQLVESGGGLVQPGGSLRLSCAASGFILTNYWMNWVRQAPGKGLEWVANIKRDGSETYYVDSVKGRFTISRDIAKNLLYLQMNSLRAEDTAIYYCVRGSAGAKDYWGQGSLVNVSS
+QVQLVQSGAEVKKPGASVKISCTASGYTLTNHYMHWVRQAPGQGPEWVGVINPSGDRTVYAQKFQGKVTMTRDTSTSTVYMEVSSLKSDDTAVYYCARDNSAQEKSWWFDPWGQGILVTVSS
+EVQLVESGGGLVQPGGSLRLSCAASGFTFSSYSMNWVRQAPGKGLEWVSAISGSGGSTYYADSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCAKHPGSIAGEFDYWGQGTLVTVSS
+QVQLVQSGAEVKKPGASVKVSCKASGYTFTSYGISWVRQAPGQGLEWMGWISAYNGNTNYAQKLQGRVNMTTDTSTSTAYMELRSLRSDDTAVYYCARDGDLAVAGISQDWGRGTLVTISS
+QVQLVQSGAEVKKPGASVKVSCKASGYTFTSYYMHWVRQAPGQGLEWMGIINPSGGSTSYAQKFQGRVTMTRDTSTSTVYMELSSLRSEDTAVYYCARVRKCGGDCKRVWFDPWGQGTLVIVSS
+QVQLVQSGAEVKKPGASVKVSCKASGYTFTSYGISWVRQAPGQGLEWMGWISAYNGNTNYAQKLQGRVILTSDTSTSTAYMQLRSLRSDDTAVYYCARTPERQLGARSEYWGERALGSVSS
+EVQLVTSEVGPLEPGGSLKLSCETTGFIFSDSGMHWVRQASGKGLEWVGRIRSKANSYTTAYAASVKGRFTISRDDSKNTAYLQMNSLKTEDTAVYYCTRYPAGQIMPTPFDYWGQGALVTFSS
+QVYLQQSGPGLVKPSQTLSLTCAISGDSVSSNIAAWNWIRQSPSRGLEWLGRTYYKSKWYNDYAVSVKSRITINPATTKNQFSLQLNSVTPEDTAVYYCARGPGGLVGFDFWGQGTLVTVSS
+QVQLVQSGAEVKKPGASVKVSCKASGYTFTSYGISWVRQAPGQGLEWMGWISAYNGNTNYAQKLQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCARGRYYDSSGYPLYWYFDLWGRGTLVTVSS
+QVQLVQSGAAVKKPGASVRVSCQASGYTFTDYMMHWVRQAPGQRLEWMGWITSGNGNTKYSENFQGRVTITRDTSASTAYMELSSLTSEDTAVYYCARALTRSSNWFDPWGQGSFDTIST
+EVQVVEHGGGLVQPGGSLRLSCAASGFTVSSNYMSWVRQAPGKGLEWVSVIYSGGSTYYADSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCARGRIAFSYWGQGTLVTVSS
+QVQLVQYGSDVKKPGASVKVSCKASGYTFTSYGISWVRQAPGQGLEWMGWISAYNGNTNYAQKLQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCARDLRAVAGTIFRGVLSYWGQGILVTVSS
+QVLLVQSGAEVKKPGASVKLSCKGFGFMFTRYAIHWVRQAPGQGLEWMGCIVPVDGKTYYSQRFQDKVTITRDTSASTAYVDVSRLTPEDTAVYYCARDLVGAGYFDYWGQGALVTVSP
+EVQLVESGGGLVKPGGSLRLSCAASGFTFSNAWMSWVRQAPGKGLGWVGRIKSKTDGGTTDYAAPVKGRFTISRDDSKNTLYLQMNSLKTEDPSVYYCTRDLRTPVVRIVEWLHYTQGGGTPTTVTPSS
+EVHLVESGGGLVKPGGSLRLSCAASGFTVSSNYMSWVRQAPGKGLEWVSVIYSGGSAYYADSVKGRFTISRHNSKNTLYLQMNSLRAEDTAVYYCGRCRRRAAAGTGYYDDFDIWGQGTMVTVIS
+QVQLQESGPGLVKPSETLSLTCTVSGGSISSYYWSWIRQPPGKGLEWIGYIYYSGSTNYNPSLKSRVTISVDTSKNQFSLKLSSVTAADTAVYYCARMKYGSELLDYYYYMDVWGKGTTVTVSS
+QVQLVQSGAEVKKPGASVKVSCKASGYTFTSYGIRWVRQAPGQGLEWMGWISADNGNTNYAQKLQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCARVRGLSLGFDYWGQGTLVNVSS
+QVRLVQYGANVKKPGASVKVSCKASGYTFTGYYMHWVRQAPGQGLEWMGWINPNSGGTNYAQKFQGWVTMTRDTSISTAYMELSRLRSDDTAVYYCARDQNINDAFDIWGQGIIDTVSS
+EVQMAKYGGGPDKPGGSMKITCAASGFTFSSYSMNWVRQAPGKGLEWVSSISSSSSYIYYADSVKGRFTISRDNAKNSLYLQMNSLRAEDTAVYYCARDGKRGSVVVAATLGWGYYYYGMDVLFHWTTVTVSS
+QVQLVESGGGVVQPGRSLRLSCAASGFTFSSYGMHWVRQAPGKGLEWVAVIWYDGSNKYYADSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCASLMSFGESRYYYYYGMDVWGQGSTVSVAS
+QVQLVQSGAEVKKPGASVKVSCKASGYTFTNYGISWVRQAPGQGLEWMGWISAHNGNTNYAQNLQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCARGTKAFDIWGQVIIVTVSS
+QVQLVQSGAEVKKPGASVKISCTASGYTITNHYMHWVRQAPGQGPEWVGVIDPSGDRTVYAQKFQGKVTMTRDTSTSTVYMEVSSLKSDDTAVYYCARDNSAQEKSWWFDPWGQGTLVTVSS
+EVQLVESGGGLVQPGGSLRLSCAASGFTFSSFAMSWVRQAPGKGLEWVSGIRGSGGNTHYGDSVKGRFTISRDNSKNTLYLQIDGLRAEDTALYYCAKATGVANFWSHDAFDIWGQGTIVTVSS
+QEKGGQYGGKVKKPRSWVKVSGKASRGTFSSYTISWVRQAPGQGLEWMGRIIPILGIANYAQKFQGRVTITADKSTSTAYMELSSLRSEDTAVYYCASSGYCSSTSCYDPLKDAFDIWGQGNMVIDYS
+QVQLQESGPGLVKPSETLPLTCTVSGVSLSSYLWSWIRQSPGKGLEWIGYIHYSVSTNYNPSLKSRVTMSVDTSKKQFSLKLSSVTAADTAVYYCARCTGAGRSACDAFDIWGQGTMVTVSS
+EVQLVESGGGLVKPGGSLRLSCAASGFTFSSYSMNWVRQAPGKGLEWVSSISSSSSYIYYADSVKGRFTISRDNAKNSLYLQMNSLRAEDTAVYYCARARAPWGQGNLVTLSS
+QLQLQESGPGLVKPSETLSLNCTVSGGSISSSSYYWGWIRQPPGKGLEWIGSIYYSGSTYYNPSLKSRVTISVDTSKNQFSLKLSSVTAADTAVYYCARPSHMITFGGVIVTRSFDYWGQRTLVTVSS
+QVQLVQSGAEVKKPGSSVKVSCKASGGTFSSYTISWVRQAPGQGLEWMGRIIPILGIANYAQKFQGRVTITADKSTSTAYMELSSLRSEDTAVYYCARGGGYCSGGSCYPDAFDIWGQGTMVTVAS
+QVQLVQSGAAVKTPGASVKVSCKASGYNFTNYGISWVRQAPGQGLEWMGWISAHNGNTNYAQNLQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCAGGTKAFDIWGQGTMVIVFS
+QITLKESDPTLVKPTQTLTLTCTFSVFSLSTSGVGVGWIRQPPGKALEWLALIYWDDDKRYSPSLKSSLTITKDTSKNQVVLTMTNMDPVDTATYYCAHRPYGDARDADDIGDQGAMVTVSS
+QVQLVQSGAEVKKPGSSVKVSCKASGYTFTSYGISWVRQAPGQGLEWMGWISAYNGNTNYAQKLQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCARDGAVSHTSLECSGGSCYDAFDIWGQVTMNTVSS
+QVQLVQSGAEVQKPGASVKVSCKASGYIFTSYFIHWMRQAPGQGLEWMGSINPRGGNTNYALKFQGRVTMTRDTSTGTVHMELSRLGSEHTAVFYCAKGSGRPDLARLSRFGPWGQGTLGIVSS
+QVQLVKSGDEVKKPGASVKVYCKASGYTFTSYAMHWVRQAPGQRLEWMGWINAGNGNTKYSQKFQGRVTITRDTSASTAYMELSSLRSEDTAVYYCARVVVPAAMVNWFDPWGQGTLVTVSS
+QVQLVQSGAEVKKPGASVKVSCKASGYTFTSYAMHWVRQAPGQRLEWMGWINAGNGNTKYSQKFQGRVTITRDTSASTAYMELSSLRSEDTAVYYCASAIVATMAFDYWGQGTLVTVSS
+QVQLVQSDADVKKPLASVEVSCKASGGTFSSYTISWVRQAPGQGLEWMGRIIPILGIAHYAQKFQGRVTITADKSTSTAYMELSSLRSEDTAVYYCASEEKGSMMVARAFDYWGQVILVTASS
+QVQLVQSGTEVKRPGASVKVACKAYGYTFTSYGISWVRQAPGQGLEWMGWISAYNGNTNYAQKLQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCARGHGECSSTSCYGLNVDDYWGQGTLVTVSS
+EVQLVESGGGLVQPGGSLILSCAASGFTFSSHWMGWVRQAPGEGLEWVANLNQDGSETYYVDSLKGRFTISRDNTKNSLYLQMNSLRTEDTAMYFCARLGYRLAEYWGQGTLVTVSA
+QVQLVQSGAEVKKPGASVKVSCKASGYTFTGYYMHWVRQAPGQGLEWMGWINPNSGGTNYAQKFQGWVTMTRDTSISTAYMELSRLRSDDTAVYYCAREVVLTYYYGSGSYYNVPGSPGGQYYFDYWGQGTLVIVSS
+EVQLVESGGGLVQPGGSLILSCAASGFTFSSHWMGWVRQAPGEGLEWVANLNQDGSDTYYVDSLKGRFTISRDNTKNSLYLQMNSLRTEDTDVYFCARLGYRLAEYWGQGTRVIVSA
+EVQLVESGGGLVKPGGSLRLSCAASGFTFSNACMSWVRQAPGKGLEWVGRIKSKTDGGTTDYAAPVKGRFTISRDDSKNTLYLQMNSLKTEDTAVYYCTTVSGDIVVVPAAIPTRGSIAVAGTFGYWGQGALVTVSS
+EVQLLESGGGLVQPGGSLRLSCAASGFTFSSYAMSWVRQAPGKGLEWVAAISGSGGSTYYADSVKCRFTSSRDNSKNTLYLQMNSLRAEDTAVYYCAKVSRYYYGSGIEFDYRGQGTLVNVSS
+QVQLVQSGAEVKKPGASVKVSCKASGYTFTSYGISWVRQAPGQGLEWMGWISAYNGNTNYAQKIQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCARGVYPDDSSDHPFDYWGQGTLVSVSP
+QVQLVESGGGVVQPGRSLRLSCAASGFTFSSYAMHWVRQAPGKGLEWVAVISYDGSNKYYADSVKGRFTISRDNSKSTLYLQMNSLRAEDTAVYYCARDPDGYWSGGSCYLYYFDYWGQGILVTGSA
+QITLKESGPTLVKPTQTLTLTCTFSGFSLSTSGVGVGWIRQPPGKALEWLALIYWDDDKRYSPSLKSRLTITKDTSKSQVVLTMTNMDPVDTATYYCAHFGFGELLLENGAQGTLVTVSS
+QVQLVQSGAEVKKPGASVKVSCKASGYTFTSYGISWVRQAPGQGLEWMGWISAYNGNTNYAQKLQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCARDRPTVGGSTRIGFRGPGNLGTGSS
+EVQVVESGGGLVQPGGSLRLSCAATGFTVNRNHVKWVRQAPGKGLECVSVILDTGVTYYADAVKGRFTISRDNSKNTVNLEMNSLRAEDTAIYYCGGYGANSVWGQGSLGTVSP
+EVELVESGGGLVQPGGSLRLSCAASGFNCNIYAMHWVRQAPGKGLEFLSSVLGNGAKRQYASSVKGSFTMSRDNSKTTLHLHMGSLRPDDTALYYCARDKDSGYAFVYWGQGALLTVSS
+QVQLVQSGAEVKKPGSSVKVSCKASGDTFSSYTISWVRQAPGQGLEWMGRIIPILGIANYAQKFQGRVTITADKSTSTAYMELSSLRSEDTAVYYCASLAYCGGDWYSTNRNYYFDDWGQGTLINVSS
+EVQLVKSGGGLVKPGGSLRLSCAASGFTFSNAWMSWVRQAPGKGLEWVGRIKSKTDGGTTDYAAPVKGRFTISRDDSKNTLYLQMNSLKTEDTAVYYCTTDAVPVGYWGQGFLVTASS
+QVQRVQAGAAVKKPGTSVKVSCKASGGTFSSYTISWVRQAPGQGLEWMGRIIPILGIANYAQKFQGRVTITADKSTSTAYMELSSLRSEDTAVYYCARDYGGRLAAMGYYWGQGSLVTVAS
+QVQLQESGPGLVKPSGTLSLTCAVSGGSISSSNWWSWVRQPPGKGLEWIGGIYHSGSTNYNPSLKSRVTISVDKSKNQFFLKLSSVTAADTAVYYCASDNWNYSWFDPWGGEALVAISS
+QVQLVQSGAAVKKPGASVQVSCKASGYTFTSYGISWVRQAPGQGLEWMGWISAYNGNTNYAQKLQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCARESGGWYYFDNWGQGTLVTVSS
+EVLLVXXXGGLVQPXXSLRLSXAASGFTFTDYWMHWVRQSPGKWLVWVSRINNDVSDTIYADSVKGRFTLSRDKAKNTLYLQMNSLRVEYTAVYYCARGGWSHGFDIWGQGKMVTVSS
+EVQLVESGGGLVQPGVSLRLSCAASGFTFSSYAMHWVRQAPGKGLEYVSAISSTRGSTYSANAVKGRFTISIENSKKTLYLQMGRLRAEDSAVYYWASMGNLRYLDWLPTVPDDFEIWGEGAMGTVSS
+QVQLVQSGAEVKKPGASVKVFCKASGYTFTNYIMHWVRQAPGQRLEWMGWISAGNGNTNFSQDFQDRVTFTRDTSESTDYMELSSLNSEDTAVYYCAREGFEPWGQGNLVNVSS
+QVQLVQSGAEVKKTGASVKVSCKASGYTFTSYGISWVRQAPGQGLEWMGWISAYNGNTNYAQKLQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCARSSDIVVVPDYYGMDVWGQGTTVTVSS
+QLQLQESGPGLVKPSETLSPTCTVSGGSISSSSYYCGWIRRPPGKGLEWIGSIYYSGSTYYNPSLKSRVTISVDTSQNQFSLKLSSVTAADPAVDYCARHLVERPFGYWGQGTLGTVSS
+QVQLVQSGAEVKKPGASVKVSCKASGYTFTSYGISWVRQAPGQGLEWMGWISAYNGNTNYAQKLQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCASDYYDTSLPGDYWRPRTLVPVSS
+QVQLVPSGAAVKKPGASVKVSCKASGYTFTSYGISWVRQAPGQGLEWMGWISAYNGNTNYAQKLQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCAREWVGFDPWGQGTLVTVSP
+QLQLQESGPGLVKPSETLSLTCTVSAGSISSNNYFWGWIREPPGKGLEWIGSVYSSGSTYYNPSLKGRVTISVDTSKNQFSLKLTSVTAADTAVYYCATPWRATYYYGSSGYYGWDAFDTWGQGTMVTVFS
+QVQLVQSGAEVKKPGASVKVSCKASGYTFTSYGISWVRQATGQGLEWMGWISAYNGNTNYAQKLQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCARGDILPVYFCHFGAQGPGVTVST
+QVQLVESGGGVVQPGRSLRVSCAASGFTFSNYGMHWVRQAPGRGLEWVAVILKDGSKDDYADSVKGRFTISRENSKNTLYLQMNSLRAEDTVFFFCGRDDEGVQNGFVGGGQGKMAPFFS
+EVQLVASGGVLVKPEGSLRLSCAASGFTFSSYSMNWVRQAPGKGLEWVSSISSSSSYIYYADSVKGRFTISRDNAKNSLYLQMKSLRAEDTAVYYCATSGYDWRYWGQGSLLTVSS
+EVQVVESGGDLVHPGGSLRLSCVASGFTVSNNHVSWVRQAPGKGLEWVSFIHNSGTTHYADSVKGRFTISRDNSRNTVYLQMNSVRVEDTAVYYCMGYGGNSVWGQGTLVTVSS
+QVQLVQSGAEVKKPGASVKVSCKASGYTFTNYGINWVRQAPGQGLEWMGWIGAYNAYTNYAQKLQGRVTMTTDASTNTAYMELRSLRSDDTAVYYCAREYSGYDLEDYWSQGTLVTVAS
+EVQLVESGGGPVKPGGSLRLSCTVSGFTFTSYSMDWVRQAPGQGLEWLSYIHNGGNDVSYADSVRGRFTISRDNAKNSVDLQMNSLRAEDTAVYYCVRDYDYSFDDWGQGILVTVSS
+HLQLKESGTRLLKPSETLSLTCTVSCSYISSSSYYWGWIRQPPGKGLEWIGSIYYSGSTYYNPSLKSRVTISVDTSKNQFSLKLSSVTAADTAVYYCARPLVVPAAYFDYWGQGTLVIVSS
+QVQLVQSGAEVKKPGASVKVSCKASGYTFTSYGISWVRQAPGQGLEWMGWISAYNGNTNYAQKLQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCARDGPSYSSGTGIDYWGQGTLFTVSS
+QVQLVQSGSEVKKSGASVKVSCKASGYTFTSYGISWVRQAPGQGLEWMGWISAYNGNTNYAQKLQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCARDAGAAMADYGMDVWGQGTTVTVSS
+QVQLVQAGAEVKKPGASVKVSCKASGYTFTSYGISWVRQAPGQGLEWMGWISAYNGNTNYAQKLQGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCARDFPTYYYDSSGYYPAGWGHGTLVTVSS
+QVKLVQSGAEVKKPGSSVKVSCKASGGTFSSYTISWVRQAPGQGLEWMGRIIPILGIANYAQKFQGRVTITADKSTSTAYMELSSLRSEDTAVYYCAREGSGPNWFDPWGQGTLVTVFS
+EVQLVESGGGLVKPGESLRLSCAASGFTFSNAWMGWVRLAPGKGLEWLGRFINKPGGGTADYSAPVRGRYIISRDDSKDTLYFEMKSLKTEDTGVYYCTTSLTTGGFDFWGQGTMVTVSS
\ No newline at end of file
diff --git a/editflow_code/analysis_notebook copy 2.ipynb b/editflow_code/analysis_notebook copy 2.ipynb
new file mode 100644
index 0000000..532ad3a
--- /dev/null
+++ b/editflow_code/analysis_notebook copy 2.ipynb
@@ -0,0 +1,3051 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `~/dev/Flowfusion.jl/editflow_code`\n",
+ "\u001b[92m\u001b[1mPrecompiling\u001b[22m\u001b[39m project...\n",
+ " 2645.6 ms\u001b[33m ✓ \u001b[39mFlowfusion\n",
+ " 1 dependency successfully precompiled in 4 seconds. 470 already precompiled.\n",
+ " \u001b[33m1\u001b[39m dependency precompiled but a different version is currently loaded. Restart julia to access the new version. Otherwise, loading dependents of this package may trigger further precompilation to work with the unexpected version.\n",
+ "\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n",
+ "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/dev/Flowfusion.jl/editflow_code/Project.toml`\n",
+ "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/dev/Flowfusion.jl/editflow_code/Manifest.toml`\n",
+ "WARNING: redefinition of constant Main.AA20. This may fail, cause incorrect answers, or produce other errors.\n",
+ "WARNING: redefinition of constant Main.TOK2ID_AA. This may fail, cause incorrect answers, or produce other errors.\n",
+ "WARNING: redefinition of constant Main.PM. This may fail, cause incorrect answers, or produce other errors.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "plot_len_dist (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "using Pkg\n",
+ "Pkg.activate(@__DIR__)\n",
+ "Pkg.instantiate()\n",
+ "using Revise\n",
+ "\n",
+ "using Random\n",
+ "using Statistics\n",
+ "using Adapt\n",
+ "using Functors\n",
+ "using Flux\n",
+ "using Onion\n",
+ "using RandomFeatureMaps\n",
+ "using Zygote\n",
+ "\n",
+ "Pkg.develop(path=joinpath(@__DIR__, \"..\"))\n",
+ "using Flowfusion\n",
+ "const FF = Flowfusion\n",
+ "\n",
+ "include(joinpath(@__DIR__, \"prob_model.jl\"))\n",
+ "include(joinpath(@__DIR__, \"helper_funcs.jl\"))\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "to_same_device (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import CUDA\n",
+ "\n",
+ "# Device helpers\n",
+ "const _gpu_enabled = try\n",
+ " CUDA.has_cuda()\n",
+ "catch\n",
+ " false\n",
+ "end\n",
+ "\n",
+ "to_dev(x) = _gpu_enabled ? Adapt.adapt(CUDA.CuArray, x) : x\n",
+ "to_cpu(x) = _gpu_enabled ? Adapt.adapt(Array, x) : x\n",
+ "# move x to the same device type as y (Array or CuArray)\n",
+ "to_same_device(x, y) = (_gpu_enabled && (y isa CUDA.CuArray)) ? Adapt.adapt(CUDA.CuArray, x) : Adapt.adapt(Array, x)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "make_minibatch (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Minibatch builder (uses true PM)\n",
+ "function make_minibatch(B::Int, P::FF.EditFlow; rng=Random.default_rng())\n",
+ " K = P.k\n",
+ " x0s = Vector{FF.DiscreteState}(undef, B)\n",
+ " x1s = Vector{FF.DiscreteState}(undef, B)\n",
+ " for b in 1:B\n",
+ " # x1 from true PM\n",
+ " seq1 = sample(PM; rng=rng)\n",
+ " @assert all(1 .<= seq1 .<= K)\n",
+ " x1s[b] = FF.DiscreteState(K, seq1)\n",
+ " # x0: uniform tokens with random length in 1:10 (no BOS in x0)\n",
+ " L0 = rand(rng, 1:10)\n",
+ " seq0 = rand(rng, 1:K, L0)\n",
+ " x0s[b] = FF.DiscreteState(K, seq0)\n",
+ " end\n",
+ " ts = rand(rng, Float32, B)\n",
+ " return x0s, x1s, ts\n",
+ "end\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "EditFlowModel"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Model definition\n",
+ "struct EditFlowModel{L}\n",
+ " layers::L\n",
+ "end\n",
+ "Flux.@layer EditFlowModel\n",
+ "#=\n",
+ "function EditFlowModel(; d=128, num_heads=8, nlayers=6, rff_dim=128, cond_dim=128, K::Int)\n",
+ " embedding = Flux.Embedding(K + 2 => d)\n",
+ " time_embed = Flux.Chain(RandomFourierFeatures(1 => rff_dim, 1.0f0), Dense(rff_dim => cond_dim))\n",
+ " blocks = [Onion.AdaTransformerBlock(d, cond_dim, num_heads) for _ in 1:nlayers]\n",
+ " head_combined = Dense(d => 2K + 1, bias=false)\n",
+ " rope = RoPE(d ÷ num_heads, 4096)\n",
+ " return EditFlowModel((; embedding, time_embed, blocks, head_combined, rope, K))\n",
+ "end\n",
+ "=#\n",
+ "function EditFlowModel(; d=128, num_heads=8, nlayers=6, rff_dim=128, cond_dim=128, K::Int)\n",
+ " embedding = Flux.Embedding(K + 2 => d)\n",
+ " time_embed = Flux.Chain(RandomFourierFeatures(1 => rff_dim, 1.0f0), Dense(rff_dim => cond_dim))\n",
+ " blocks = [Onion.AdaTransformerBlock(d, cond_dim, num_heads) for _ in 1:nlayers]\n",
+ " ins_q = Dense(d => K, bias=false)\n",
+ " sub_q = Dense(d => K, bias=false)\n",
+ " ins_lambda = Dense(d => 1, bias=false)\n",
+ " sub_lambda = Dense(d => 1, bias=false)\n",
+ " del_lambda = Dense(d => 1, bias=false)\n",
+ " rope = RoPE(d ÷ num_heads, 4096)\n",
+ " return EditFlowModel((; embedding, time_embed, blocks, ins_q, sub_q, ins_lambda, sub_lambda, del_lambda, rope, K))\n",
+ "end"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Forward pass\n",
+ "function (model::EditFlowModel)(t, Xt_ms)\n",
+ " m = model.layers\n",
+ " X = FF.tensor(Xt_ms)\n",
+ " X = ndims(X) == 1 ? reshape(X, :, 1) : X\n",
+ " L, B = size(X)\n",
+ "\n",
+ " pmask = Zygote.@ignore FF.getlmask(Xt_ms)\n",
+ " Xp = X .+ 1\n",
+ " #println(\"min/max X: \", minimum(X), \" / \", maximum(X), \" pad=\", P.padding_token, \" lat=\", P.latent_token)\n",
+ " if maximum(X) > P.padding_token\n",
+ " error(\"X contains values greater than the padding token; illegal token values in input\")\n",
+ " end\n",
+ "\n",
+ " H = m.embedding(Xp)\n",
+ "\n",
+ " t = ndims(t) == 0 ? fill(Float32(t), B) : Float32.(t)\n",
+ " cond = m.time_embed(reshape(t, 1, B))\n",
+ "\n",
+ " cond = to_same_device(cond, H)\n",
+ " pmask = Zygote.@ignore to_same_device(pmask, H)\n",
+ " rope = Zygote.@ignore to_same_device(m.rope[1:L], H)\n",
+ "\n",
+ " for blk in m.blocks\n",
+ " H = blk(H; cond, rope, kpad_mask=pmask)\n",
+ " end\n",
+ "\n",
+ " ins_head = m.ins_q(H)\n",
+ " sub_head = m.sub_q(H)\n",
+ " lambda_ins = m.ins_lambda(H)\n",
+ " lambda_sub = m.sub_lambda(H)\n",
+ " lambda_del = m.del_lambda(H)\n",
+ " return (ins_head, sub_head, lambda_ins, lambda_sub, lambda_del)\n",
+ "end"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Forward pass\n",
+ "# function (model::EditFlowModel)(t, Xt_ms)\n",
+ "# m = model.layers\n",
+ "# X = FF.tensor(Xt_ms)\n",
+ "# X = ndims(X) == 1 ? reshape(X, :, 1) : X\n",
+ "# L, B = size(X)\n",
+ "\n",
+ "# pmask = Zygote.@ignore FF.getlmask(Xt_ms)\n",
+ "# Xp = X .+ 1\n",
+ "# #println(\"min/max X: \", minimum(X), \" / \", maximum(X), \" pad=\", P.padding_token, \" lat=\", P.latent_token)\n",
+ "# #@assert all((0 .<= X) .& (X .<= P.padding_token))\n",
+ "# mX = Zygote.@ignore maximum(X)\n",
+ "# nX = Zygote.@ignore minimum(X)\n",
+ "# @assert (0 <= nX) && (mX <= P.padding_token)\n",
+ "\n",
+ " \n",
+ "# H = m.embedding(Xp)\n",
+ "\n",
+ "# t = ndims(t) == 0 ? fill(Float32(t), B) : Float32.(t)\n",
+ "# cond = m.time_embed(reshape(t, 1, B))\n",
+ "\n",
+ "# cond = to_same_device(cond, H)\n",
+ "# pmask = Zygote.@ignore to_same_device(pmask, H)\n",
+ "# rope = Zygote.@ignore to_same_device(m.rope[1:L], H)\n",
+ "\n",
+ "# for blk in m.blocks\n",
+ "# H = blk(H; cond, rope, kpad_mask=pmask)\n",
+ "# end\n",
+ "# return m.head_combined(H)\n",
+ "# end\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "train_editflow! (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Training (GPU if available)\n",
+ "function train_editflow!(P::FF.EditFlow,\n",
+ " model;\n",
+ " epochs::Int=1,\n",
+ " steps_per_epoch::Int=100,\n",
+ " batch_size::Int=64,\n",
+ " lr::Float32=1f-2,\n",
+ " seed::Int=42,\n",
+ " print_every::Int=25)\n",
+ "\n",
+ " rng = Random.MersenneTwister(seed)\n",
+ " Random.seed!(seed)\n",
+ "\n",
+ " # Move model to device (GPU if available)\n",
+ " model = Functors.fmap(to_dev, model)\n",
+ " opt_state = Flux.setup(Flux.Adam(lr), model)\n",
+ "\n",
+ " for epoch in 1:epochs\n",
+ " for step in 1:steps_per_epoch\n",
+ "\n",
+ " # 1) Minibatch Sampling\n",
+ " x0s, x1s, ts = make_minibatch(batch_size, P; rng=rng)\n",
+ "\n",
+ " # 2) Align and batch\n",
+ " Z0, Z1 = FF.align_and_batch(P, x0s, x1s)\n",
+ "\n",
+ " # 3) Interpolate\n",
+ " Zt, Xt = FF.interpolate_Z_elementwise(P, Z0, Z1, ts)\n",
+ "\n",
+ " # 4) Prepend BOS\n",
+ " bos = P.bos_token\n",
+ " Zt = vcat(fill(bos, 1, batch_size), Zt)\n",
+ " Xt = vcat(fill(bos, 1, batch_size), Xt)\n",
+ " Z1 = vcat(fill(bos, 1, batch_size), Z1)\n",
+ " \n",
+ " # 5) Masks and multipliers\n",
+ " transition_mask = FF.transition_mask_from_Xt(P, Xt)\n",
+ " edit_multiplier = FF.remaining_edits(P, Zt, Z1, Xt)\n",
+ " #@assert size(transition_mask) == size(edit_multiplier)\n",
+ "\n",
+ " # 6) Scheduler scaling\n",
+ " den = 1f0 .- P.κ.(ts)\n",
+ " den = max.(den, 1f-3)\n",
+ " scheduler_scaling = P.dκ.(ts) ./ den\n",
+ "\n",
+ " # 7) Masked state\n",
+ " lmask = Xt .!= P.padding_token\n",
+ " cmask = trues(size(lmask))\n",
+ " Xt_ms = FF.MaskedState(FF.DiscreteState(P.k, Xt), cmask, lmask)\n",
+ "\n",
+ " ts_d = to_dev(ts)\n",
+ " Xt_ms_d = to_dev(Xt_ms)\n",
+ " Tmask_d = to_dev(transition_mask)\n",
+ " Emult_d = to_dev(edit_multiplier)\n",
+ " sched_d = to_dev(reshape(Float32.(scheduler_scaling), 1, 1, :))\n",
+ "\n",
+ " # 8) Forward + loss + update\n",
+ " loss, grad = Flux.withgradient(model) do m\n",
+ " M = m(ts_d, Xt_ms_d)\n",
+ " l = FF.edit_loss(P, M, Tmask_d, Emult_d, sched_d; eps=1f-8)\n",
+ " if isnan(l)\n",
+ " println(\"Maximum element of M: \", maximum(M))\n",
+ " end\n",
+ " l\n",
+ " end\n",
+ " Flux.update!(opt_state, model, grad[1])\n",
+ "\n",
+ " if step % print_every == 0\n",
+ " @info \"train\" epoch step loss=Float32(loss)\n",
+ " end\n",
+ " end\n",
+ " end\n",
+ "\n",
+ " return Functors.fmap(to_cpu, model)\n",
+ "end\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Init process and model\n",
+ "K = PM.K\n",
+ "P = FF.EditFlow(K; bos_token=0, impl=\"positionwise_reparam\")\n",
+ "model = EditFlowModel(; d=128, num_heads=8, nlayers=4, rff_dim=128, cond_dim=128, K=K)\n",
+ "nothing"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.972092f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.547047f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.814123f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.86299f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.428902f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.44519f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.755375f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.63697f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.66145f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.980005f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.676495f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.823967f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.604435f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.628433f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.269749f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.370718f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.981895f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.29564f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.05313f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.661705f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.352457f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.975006f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.44165f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.114304f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.830158f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.29099f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.880302f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.773508f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.42518f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.253447f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.465221f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.716324f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.315796f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.590342f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.11945f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.802334f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.715399f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.133106f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.506771f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.31068f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.549904f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.21441f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.020954f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.809784f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.816322f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 11.10005f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.037218f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.556658f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.747284f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.18045f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.459362f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.183155f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.935974f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.975842f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.257816f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.16243f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.237125f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.72068f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.045029f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.03865f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.980974f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.974388f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.994131f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.29249f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.863419f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.127146f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.681866f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.440746f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.46564f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.074389f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.455484f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.068605f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.59634f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.282074f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.803133f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.92038f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.747942f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.94925f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.425396f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.448444f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.657696f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.587557f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.831514f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.390194f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.020035f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.410772f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.76912f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.478642f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.846231f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.842266f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.358135f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.717499f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.117746f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.582458f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.147333f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.345675f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.380396f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.366549f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.646837f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.5616f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.525606f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.963268f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.720358f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.79974f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.13392f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.455585f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.213562f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.929577f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.667606f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.59198f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.14951f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.727703f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.535524f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.531374f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.03439f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.629353f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.897205f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.220057f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.027626f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.112152f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.379562f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.807442f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.60457f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.335194f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.965631f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.327007f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.268284f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.73925f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.675303f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.893906f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.89526f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.98605f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.154684f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.895681f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.107021f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.837322f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.70697f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.26533f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.145313f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.1321f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.53107f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.040863f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.176334f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.094204f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.033104f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.512857f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.793964f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.60687f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.829811f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.069487f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 17.734646f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.18549f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.256248f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.401571f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.009022f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.209995f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.12656f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.539986f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.397396f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.079025f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.479889f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.610525f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.227245f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.67744f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.710548f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.983185f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.211796f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.314728f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.877901f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.496384f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.785358f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.737282f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.9102f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.662106f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 16.906403f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.716015f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.618082f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.765678f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.711426f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.011974f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.7238f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.592659f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.709558f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.07872f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.348526f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.064106f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.897255f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.324472f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.630274f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.075851f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.555912f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.24704f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.994556f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.781471f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.19625f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.328653f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.941914f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.934614f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.049961f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.934216f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.771145f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.813606f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.86628f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.586544f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.481121f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.066532f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.385017f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.676384f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.874306f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.355312f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.09821f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.159306f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.657879f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.845825f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.372375f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.752993f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.873785f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.484112f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.912094f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.653551f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.556973f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.944939f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.665516f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.347084f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.694008f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.613409f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.544956f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.902126f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.099602f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.433033f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.63831f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.330196f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.579561f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.511242f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.326582f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.177572f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.340986f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.477205f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.986431f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.133919f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.872013f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.14673f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.704659f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.198008f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.918495f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.065418f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.116703f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.001947f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.781761f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.540459f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.281252f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.846443f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.743122f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.816837f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.741148f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.262049f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.01141f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.787575f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.283468f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.458675f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.277485f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.03348f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.936434f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.165476f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.269474f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.315693f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.033718f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.826042f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.53991f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.090122f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.082125f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.51723f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.586445f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.018702f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.69442f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.83265f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.189922f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.178204f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.848724f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.149426f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.197594f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.3241f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.188025f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.411463f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.432335f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.71156f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.088894f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.21531f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.149452f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.175003f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.178764f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.635054f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.653725f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.785437f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.671728f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.6824f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.098778f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.858032f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.040945f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.54076f0\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "EditFlowModel(\n",
+ " Embedding(22 => 128), \u001b[90m# 2_816 parameters\u001b[39m\n",
+ " Chain(\n",
+ " RandomFourierFeatures{Float32, Matrix{Float32}}(Float32[-4.5109034 -3.5286963 … 9.479959 7.8329725]),\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " [\n",
+ " TransformerBlock(\n",
+ " Attention(\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " identity,\n",
+ " identity,\n",
+ " Onion.var\"#32#34\"(),\n",
+ " 16,\n",
+ " 16,\n",
+ " 8,\n",
+ " 8,\n",
+ " ),\n",
+ " StarGLU(\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(512 => 128; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " NNlib.swish,\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.9967958, 0.9869625, 0.99037206, 0.9952497, 0.9702036, 0.9800837, 0.9745326, 0.9878916, 0.9594757, 0.9897762 … 0.9973829, 0.98189306, 0.99930227, 0.9924687, 0.96413124, 0.98626226, 0.98451954, 0.99558693, 0.98469424, 0.9983752], Float32[-0.0005225724, 0.008076679, -0.004573487, -0.008991586, -0.0022569797, 0.00772917, 0.022327727, 0.0013664486, -0.006174539, 0.00085590524 … -0.0055099158, 0.0036732075, -0.001059735, 0.012229179, -0.00652443, 0.000418949, 0.0061954665, 0.0028194247, -0.0041092695, 0.00022841303], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.98412365, 0.98356694, 0.9991844, 0.98061776, 1.0074458, 1.0001413, 0.98833823, 0.9987704, 0.991204, 0.99532646 … 0.9848799, 1.0059643, 0.98044896, 0.98279643, 1.0155826, 0.9848778, 0.9933505, 0.9947882, 0.9984975, 0.99049044], Float32[0.0103082, 0.010853426, -7.58663f-5, 0.009344174, 0.004389455, -0.0016753467, 0.0062471745, -0.0046117036, -0.016211234, 0.015867772 … -0.012600643, -0.0019048655, 0.0023564878, 0.008244524, -0.00075314543, 0.0050747017, -0.006136866, -0.0053728544, -0.0018225668, 0.023820948], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " identity,\n",
+ " ),\n",
+ " TransformerBlock(\n",
+ " Attention(\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " identity,\n",
+ " identity,\n",
+ " Onion.var\"#32#34\"(),\n",
+ " 16,\n",
+ " 16,\n",
+ " 8,\n",
+ " 8,\n",
+ " ),\n",
+ " StarGLU(\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(512 => 128; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " NNlib.swish,\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.99398494, 0.99072254, 0.98964727, 0.9913998, 0.96825975, 0.9956356, 0.9806926, 0.9927313, 0.9783374, 1.0013367 … 0.9955111, 0.9714232, 0.9932761, 0.9916518, 0.97599345, 0.99484235, 0.9863062, 0.9868813, 0.99386036, 0.9897667], Float32[0.002271547, 0.0012500598, -0.0013109404, -0.009307533, -0.005532772, 0.00332578, -0.0062586013, -0.004487046, -0.009959927, -0.001968619 … -0.0092587015, 0.0016701458, 0.004358063, -0.0034356923, 0.008127138, -0.0012910413, 0.01754202, 0.01152308, -0.0062666866, 0.011563656], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[1.0095794, 1.0033473, 1.0020524, 1.0036801, 1.0157589, 1.0096356, 1.0005842, 1.0092266, 0.9975341, 0.98216057 … 1.0134289, 0.9880383, 1.0035987, 1.0086101, 1.008442, 1.0066518, 1.0115547, 1.0150577, 0.9883698, 1.0045927], Float32[0.0018625382, 0.0074362713, 0.010829576, 0.00023766467, -0.009477628, -0.005826937, -0.001142101, -0.016898308, -0.012365104, 0.01040461 … -0.0031639615, -0.008584582, -0.012951189, 0.0051505445, -0.0012443908, 0.008775254, 0.002358304, 7.299369f-5, -0.0044311574, 0.01911879], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " identity,\n",
+ " ),\n",
+ " TransformerBlock(\n",
+ " Attention(\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " identity,\n",
+ " identity,\n",
+ " Onion.var\"#32#34\"(),\n",
+ " 16,\n",
+ " 16,\n",
+ " 8,\n",
+ " 8,\n",
+ " ),\n",
+ " StarGLU(\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(512 => 128; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " NNlib.swish,\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.9964801, 0.9907213, 0.9829918, 0.9904836, 1.0075997, 0.9931966, 0.967814, 0.994991, 0.99343467, 0.9698302 … 1.0127897, 0.98682904, 0.9882866, 0.9758389, 0.9728117, 1.0221164, 0.97261125, 0.9949346, 1.0151469, 0.99335915], Float32[-0.014417081, 0.006284324, -0.009420766, 0.0028740377, -0.007851509, -0.0016916802, 0.00028211612, 0.004104854, -0.0010160299, 0.0028311377 … 0.0061248355, -0.003470834, 0.0037332277, -0.00510081, 0.00078595727, -0.0052126795, 0.0049999044, -0.007494009, -0.0076053017, -0.0034516104], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.98102707, 0.9881729, 1.0145462, 1.0161818, 1.010741, 1.0101572, 1.0054857, 0.9960153, 1.0076207, 0.9982568 … 1.0110102, 0.97780424, 1.0103778, 1.0270656, 1.0007466, 1.0155469, 1.0250667, 0.9943188, 1.0158885, 0.9926699], Float32[-0.020408258, -0.007663947, -0.002164433, 0.0045097587, -0.004046006, -0.0084987385, -0.0032783668, -0.0019530786, -0.0018806072, 0.0014927586 … 0.002657746, -0.004882839, -0.0094046, 0.0029575205, -0.010758868, 0.005579408, -0.00012946833, -0.0011488283, -0.0051159984, 0.012121034], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " identity,\n",
+ " ),\n",
+ " TransformerBlock(\n",
+ " Attention(\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " identity,\n",
+ " identity,\n",
+ " Onion.var\"#32#34\"(),\n",
+ " 16,\n",
+ " 16,\n",
+ " 8,\n",
+ " 8,\n",
+ " ),\n",
+ " StarGLU(\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(512 => 128; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " NNlib.swish,\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.97678447, 0.9843075, 0.97703946, 1.0089988, 0.9998969, 0.99314827, 1.005877, 0.9890229, 0.98229724, 0.9969458 … 0.9900987, 0.99567735, 0.9876625, 0.99173796, 1.0165083, 0.9832781, 0.9971774, 1.0104102, 0.9998328, 0.99126804], Float32[-0.0036148801, -0.0061858366, 0.0043971017, 0.0063074683, 0.005699646, 0.0021153758, -0.0040238057, 0.005645371, 0.001263952, 0.009946144 … -0.0067127184, -0.0050887824, -0.0009767002, -0.016533986, 0.011165631, -0.00066996843, 0.0014427631, -0.007045365, -0.0015280164, -0.0040101036], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[1.0210867, 1.0158178, 1.0208023, 1.047025, 1.0237092, 1.018517, 1.0044487, 0.9989978, 0.99009013, 1.0100825 … 1.01286, 1.0051826, 1.0109634, 1.0528429, 1.0127131, 1.0134708, 1.0189143, 0.9862647, 1.0223742, 0.98723614], Float32[-0.0045142854, -0.008482742, -0.0018320186, 0.0036619315, -0.010827755, -0.0021696852, -0.010647439, -0.0046669086, -0.007829798, 0.005749223 … -0.005271609, -0.015943931, 0.00100527, -0.01039895, -0.005209468, 0.00091932324, 0.0036592623, 0.009832175, -0.005363889, 0.01747159], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " identity,\n",
+ " ),\n",
+ " ],\n",
+ " Dense(128 => 20; bias=false), \u001b[90m# 2_560 parameters\u001b[39m\n",
+ " Dense(128 => 20; bias=false), \u001b[90m# 2_560 parameters\u001b[39m\n",
+ " Dense(128 => 1; bias=false), \u001b[90m# 128 parameters\u001b[39m\n",
+ " Dense(128 => 1; bias=false), \u001b[90m# 128 parameters\u001b[39m\n",
+ " Dense(128 => 1; bias=false), \u001b[90m# 128 parameters\u001b[39m\n",
+ " RoPE{Matrix{Float32}}(Float32[1.0 0.5403023 … -0.87528455 -0.065975994; 1.0 0.95041525 … 0.9552474 0.8159282; … ; 1.0 0.9999995 … -0.57972294 -0.5789079; 1.0 0.99999994 … 0.2726629 0.27235872], Float32[0.0 0.84147096 … -0.48360822 -0.9978212; 0.0 0.3109836 … 0.29580808 0.5781532; … ; 0.0 0.0009999999 … -0.8148137 -0.8153929; 0.0 0.0003162278 … 0.9621096 0.9621958]),\n",
+ " 20,\n",
+ ") \u001b[90m # Total: 84 trainable arrays, \u001b[39m1_339_648 parameters,\n",
+ "\u001b[90m # plus 3 non-trainable, 65_600 parameters, summarysize \u001b[39m5.365 MiB."
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "model = train_editflow!(P, model; epochs=50, steps_per_epoch=150, batch_size=256, lr=1f-4)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "MersenneTwister(42)"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "rng=Random.MersenneTwister(42)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "10-element Vector{String}:\n",
+ " \"EVQLVEWGGGLVQPVRS\"\n",
+ " \"QVQLVKSGSPLKKPGADKV\"\n",
+ " \"QVQLVESGGGLVKCG\"\n",
+ " \"QMQLQESGPGLVKPGASVK\"\n",
+ " \"EVQEVGGGLVQPGGLSLSL\"\n",
+ " \"EVTL\"\n",
+ " \"QVQLVESGGGVVQPGRSGA\"\n",
+ " \"EVQLVQKGGL\"\n",
+ " \"NTLQESSGVGLV\"\n",
+ " \"EVYVVEHGGGL\""
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "model_samples_any = sample_gen_n(P, model; n=10, ts=0f0:0.01f0:1f0, rng)\n",
+ "model_final_states = map(final_state_from_gen, model_samples_any)\n",
+ "model_strings = [state_to_PM_string(P, s) for s in model_final_states]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "10-element Vector{String}:\n",
+ " \"EVQLVESGGGLVKPPGQLR\"\n",
+ " \"QVQLVQSKAEVKKPGASVKV\"\n",
+ " \"EGQRVECGGGGGQRG\"\n",
+ " \"EVQLVESGGGLV\"\n",
+ " \"QVQLVQSGAAV\"\n",
+ " \"EVQLVESGGGLVQPGGSLTL\"\n",
+ " \"QVQLVESGGGVVQPCR\"\n",
+ " \"QVLLVQSGTEVFKPGASMKV\"\n",
+ " \"QVLLVQSTAEVKK\"\n",
+ " \"QITLKESDPTLVKP\""
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "train_states = [FF.DiscreteState(P.k, sample(PM; rng=rng)) for i in 1:10]\n",
+ "train_strings = [state_to_PM_string(P, s) for s in train_states]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1000-element Vector{String}:\n",
+ " \"EVLHVVEGGG\"\n",
+ " \"QVQLVQSGAEAK\"\n",
+ " \"QVQLQESGPGLAKPSEVLSLV\"\n",
+ " \"EVQLVESGGGLVKPGHSLR\"\n",
+ " \"QVQLVKTGMEVKKPGASVK\"\n",
+ " \"QVQLQESTPGLVKPSVSETL\"\n",
+ " \"QVQLVQSGAAVKTPGASV\"\n",
+ " \"EVQLVESGGGLV\"\n",
+ " \"QVQLVQSGGALV\"\n",
+ " \"MVMLVPSGAEVKKP\"\n",
+ " \"QVQLVRSGQALVK\"\n",
+ " \"QVQLVQSGAAV\"\n",
+ " \"QKQLLQSGGVLVKPSTLSL\"\n",
+ " ⋮\n",
+ " \"EVQLVESCSGGLVKPGGGS\"\n",
+ " \"QVQHVQSGAEYKKPGASK\"\n",
+ " \"QVQLVQSDAEV\"\n",
+ " \"QVQLVQSGAEVEQP\"\n",
+ " \"QNLKQPSGAEVKV\"\n",
+ " \"QVQLVKSGAGLVKPGASVKV\"\n",
+ " \"QVQLVQYGQGNVKKPGASVRT\"\n",
+ " \"QVQLVYSGAEVK\"\n",
+ " \"QVLLVESGGGVVQTGAS\"\n",
+ " \"QVQLVQSGHAEVKRPGA\"\n",
+ " \"QVQLQQSGPAEVKPKPCSL\"\n",
+ " \"QLQLVQSGAEVKK\""
+ ]
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Sampling and Levenshtein plot\n",
+ "using Random\n",
+ "n = 1000\n",
+ "# 100 model samples (final states → strings)\n",
+ "model_samples_any = sample_gen_n(P, model; n=n, ts=0f0:0.01f0:1f0, rng=rng)\n",
+ "model_final_states = map(final_state_from_gen, model_samples_any)\n",
+ "model_strings = [state_to_PM_string(P, s) for s in model_final_states]\n",
+ "\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\u001b[32mProgress: 100%|█████████████████████████████████████████| Time: 0:00:00\u001b[39m\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "m = 1000\n",
+ "p=100000\n",
+ "# Build training strings from PM parents (the data PM was built on)\n",
+ "train_states = [FF.DiscreteState(P.k, sample(PM; rng=rng)) for i in 1:m]\n",
+ "train_strings = [state_to_PM_string(P, s) for s in train_states]\n",
+ "\n",
+ "# Independent validation strings sampled from PM\n",
+ "val_states = [FF.DiscreteState(P.k, sample(PM; rng=rng)) for i in 1:p]\n",
+ "val_strings = [state_to_PM_string(P, s) for s in val_states]\n",
+ "#val_strings = [s for s in val_strings if !(s in train_strings)]\n",
+ "\n",
+ "# Plot normalized Levenshtein vs. training set (distinct val/train)\n",
+ "plt = plot_lev_dist(\"model_vs_true\", val_strings, model_strings, train_strings; title=\"Model vs True (normalized Levenshtein)\")\n",
+ "display(plt)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\u001b[32mProgress: 100%|█████████████████████████████████████████| Time: 0:00:00\u001b[39m\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "model_strings_bos = [\">\" * state_to_PM_string(P, s) for s in model_final_states]\n",
+ "plt = plot_lev_dist(\"model_vs_true\", val_strings, model_strings_bos, train_strings; title=\"Model vs True (normalized Levenshtein)\")\n",
+ "display(plt)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "\n",
+ "n=1000000\n",
+ "val_states = [FF.DiscreteState(P.k, sample(PM; rng)) for i in 1:n]\n",
+ "val_strings = [state_to_PM_string(P, s) for s in val_states]\n",
+ "\n",
+ "\n",
+ "\n",
+ "pLen = plot_len_dist(\"model_vs_true_len\", val_strings, model_strings; title=\"Length distribution: Natural vs Generated\")\n",
+ "display(pLen)\n",
+ "\n",
+ "pAA = plot_AA_dist(\"model_vs_true_AA\", val_strings, model_strings; title=\"AA frequency: Natural vs Generated\")\n",
+ "display(pAA)\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Natural 'A' frequency: 0.047142480905978404\n"
+ ]
+ }
+ ],
+ "source": [
+ "println(\"Natural 'A' frequency: \", (isdefined(Main, :val_strings) ? sum(count(==('A'), s) for s in val_strings) / sum(length.(val_strings)) : sum(count(==('A'), s) for s in val_strings) / sum(length.(val_strings))))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Natural 'A' frequency: 0.04109772423025435\n"
+ ]
+ }
+ ],
+ "source": [
+ "println(\"Natural 'A' frequency: \", (isdefined(Main, :model_strings) ? sum(count(==('A'), s) for s in model_strings) / sum(length.(model_strings)) : sum(count(==('A'), s) for s in model_strings) / sum(length.(model_strings))))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "MersenneTwister(42)"
+ ]
+ },
+ "execution_count": 183,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "rng = Random.MersenneTwister(42)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdZ3zTVtsH4CPZzrCdvUMGIYEwEkYCZTaMsmcLNEDLhkKZpVBGKdCyWvYqkAYo+2kK9CkUCrSssvcIkIQwEsgke9uZlt4P560e13aCQ3EG/l8f8ouPztG5Jcu+LelIYnieJwAAAMaKre4AAAAAqhMSofFavnz5xIkTFQrFm5rh4cOHJ06ceOfOHaFk0aJF48aNKy0tfVNdaNu7d++4ceMePXoklMyePXvatGmG65G6ePHiuHHj/vjjD0N3ZISOHz8+bty4y5cvV3cghBCSkZFx//79K1euPHjwoLi4uLrDqbkyMzMnTpy4bt266g7ktfDwhhQUFEgkEolEUt2BaNq/f//27du1ywMCAgghmZmZb6qjefPmEUIOHjwolDRp0oQQolQq9ZxDXFxcaGjo5cuX9e/0k08+IYScOXNGKHFycpJKpfrPoWJXr14NDQ19/vy5RnloaCghZMWKFW+qo9fz7Nkz+kGuX79+SUmJxtSBAwcSQn777bdKzVOlUoWGhh44cODNhVk5y5YtI4T8+OOP1RUAz/PFxcVbt2719/dnGEb4tpRIJJ06ddq7d29ZWVk1xvbv3bp1KzQ09MmTJ29wni9evCCEdOnS5Q3Os8qIqzbtvs14njfors9rmzt3bnp6+vjx46u+63feecfBwUEkEulZ/+HDhxMnTpwyZUr79u31bNKwYcNOnTrZ2tq+boyvcOjQofXr1x8+fLhu3brq5a6urp06dfL09DRQv5X19OnTXbt2TZgw4d/PqqysbOLEib6+vsHBwf9+brVRRkbG+++/f+XKFRMTkz59+gQEBEil0ry8vJs3b168ePH8+fMRERErV66s7jBf37Fjx5YsWbJnz5769etXdyw1AhIhGNDOnTsN3cXMmTNnzpxp6F609e3bt2/fvlXfr06WlpYKhWLJkiUjRowwNzev7nBqt7KyssGDB1+5cqVdu3ZhYWEeHh7qUxMTE7/55puioqLqCg8MAYmwGmRnZ585cyYxMdHExOSdd95p1aqV+tT8/PwnT57Y2dnVrVs3OTn5zz//zMrK8vHx6dmzp6mpqcasVCrV2bNno6KipFJpp06dGjRokJCQkJaW5uPjY2VlRWdVWlrK87xw6s7c3Lxx48bqMykrKzt9+nR0dLRMJuvWrZuXl5c+S8Hz/IULF8LDw83NzYOCgho1aqRdJyoqqrCwMCAgQP340sOHDx88ePDy5UsrK6s6deq0b9/eysqKEBIbG0sP9KWlpQnRenh4ODg4KJXKR48e2djY1KtXLzU19dSpUykpKb169fLz84uPj09PT2/QoIGFhYVG7wUFBSdPnoyPj3d2du7du7eNjY361IiIiOLi4sDAQI0mjx8/piufEHL//v3U1FRCSExMjBBSkyZNzMzMMjIy4uLi3NzcnJyc1OdA39yEhARzc/NWrVq1bNlSY6XdvXvX1NTUz8+voKDgxIkT8fHxLi4uPXv2tLOz02e16+Ti4tKuXbtdu3Zt3rx59uzZFVdWKpVXr16Nj4/PzMx0cXHp2LGju7u7MDUjI4O+C0VFRcIiW1tbe3t7q1Sq8PBwqVSq8V6np6fHx8err4ro6GiFQtGsWTNCyNmzZ6Ojo21tbUeMGEGnPn36NDw8PCkpSSQSNW7cuGPHjmJx5b6I0tLSEhISnJyc3NzcXjkpPj7+1q1bCQkJJiYmTk5Obdu2dXV1rWDm+/fvv3DhgoeHx4kTJ+iWqc7NzW3Hjh0pKSnaDe/fv3/jxo3c3Fw3N7du3brZ29urT42JicnJyWncuLGZmdmFCxfu378vkUg6duxITx9o4Hn+1q1bd+7cUSqVnp6e3bp104iEruGmTZsyDFPZNfzw4cPk5GRCyIsXL4S3uFGjRlKpVKgTERFx7dq1nJwcV1fXbt26OTo6ageZmJj4xx9/5OfnN2jQoHv37uWv0dqgWg/MvlXy8/P1WaUrV66UyWTqb0GXLl3S09OFCufPnyeEjB49esuWLSYmJkI1X1/f+Ph49VklJSXR83wUwzCzZs2aPn06IeTYsWM8z585c0b7HW/WrBltTtveuXPH399fmCoWi7///vtXLmxWVlbHjh3VZztt2rS5c+eSCs8RFhQU9OvXTyMesVhMz1UMGTJEO9rNmzfzPH/79m1CyODBgzdv3iyskw0bNvDlnyO8dOmSg4ODMB9ra+ujR4+qL0K9evUYhtFYLjpAY+TIkfSlzuQUHR3Nl3OOcNu2bRr5uGPHji9fvhQq0IPnPj4+58+fVw/Pysrq3Llz6rO6d+/e5MmTv/3224rfCJq0fH194+LiTE1NbWxssrKyhKna5wjXrl2rscsoFotnzpypUqlohe3bt2sv8vvvv8/zfG5uLiGkRYsWGjFs3ryZELJ27Vqh5J133iGEXL58WUiZDRo04Hk+Pz9f+1ict7f33bt31Wf4ynOEdHto166d9iS6FR0+fJi+nDt3LstqDgkMCwurYJW2bt2aELJp06YK6miIj4/X+DhIpVK66QoGDBhAN9R3331XqMYwzJdffqkxt0ePHmn8PrO2ttaImQZ56dIlYQ3Xr1+f5/mCgoIGDRpoLG+9evXu3LkjtNU4yE/dunWLTk1OTu7atav6JHNzc/U3l9qwYYPGtxP9tqml5wiRCN8YfRLh0qVL6Sa7f//+yMjIK1eu0B9x7dq1E06/00RYt25duVy+YsWKGzdunDlzpkuXLoSQfv36CbMqLS2ln5Zhw4bdvXs3Pj5+//79Dg4O9NcuTYSZmZmnT5+2t7cXi8Wn/3bt2jU6B5oIvby8evXqdfz48du3b69cudLU1FQsFtPv+vJwHEd/APbq1evmzZvx8fF79+61s7OjXVeQCOfPn08I6du378WLF+Pj4yMiIn799ddhw4Y9ffqU5/kHDx7Qb8D+/fsL0SYkJPB/f/G5u7tLpdKFCxeePn367Nmz9KOrMxFKJBIHB4fx48c/ePDg+fPna9euNTU1NTU1ffjwoVBNn0R4/vz5QYMGEUIWL14shKRQKHhdifDnn3+m31l0GMK1a9f69+9PCGnatGlRUZHwrhFCbGxsbGxspkyZcvbs2WvXrk2aNIkQ4uLiIlTjef6XX34har9ayiMkQp7nZ8yYQQj56quvhKnaiXDOnDnjxo07cuTIgwcPIiMj9+/fT783N27cSCskJiaePHmSEOLm5iYscnh4OF/5ROjh4dG9e/ewsLCrV68eOnSI5/nMzMxmzZpt2LDh4sWLT58+vXLlyrRp01iWdXV1zc/PF5rrM1imadOm5O8fJYKcnBxzc3M7O7vi4mKe53/77TdCiJ+f37Fjx54/f/748eNTp05NmzZNSJPa8vLy6M5TTExMBb2ry87OptvS2LFjz58/Hx0dHRYWRney1Qcc0UTo5eXVpk2bw4cP3717NyQkxNLSkhDy119/CdUSEhIcHBzEYvFnn312+fLlqKioH3/80cHBgWVZ9Wo0EWqv4aysrFeu4UuXLg0fPpwQMmfOHOEtzs3NpYvv6+vLMMyIESP++uuv6OjogwcP0kNEu3fvFnr/9ddfCSH29vb79++Pj4+/ceNG9+7d6ccfidDYvTIRvnjxQiwWu7i4ZGRkqJfTr1rhw0kTISHkzz//FOrk5eXZ2NiIRCIhqRw4cIAQ0rZtW47jhGp//vknbUsTIVWnTh0TExPteGgi7Nmzp/oc6IG1igdD0p9+vr6+6sMUjx8/TruuIBG2adOGEJKTk1PenH///XdCyJQpUzTKaSIkhOzYsUNjks5ESAjp3bu3erXVq1cTQj744AOhRJ9EyPP8559/rv7uCDQSYVlZGT2ZpL7fWVZWRlNCSEgILRGGUy1atEh9bp06dSKEqO8U/ve//2UYRjvraFBPhOnp6ZaWljKZTNgH1WfUaEJCglwur1evnlBCLxKg81RX2UT4zjvv6DO6kp7i3bVrl1CiTyJcs2YNIWTBggXqhT/88AMhZMaMGfTlZ599Rgj5448/XhmDIDIykhBiYmKi/qHQJ/558+apFz558sTU1LRevXrCfGgibNasGT1VQW3atEljg//oo4/I30c7BNevX2dZtm3btkIJTYR6ruFZs2YRQnbu3CmULFq0iBCyZ88ejZpfffUVIeSzzz5TL3zx4oVUKnVzc6N9cRzn6+ursWKLi4vpvn4tTYS4jrDqhIWFlZWVTZ48WeOA2+TJkwkhJ06cUC9s1qyZ+mF3CwuLdu3aqVSquLg4WnLs2DFCyGeffaZ++q179+46TzlU4IsvvtCYAyHk+fPnFTQ5cuQIIWT69OkSiUQo7NWrl8apR230LN21a9cqFaHA2dl51KhRelamH37Bp59+KpfLjx8/bqBLwW7fvh0fH9+kSRP1ETQikYj+sKC/oAX0ILZ6Sbdu3QghsbGxQsnAgQM5jrt7967+Mdjb23/++ecKhYImEj25ubkFBATExsZmZGTo30ofX3zxhT4DhmmGuHnzZqVmPmLECIlEsnv3bpVKJRTu2bOHECJsJHR7u379uv6zpcleLperfygIIcePH++mRniXeZ7fv3+/SCT68ssv1evXr1+/W7dusbGxjx8/Vi+fMWOG+uk6jY9bYWHhf//7X2tra40LYVu3bh0QEHD9+vWsrCz18lmzZr3ZNbx//36GYWg6FHh6evbp0ycxMfHBgweEkKioqMePH/v7+/fo0UOoY2JiUgUX7xoOBstUnXv37tG/9Ho7QU5ODiGEXoUjoL+51NEdndTU1IYNGxJCnjx5QgjRzj1NmjShv2r1pNER7UXnWABBVFQUIYQOhRAwDNO8eXM6qTxjx449efJk7969O3To0K1bt/fee69169b6X1zh6+ur/6gKjfDkcrmPj094ePjTp0/9/Pz0nIn+6DrXGBZECKGHrzXeERcXF3pMTCC8uf8yjC+++CIkJGTbtm2ff/65t7e3dgWVSrVjx46wsLBnz56lpqaWlZUJkzIzMzXGd/xLOn+TPX36dOXKldeuXUtKSqJZh6psGnZ0dOzZs+exY8cuXLhATxw8ffr0+vXr/v7+zZs3p3WGDRu2cuXKb7755uDBg7179+7cuXPnzp0rHlVLz98XFhZqlKenp9NxJfzfB2BpeVJSUlpampWV1bfffqvRRBiQQj+wVMUft8jIyOLiYnt7e3oSQR09sBkfH69+pZDONfzs2bMVK1a8xhrOzMyMi4uTy+Vr167VmER/f7948aJFixY6P/6EEGG110ZIhFUnOzubEHL69Om//vpLY5KNjY3GV7z6CC6KnvPnOI6+pJ9Va2trjWraJRXT6Ij2wld4B9qCggJCiPZAMp1Dy9QNHjz42LFjq1atunr16qVLlxYtWuTo6LhkyZKJEyfqE6r+X9NisVj7ykI6OEU4gv1mlbdO6DedRqevfHNfm1wunzdv3syZM7/55pt9+/ZpVxg5cuRPP/1Up06d3r17u7i40Ej27Nnz6NEj9aT4Rmi/X+Hh4UFBQUqlMigoqE+fPjY2NizLvnz5cuPGjeo7dnoaNWrUsWPH9uzZQxMhPYk1duxYoUKDBg2uX7++aNGiU6dOrVmzZs2aNVKpdPLkyUuWLCkvHdapU4dhmMLCwpSUFGdnZ6F89OjRo0ePJoTk5OSoDz+mv2IVCsW2bdu052ZjY6OxViv+uNG5paenlze3kpIS9RLtNXz//v2goCCFQvEaa5j2XlhYWPGyvPbHvyZDIqw6dDzhnj17Pvjgg38/N/ppTE5OVh/7Tv7+HWpQcrmcEJKamqoxAlCfHRp6+V1WVtaFCxdOnDixf//+Tz/91MLCgp4aqZjGzlYFysrKtPdv0tLSCCHCrpiQe9RHFb72Defom6u9BuiPfY39P4OaMmXK999//9NPP2kcfSWE3Llz56effmrevPnly5fVhy5rHLktD11R2t+n+q+0JUuW5Ofn7969W/0Q96lTpzZu3KjnHNT169fP3t7+v//97+bNm2Uy2f79+8Vi8bBhw9TrNG3a9MiRI0ql8vr166dOndq5c+eaNWuKi4vpyTltdnZ2DRs2fPTo0dmzZz/++ONXxkDfdzc3t4rPJuiJzi0gIOC1Tx8sWbIkLy9v165dNG1Tp0+f1mcN097t7e0rPiBU3qb+749nVCOcI6w6LVq0IIRcvXr1jcyNDnW5cOGCeqFSqbxx44ZGTYlEQgfHv5F+CSH00CI90ivgeV7/E1q2trYffPDB9u3bd+/eTQihIyRpqISQN7JrohFeXl7e06dPzczMhOTt7OzM87zGp1f70C4N6ZW/puklKHSQunr5rVu3yN9rrGqYmJgsXLiQ4zg6IELd/fv3CSH9+vVTz4JKpTI6Olq9mkgkYllW+12Qy+VyuVz7+079Rq8Vu3//PsuyGtfJqN+ctlJMTEyGDRumUCh++eWXc+fOxcfH9+3bV+OyTkoqlXbp0mXFihU3b95kGEbY3nSiKWTt2rX6bIfu7u729vYvXrx4Iz9AmzRpYmJiEh4e/to/yO7fv88wzNChQ9ULtdewzq3a0dGxTp06qampMTExFQdJCLl3757Gpl6p89k1DRJh1Rk+fLhEItmxY4f2dsbzfGU3/REjRjAMs379evUvprVr16anp2vUrFOnjkqlevny5euFrY2ORfz+++/VB54cO3ZMY1yANnpQRR0dci3Mp06dOoSQhISEfx/kmjVr1D+oISEhSqWyX79+wsVPdFA4vVSAUigU2j+caYSvDCkgIKBevXqPHj2iQ/apsrIyOlr1ww8/rGz8MTExmzZtCgsLq2xDQsjIkSMbNWp07NgxYbQtRQ8OC+OtqDVr1uTl5amXiEQiZ2fn1NRUjQNxhBAvL6/U1FT1r7yYmBh63Yg+7O3tOY5LTEwUSrKzs9evX69nc210z3LPnj0aw2Qo7e2NXplQ8YCpSZMm+fj43Lt3b9y4ca8cWsWyLO2UXg6oMVU7gIrJ5fLBgwcXFRUtWbJEe6o+c7O3t+d5Xn1zzcnJ0V7D5W3VY8aMIYTMnz+/gmVp1KhR48aNo6Ki1Mf3FRUV0cHDtRQOjb55U6dO1S4cNWpUq1atvvvuuy+++KJNmzZffPFFq1atHBwcXrx4ce/evb17965YsWLw4MH69xIQEDBt2rRNmza1aNFi9OjRjo6O58+f/+OPP4KCgi5evKh+FLFly5ZXrlwZMmTIgAEDLC0t7ezs6AUbr61jx459+/b9/fff+/Tps2DBAhcXl/Pnz8+bN8/DwyM+Pr6Chs2aNWvXrl3fvn29vb1lMllUVNSCBQsIIcI9Lb29vW1sbOjFXg0bNpRIJO3bt6/sOFhCiEQiefjw4YgRI6ZPny6TyY4cObJ48WJzc3P175ehQ4fu27dv5syZRUVFzZo1i42N/e6779SvEabofX9WrFiRnZ3t6urKMExwcLD2iViWZdeuXTtw4MBRo0YtXbr0vffeS0lJWb169Z07dwIDA0eOHFnZRQgPD//ss8+aNWumcaxPHyKRaNmyZYMGDdJ4O1q3bm1ubk6vHezXr19ZWVlYWNimTZu037iWLVsePXp00KBB7733nlQqrVu3Lh3fOHTo0IcPHw4ePHj58uUeHh737t1bunSph4cHHbr1Sp07d75582ZwcPDy5cu9vb0jIyMXLlxoYWGh/etNT4GBgf7+/hcvXjQ1NXVwcOjdu7f61NGjR+fn5wcHB/v6+jo5OcXFxa1evbq0tLTie6haWFgcOXKkZ8+ee/fuPX/+/MiRI1u0aGFpaZmZmfns2bP9+/cTQtTv87Jo0aITJ07s3bv35cuXY8eObdiwoUKheP78+cmTJ2/evPn06dNKLdGaNWsuXLiwatWqZ8+effTRRz4+Pnl5eTExMb/99ltqauorjyd17tz5xo0bwcHB3377LV3DixYtksvl9LyAoGXLlgzDbNq0qaSkxM3NjWXZDz74wMHBYd68eceOHTt48GBaWtonn3zSqFGjwsLC58+f//nnn+fPnxc2klWrVvXr12/EiBGrVq169913k5OTlyxZUjPvtKyvqr9i421V8SiMvXv30mq7du1SPwlP+fn5CXd2EO4sozF/etds9UvNVCrVsmXLhIsxmjZtev78eXpgR/3a28zMzAEDBgiXOmjcWUbj6RMRERGEkP79+1e8sLm5uT179hTiZxhm9uzZr7yzTFBQkMZ5PnNz82XLlqlfs3Xy5En1U48ad5bRjqS8O8tcv37dxcVFmI+Dg8OpU6c02mrcdqRfv370sUrq1xHyPL98+XL1oTcV3Flm3759GoN0evXqpX7bIOHOMhqR0JuyLl26VCh5jQvqNdCrNsk/ryM8dOiQ+nFRuVz+n//8h174HxERIVSLjY0NCgoSBvTSO8vwPF9UVPT++++rv++ff/75999/T3RdR5iamqoRUkFBAb1QRNClS5ezZ88SQgYOHChUq9TTJ+gFhUTt8kHBzJkzNcagsSw7YsQIekuEiqWkpEycOFH7poZ2dnazZs1Sf095ns/IyBg6dKjGLWzMzc1HjRol1KHXMNBbEwh0XpqZkJCgkdEJIZaWlrNmzRLq0OsIU1JSNMLWXsOdO3c+d+4c+edFtDzPr1+/Xv3eRsL3T3Z29vDhwzXGcpuZmQ0ZMkS9+bZt29QHHPn5+dHTNLX0OkKGxxPq3xBe7Zk42pydnYWbb5WUlFy/fv3Zs2ccxzk7Ozdu3LhevXpCzaKiouTkZAsLC/XNlBCSnp6en5/v4uKiMeCtrKwsJSVFKpXSr+AOHTpcuXIlNjZW45ahHMelpqYWFhaamJjQ2zAmJSUVFxfXrVtX/QNcUlKSmJgolUq1s7W2W7du3b9/39TUtH379vXq1cvKysrJyXFychK+auPj44uLi318fIT8l5aWdvfu3ZSUFI7jPDw8WrZsqXOYa1FREa1jb29vaWlZXFyclJQkk8m0zwClpaXRuzsKqyUuLo7jOC8vr6KiojNnziQlJTk6Onbt2lX7ZqSEkCdPnly5coXjuObNmwcGBtKVL5fLtYfA5eTk0Ku43N3dJRJJXl5eamqqvb29xi1MFQrFxYsX4+LipFJpq1atNG7LyfP88+fPJRKJxhCn/Pz89PR0W1tbYW0oFIrk5GRTU1ONmz5rKC0tTUhI0J4hISQ7O5sOVHZ2dlYfrJiZmUnH1js7O3fu3NnS0jIlJUWpVLq5uWnsENNNq6SkRGPN37x5Mzw83MzMrH379t7e3nl5eRkZGXZ2dsJ+Et20PD09dV4bc+fOHfp7y8/PLzAwkG5y6l1kZ2dnZGQ4OTnpM8iIvmWEEEdHRzqMS11BQcHt27cTExMLCwtdXV2bN29OD7/rSalUXrt2jTa3tLRs1KiRv79/edfwJCcnX716NSMjw8LCwt3dvWXLluqrXedK5jjuxYsXpqam2lG9ePHixo0b2dnZ1tbWdG7qWVmfNczzvL+/v841LKDvHSGkTp066vNPSUm5evVqWlqaXC53d3cPDAzUXrdpaWlnz57Nz8/38fHp2LEjz/Px8fHm5ubqP0BrCyTCt8qDBw8CAgI8PT0rPt0NAAACnCOsxUJDQx8/fjxgwABPT8/s7OwbN258/fXXKpWKnngDAAB9IBHWYkVFRevXr1cfEiaTyVavXk2HfgEAgD5waLR2S0hIuHXrVkpKikql8vDwCAoK0jhlBQAAFUMiBAAAo4YL6gEAwKghEQIAgFFDIgQAAKOGRAgAAEYNiRAAAIwaEiEAABi1WnxB/eLFi7/++uvqjqIqaDw8thappZHX0rBJjY/8+Yu43FwdzxLiCc8Q3U9ddnF2cHKquY8+r+ErvDz0qjn9n3T91qvF1xGKRKLS0tLauBVWVn5+vs4bRtdwPM8rFArte/XWfAUFBTKZrDZ+TdTwTWXI4A+9LGRyC81bafM8RxhGOxe+TEmWedZbtXpVVQVYaTV8hZenpKSE53ntZ2sYrVq8RwgAtU497wZOrm4ahRzHMQyj/cuDeXA3t6oCA2P29u9OAQAAVACJEAAAjBoSIQAAGDUkQgAAMGpIhAAAYNSQCAEAwKghEQIAgFFDIgQAAKNmXBfUHzlyZNmyZdUdRaXV8Ns4sSx74MABLy+v6g4EAOB1GFcijI6O9vf3nzp1anUH8lYZN25ccnIyEiEA1FLGlQgJIc7OzoGBgdUdxVulNt5NFABAUHMPuAEAAFQBJEIAADBqSIQAAGDUkAgBAMCoIRECAIBRM/ZEOGnKNKaq7Nu3r7oX9//R51NXdxQAADWC0V0+oSE3L//9b3Y26zvS0B2dWj09Ly9PveTRo0dff/314MGDg4ODacnMmTOHDx8eEBCgO9Tc3EuXLvXt2/ffB9OwYcNDhw7hMhIAAII9wmqUnp5++PDhGTNmKBQKWvLnn38mJyeXVz8uLm7SpElVFR0AgLFAIqxOzs7OLVq02Lhxo0Z5amrq2rVrR48ePWPGjOvXr9PCrVu35ubmzps3b968eQUFBYcOHbp8+TKd9OzZs++//54QUlJSMm/evCdPnsyaNWv58uUqlWrPnj2TJ0/+5JNP9u3bh8OhAADakAir2YoVK9asWZOZmale+OjRI57nhwwZ4u/v//7779++fZsQ0rBhQxMTk8DAwMDAQIlEcuLEiVu3btH6cXFxu3fvJoSUlpauXLlywoQJLVq0CAwMLCoqCg8P79GjR9++fUNCQpYvX17lywcAUNMZ+znCaufv79+zZ89Vq1atXLlSKOzUqVOnTp0KCgrS0tKGDRt26NChli1bdunSZe3atR9++OEr5/ndd9+1bduW/r9+/fqSkpKUlJR58+Z9+eWXCxYsMNSSAADUTkiE1W/58uXNmzefNm2aUPLgwYMRI0YwDOPg4JCYmNiyZctKzdDf35/+o1Qqhw8fHh4e7uXlVVxcXMEJSAAAo4VDo9XPy8vro48+Un8+1Lx58yZPnhweHn769OmhQ4fSc3sMw6i3kkgkpaWl9P/8/HyNSfSfXbt2lZWVxcbGnj17dr7sXfAAACAASURBVP369ThHCACgDYmwRli4cGFYWNjLly/pS4VCYWJiQgjJyMgQrj60s7PLzs4uKCigL+vXr3/p0iWe50tLS3ft2qVztsJ8OI7btGmTwRcDAKAWQiKsEVxdXSdPnpydnU1fzp8/f/bs2W3atOncuXNQUJBQZ8yYMY0aNbK1tc3IyBg7dmx8fHz9+vX9/f29vb11znbUqFFRUVH+/v6NGzd2cXERyiUSicb+JQCA0TL2c4Qsy9z7JSTu2glDd5T0KJwJaqJeEhQUlJCQILz87rvvvvvuO/p/jx49kpKSUlJS3NzcRCKRUOf777+nl0lQ9+/fT0pKsrOzMzMzoyUymUz9+KeTk1NERERycrKNjY1MJlu1ahUtf/z48ZtePgCA2srYE+GCL+c+fPiwSroK7tixo/61TU1NPT09X1mtTp06FVdgWdbNzU3/fgEAjI2xJ0Jvb28nJ6eq6cva2rpqOgIAAP0ZeyL8bNrUvXv3SSQGXw+FRcU/hIaOHj3a0B0ZlEqlKigosLKyqu5AAADeGGNPhIoCxZpJI4Z17WDojmaH/ke4p6i6iIiIdevW3bt3TyQS1a9ff+TIkT179qyykSzR0dEJCQndunXTs/6jR4969eqlfmoTAKC2w6jR6nThwoX27du7urpu37599+7dvXv3njVrlsbt1gzq0qVLoaGhVdYdAEANZOx7hNVr0qRJn3/++TfffENf+vn5DR06VNgdPH/+/IEDB4qLiwcMGDBgwABCSHh4+L179+zt7cPCwhwcHL788ktnZ2da+T//+c/Zs2dNTEzGjRvXqlUrQsjx48dZlo2Njb148eI333xTXFz8008/xcXFOTs7T506tX79+ikpKb/++uvz58/nzZtna2s7Z84cQsjhw4dPnDjBMMzHH38sjO45ceLEwYMHLS0t38hDoAAAahTsEVab58+fP3r0aOTIfzwKUSKRiMViQkhYWNikSZO6d+8eHBy8cOHCvXv3EkIiIyPnzp174sSJMWPG5OXlffTRR7TVnDlzdu7cOWzYsE6dOr3//vvh4eGEkHPnzo0ePTotLW306NHW1taRkZH0Rm4+Pj7vvvtuVlaWXC5v1KiRo6Nj165d27dvTwhZuXLlypUrBw4c2KtXr9GjR//111+EkJMnT44fP75fv36dO3eeNWtWFa8lAABDwx5htUlJSSGECNc2rF69+tmzZ4SQyZMnN2vWbNGiRT/++CO9mt7U1HTu3Lk0ZVpZWW3dupVhmMDAQEdHx9LS0vz8/M2bNyclJdnY2BBCkpOTQ0NDQ0JCCCGtW7devHgxnf/HH39cWlqamprq6up65MiRc+fODR48uFGjRvHx8V27diWElJSULFmyJCoqil62kZubGxIS0rlz5w0bNixatGjQoEGEkKysLGH/FQDg7YBEWG0sLS0JIZmZmfSeL76+vlZWVgsXLuzTp4+vr29sbOz06dPp3mFpaakw0Mbb25seO7W1teV5Pj8//8mTJyqVShjwolAomjT5/yv3GzduLHT3n//856uvvvL29razs4uJiRFu5yZ48eJFUVERTXiEkMLCQnphSUxMjHAX72bNmhlkXQAAVB8DJsIlS5Zs2rRJpVINGzZs06ZN9DtdoFQqFyxYcOfOncTExDNnznh5edHyOXPm/PrrrwkJCR4eHvPmzRs3bpzhIqxevr6+9vb2p06dGjVqFCGkf//+hJA1a9YQQkxNTWUy2YEDB3x9fTVasazm0Ww7OztTU9MbN26o34OGEu6+zfP81KlTL1++THNkjx49hBt5C3eisbOzYxjmwoULMplMfSbW1tbCvd+qciAPAEDVMNQ5wuPHj2/fvv3u3buxsbE3b97cunWrRgWVSiWXy2fMmBEbGys8RYEQIpfLjx49qlAofvjhh+nTpwvPZ3/7iMXixYsXz50799SpUzQbZWVlKZVKQgjDMMHBwYsXLy4qKiKElJaWPnjwoLz5eHt7N2jQYMWKFXQmdB9Row69N3dZWRkh5ObNm/TkHyHEwcEhPj6eltvZ2XXu3Pnrr79WqVSEEKVSGRUVRQjp06dPSEhIWVlZWVmZ9vsIAFDbGSoR7tq1a/z48R4eHjY2NjNnztR+PIKFhcWSJUvoYEh1ixYtaty4sVgsfu+995o3b37v3j0DRVgTTJ48+dtvv508ebKFhYW7u3tAQMDIkSPpecF169aZmZl5eXn5+fl5enoeOXKEEGJiYiKXy4XmNjY2DMOwLHvo0KGLFy96eHg0bty4SZMmdLCMubm5cA9SlmVXrlzZqVMnf3//L7/88oMPPqCTevTo4e7u7uPj06lTJ0LI3r17Y2JiPDw8/Pz8GjRocOXKFULI7NmzJRJJ3bp1Gzdu3LhxY1xNDwBvGUMdGn3y5MmwYcPo/35+ftr7KK+UnJz88OHD1q1bV1AnOztbOFRoYWGhcfRVHyzL7jj516l7UZVtWFn3n8a26KGZ9QkhY8eOHTt2bF5eHsuy6knO0tJy586dHMfl5OTY2trSwg8//FD9CfUZGRn0Hy8vrz///LOkpKSwsFBIVOoPOCSETJky5ZNPPlEqlep3ejMzM/v111+Fly4uLocPH6anJIVqcrn8yJEjCoVCLBabmpoKdwYHAHg7GCoRZmdnC1/rFhYWSqWyqKhI2EF5paKiomHDho0ZMyYgIKC8OhzH+fj4CC+Dg4PpCbYKFBcXa5Qs+Prru3fv6hnVv/Exy3bu3Lm8qXTgjDaWZYUs+EomJib06YOvXYGSSCTat0XVOHGojud5pVKp8XBgobw2Pg1YoVBwHFcbn1QlPK6yZlKpVCpORY+9q+NUKoZltVc4z6lKSkq1N62ao4av8PKUlJTwPF9SUlLdgVQFMzMzYbREeQyVCO3s7PLy8uj/ubm5crlc/yxYUlIyePBgFxeXdevWVVCNZdnMzEztwSMVMDU1pWfdBN7e3uU9zA/0xDCMVCq1sLDQKOd5XmM3t7ZgGEYmk9XGREgI0X4jag6RSCRiRdqjupi/aZazIhOJpCYvEanZK7w8NBGamppWdyA1haHOETZs2FAY3/HgwYOGDRvq2VClUo0cOdLExGTfvn3aHxgAAIA3y1B7hOPHjx8xYsTQoUOtra1Xr149ZcoUWv7JJ5+MGTOmXbt2hJD79+/TffPIyMj8/PzmzZuLRKKPPvooIiJix44dNI+6uLi4uroaKEiA2ujs2bOrli9neE57EsdxOo+RiEzN/nvkiP5HZQCMiqESYdeuXefOnduvX7+SkpLhw4dPmDCBlqempgoHJ7/44ovs7OzAwMDly5cTQs6fPy+Xy+Pi4szNzadNm0brjB8//tNPPzVQkAC1UXZ2tqe93Xsdu2hPUqk4kUhHIvzxwE8lJSVIhAA6GfCC+hkzZsyYMUOj8OjRo8L/p0+f1m71Fl84CPCmiFjWzFzH8CWVSoUTCgCVhVusAQC8nUpKSnSOay0tLeV5XucYcmtr60qNQHw7GFcilEqlixcvxhP43qz8/HypVFrdUQCApvnz5z+4eVM7sQl3WNQo5zjOx8/PCG8gZVyJcMqUKSNGjKjuKCqtoKCgJl+EwDCM9nWHAFDtlAXK7m3a1G/op1HOcxwhhNFKkPHPn92Ni6ui4GoS40qEIpGIPquodhGLxbXxWiUAgFrB6I4FAwAAqEMiBAAAo4ZECAAARg2JEAAAjBoSIQAAGDUkQgAAMGpIhAAAYNSQCAEAwKghEQIAgFFDIgQAAKOGRAgAAEYNiRAAAIwaEiEAABg1JEIAADBqxvUYJgAYPXLUi2dPKtVkwIfBn3/+uYHiAah2SIQAxiUvJ2fkgIF2Dk561g+/cz0nJ8egIQFULxwaBQAAo4ZECAAARg2JEAAAjBrOEQLA2y8pKSktLa1STerUqePo6GigeKBGQSIEgLff/C/n56e+lJhI9KxfVFTs7d903bp1Bo0KaggkQgB4+3FlZe+1aefmWU/P+o+jHiSVlBg0JKg5cI4QAACMGhIhAAAYNSRCAAAwakiEAABg1JAIAQDAqCERAgCAUUMiBAAAo4ZECAAARg2JEAAAjBoSIQAAGDUkQgAAMGqGSoRpaWkDBw50cHBo3rz5uXPntCvcunVr6tSp77777sSJE9XLHz9+3KVLF1tb26CgoMjISAOFBwAAQBkqEU6dOtXCwiI2Nvarr74aOHBgbm6uRoWXL186Ozs3btz4yZMn6uXBwcFBQUEJCQl9+vQZOHAgz/MGihAAAIAYKBFmZmYeOXJk6dKlFhYWH374YZMmTQ4cOKBRp3///gsWLGjRooV64c2bN+Pi4ubPny+TyWbPnp2Tk3Px4kVDRAgAAEAZJBE+e/ZMLpd7eHjQl82aNXv8+LE+DaOjoxs1amRiYkIIYVnW398/OjraEBECAABQBnkeYVZWloWFhfDSysoqKSnp9RpmZGSUV5njOJFIJLwcP3782/oUzYKCguoO4XXwPK9UKmvjwW2FQsFxHMMw1R2IboWFhRzHqVQq7Uk6CwkhHMcVFBTQJVKpVKpymuuk4riSktL8/PzXDlg9PBWn0u6aU6kYltVe4TyneoNdczyv/1JzHFda+uqua/hns7SslNe11DzH8YSwWp9NFacqU5W9kRVec5iZmUkkr3ggs0ESoa2trfr2kZuba29v/3oN7ezsyqvMsmxpaSnLGsXAV/XfB7UFz/Msy8rl8uoOpNIYhpHJZDU2EZqbm7Msq/4rUJ3OcvpG0K1IJBKJym+uY4Ysa2oiEbbArKysSkUrFostLS2F2ESsSLtr5m+a5azIRCJ5Ixu/SCRiGUb/pWZZVqJf1zX5sykRSxhdS80zDCGE0fryFLEisUhck5fIQAySCL28vPLy8pKTk11dXQkhkZGRQ4YM0aehj49PdHR0WVmZWCzmef7Ro0f169c3RIQA8BrOnj377deLJHqnE0JIMcf997ejtra2hosK4F8ySCJ0dHTs3bv3smXLNm7ceO7cuXv37v3666+EkIcPH4aEhGzdupUQolAoUlNTMzIyCgsLY2Nj5XK5o6Nj27ZtnZycNm3a9Nlnn23bts3U1LRTp06GiBAAXkNRUZGXi2u/Xv30b7L9P7uLi4sNFxLAv2eo44pbt259+vSpjY3N1KlTf/rpJ3qEMycn5+7du7TClStXunXrtmvXrvT09G7dui1btowQwjDMgQMHfvrpJysrq23bth06dEj/QxkAAACvwSB7hISQOnXqnD59WqPw3XffvX79Ov2/e/fuMTEx2g2bNm16+/ZtA0UFAACgwShGmgAAAJQHiRAAAIwaEiEAABg1JEIAADBqSIQAAGDUkAgBAMCoIRECAIBRQyIEAACjhkQIAABGDYkQAACMGhIhAAAYNSRCAAAwakiEAABg1JAIAQDAqCERAgCAUUMiBAAAo4ZECAAARg2JEAAAjBoSIQAAGDUkQgAAMGpIhAAAYNSQCAEAwKghEQIAgFFDIgQAAKOGRAgAAEYNiRAAAIyauIJpqampL1++VKlU6oWBgYEGDgkAAKDq6E6EEREREydOvHr1qvYknucNHBIAAEDV0Z0Ihw0blpGRsWnTpgYNGohEoiqOCQAAoMroSIS5ubmRkZGHDx8eMGBA1QcEAABQlXQMlmEYhhDi6upa5cEAAABUNR2J0NLSsk+fPseOHav6aAAAAKqY7nOEM2bMGDt2bFZWVq9evZydndUnYdQoAAC8TXQnwo8//jg1NXXLli1btmzRmIRRowAA8DbRnQgPHjxYUlJSxaEAAABUPd2JMCgoqIrjAAAAqBYV3VkmKysrMjIyMTHRxcWlUaNGTk5OVRYWAABA1dB9r1GVSjVz5kwXF5egoKCPPvqoc+fOderUGTNmTGFhoZ7zzcvLGzdunI+PT4cOHa5cuaKzzsaNG/38/Pz8/DZu3CgUXrp0qVu3bt7e3h07djxx4kRllwcAAKBSdO8RLlq0aMOGDcOHD//www9dXV3T09OPHTu2fft2QsiuXbv0me/nn3+emZl5/vz5s2fP9u3b98WLF1ZWVuoVjh49unr16t9//51hmL59+3p5efXv3z8vL69Pnz7r1q0bPHjw2bNnBw8e/PjxY3d393+/nAAAADrp2CMsKyvbsmXL/Pnz9+7d269fv8DAwJ49e27ZsmXDhg379u3Lysp65Uzz8vLCwsJWrFjh5uY2atSoJk2ahIWFadQJDQ2dPn168+bNmzVrNn369NDQUEJIfHx8UVHR2LFjra2tBw0aZGNj8/Tp0zeynAAAADrpSIRpaWm5ubnBwcEa5UOGDFGpVLGxsa+caWxsLMuyDRs2pC8DAwOjoqI06kRERAiXJAYEBERGRhJCGjZs2KJFi2+//TYqKmrz5s2WlpZt2rSp7CIBAADoT8ehUQsLC5ZlX7x40bRpU/XyFy9eEEI0jnDqlJmZaWlpKby0trZ+/PixRp2MjAyhjrW1dXp6OiFELBZ/+eWXn3766c8//5yamrp69WqpVFpeLxzH2dnZCS+Dg4PXrl37ythqI4VCQe97V7vwPK9UKqs7itehUCh4nq+x67yoqIjjOI3no1E6CwkhHMcpFAqWZQkhnEqlKqe5TiqOKykpLSgoIIQUFhbylWlLCOE4XqFQ0OYqlUrFqbSbcxzHMIz2Cuc5VenfXf9LKpWK43n9I+c4rrS07JVd1/DPZllZKa9rqXmOI4QwWheFqzhVmerVS127mJmZicUVDQsl5SXCjh07Tps2zdnZ+Z133qGFUVFR48aNa9iwoY+Pzys7tra2VigUwsu8vDz1jEXZ2NgIqzs/P9/W1pYQ8vDhw1GjRt25c8fHxyclJaV58+aenp6dO3fW2QvLss+ePaOfbUKIVCo1NTV9ZWy1Ec/zcrm8uqOoNJpLamPkhBCZTFZjv+DMzMxYli3vsTA6y1mWlclk9L1gRSJR+c11zJBlTU0ktK25uTlTmbaEEJZlhK5FIpGIFWk3Z/6mWc6KJBLJG9mERCIRyzD6R86yrEQipl0/efJk9sxZvKpMuxrHccJX0D+6k0g2h4TUqVPn38T874nFEkbXUvMMQwhhtCIXsSKxSFxLP7P/hu48GRIS0rlz59atW3t6etLBMjExMVZWVidPntTn28HT01OpVCYlJdHtIDo6umvXrhp1vL29Hz16RJNcdHR0vXr1CCF37typX78+zbXOzs4tW7a8detWeYmQEGJjY6NzKwQAeFMyMjLMCde7a3ftSSoVJxLp+Ao6cuqP7Ozsak+EoCfdidDX1zciImL79u2XL19OTU2tX7/+8OHDJ0yY4OLios9M7e3te/XqtWrVqvXr19+5c+fSpUs//vgjIeTx48fbt29fs2YNIWTkyJF0YCohJCQkZPr06YQQf3//qKioe/futWjR4tmzZ9euXZs2bdobW1YAgNciEomsbDQPaxFCVCqVzr1M0Rv6gf78+fNJEybwlTkWzYhE32/dWr9+/TcSgJEo98ipra3t3Llz586d+3rz3bx589ChQ+3s7CQSSWhoKH2oU3p6+m+//UYT4ejRo2/dukUvjRg2bNjo0aMJIYGBgStXruzbty/P8xzHzZgxo0ePHq8XAABAbZeTk2MpEQ96f6D+TX498XtOTo7hQnorveIU4mvz8PC4evVqYWGhubm5UNihQwfhcgiRSPTDDz9s3ryZEKJ+JnPatGnTpk0rLi5+W0/4AQDoj2FYM3OZ/vVZtoae267J/peBjh8/vmzZskmTJo0cObJPnz7lXS947do1/eeungV1d1/OYB5kQQAAqBr/y0Pm5uZOTk4ymYwQ4uDgIJFIqi8qAACAKvK/RNilS5cuXbrQ/3fv3l094QAAAFQt3UOb9u3bl5qaqlGYmpq6bds2w4cEAABQdXQnwtmzZ8fExGgUxsbGTpw40fAhAQAAVJ1KXOyiUCjoGUQAAIC3xj8GbT58+JAOCi0sLPztt98iIiKESWVlZT/99JOvr29VBwgAAGBI/0iEZ86cmTlzJv1/1apVGlXr1q1LbxADAADw1vhHIhw7duyAAQMIIa1btw4JCQkICBAmOTo6GuGdWAEA4K33j0RoZWVlZWVVXFw8adIkb29veiNsAACAt5iOwTKZmZlLly4tLi6u+mgAAACqmI5E6OjoaG1tnZKSUvXRAAAAVDEdiZA+Jn7x4sVpaWlVHxAAAEBV0n3P66dPn8bHx9erV69169YaD5c/ePBglQQGAABQFXQnwri4OC8vL0JIbm5ubm5u1YYEAABQdXQnwlOnTlVxHAAAANWiErdYAwAAePuU+4T6zMzMH3/8MTw8PDEx0dnZ2c/Pb/z48a6urlUZHAAAgKHp3iN8/Phx06ZN586de/ny5eLi4tu3b3/zzTdNmjS5ceNGFccHAABgULoT4aeffsqy7JUrV+Lj42/cuBEbG3v//n03N7fRo0fzPF/FIQIAABiOjkSYn59/8eLFzZs3t2vXTij09/fftWtXdHT0s2fPqjA8AAAAw9KdCDmOo5dPqKO3HsXVFAAA8DbRfYs1S0vLQ4cOaZQfOnRIJBLhTtwAAPA20TFqVCwWT5kyZfny5QkJCcHBwS4uLunp6b///vu2bdtGjBhha2tb9VECAAAYiO7LJ5YuXVpYWLh169Y9e/bQEpFINGLEiC1btlRhbAAAAAanOxGKRKL169d/9dVXN27cyMrKsrKyatWqlYuLSxUHBwAAYGjlXlBPCLG3t+/Tp0+VhQIAAFD1yk2EKSkpoaGh4eHhSUlJ9M4yEyZMqFu3bhXGBgAAYHC6L6i/efNmkyZNlixZEhsba21tnZSUtGbNmiZNmvzxxx9VHB8AAIBB6d4jHDNmjLOz89WrV319fWlJQkLCxx9/PGrUqISEBBMTkyqMEAAAwIB07BGmpqZGRUVt3rxZyIKEEHd39x07dqSlpUVGRlZheAAAAIalIxFKpVKWZR0cHDTK7e3tCSEymawq4gIAAKgSOhKhhYVFnz59QkJCNMp/+OGHgICABg0aVElgAAAAVUH3OcJBgwbNnDnz/v37AwcOdHZ2Tk9PP3ny5OXLl5cuXSrceq1ly5ba9yMFAACoXXQnwrlz52ZlZV25cuXKlSvq5TNnzhT+3759+/jx4w0bHQAAgIHpToQ3btxQqVQVt9Q+iQgAAFDr6E6Enp6eVRwHAABAtdB9QT315MmTgwcPrlu3Liws7OHDh5Wab25u7qRJk1q0aDFgwICoqCiddTZv3vzOO+906NDhwIEDQiHHcZs2berQoUNAQMCnn35aqU4BAAAqS/ceYVFR0ZgxY37++Wf1wh49eoSFhdnY2Ogz38mTJxcVFYWFhR0+fLhnz54xMTESiUS9woEDB1avXn3w4MG8vLwhQ4Z4enq2adOGEDJnzpxz586tXLnSycnp7t27r7tcAAAAetGdCGfNmvXLL7/Mnj176NChzs7OGRkZR48eXbFixdixYw8fPvzKmaalpf3yyy/Pnj1zd3f/8ssv9+zZc+zYsYEDB6rX2bJly9y5c1u3bk0I+eSTT0JCQtq0aZOYmLh58+ZHjx7R8ahNmzZ9E8sIAABQLh2HRktKSnbv3v3tt9+uWrUqICDA1dW1adOmCxYsCA0N/e2339LS0l450+joaDs7O3d3d/qyVatWDx480Kjz8OHDVq1aaVS4fft2gwYNLl68OGDAgDFjxpR3TBUAAOBN0bFHmJGRoVQqe/XqpVHeu3dvnufj4uIcHR0rnmlaWpq1tbXw0sbGRiN9lpSU5OTkWFlZaVRISEiIiYk5ffr0/Pnzz58/365du+joaGdnZ529cBzn7e0tvOzfv//y5csrDqyWUigUDMNUdxSVxvO8Uqms7iheh0Kh4Hm+xq7zoqIijuN0jusub7A3x3EKhYJlWUIIp1Kpymmuk4rjSkpKCwoKCCGFhYV8ZdoSQjiOVygUtLlKpVJxKu3mHMcxDKO9wnlOVfp31/+SSqXieF7/yDmOKy0to10rlUqe09223BXOc0ql8t9HrlQqeb7SK1zouqyslNe11DzHEUIYntcoV3GqMlXZG1nhNYeZmZlYXNEDB4nORGhtbS0WiyMiIvz8/NTLIyIiiH5XTVhZWal/AxYUFGgkMxMTE6lUKtQpKCigidPS0rK4uDg0NFQmk7Vu3frw4cNHjx6dMGGCzl5Ylj19+jT9bBNC7Ozs5HL5K2OrjXier42LRnNJbYycECKTyWpsIjQzM2NZViQS6Zyqs5xlWZlMRt8LViQSld9cxwxZ1tREQtuam5szlWlLCGFZRuhaJBKJWJF2c+ZvmuWsSCKRvJFNSCQSsQyjf+Qsy0okYtq1VCpl2HLb6l7hDCuVSmnzvLy8zMzMSkXr5OQklUr/v2um0itc6FosljC6lppnGEIIw2oeERSxIrFIXEs/s/+GjkQolUp79uw5bdo0c3Pzfv360Uzz119/jR8/PiAgQJ9HEnp5eb18+TI/P9/CwoIQ8vTpUzoQRl3dunWfPHnSvHlzWoHO1svLy9TUlG4BhBAbG5uKf5vUq1eP1XovAQBqjnlz5sU9fvTKnRJBWVmZt5//pu83GTQqUKf7vQkJCenWrdv7779vZmbm7OyclpamVCrd3Nz27dunz0x9fHwCAgJCQkLmzJlz8+bNe/fuHTlyhBASGRl5/PjxOXPmEEI+/vjjrVu3fvDBB0VFRTt37ly4cCEhpEOHDi4uLocOHQoODn727NmVK1eWLl365hYWAKCqFZcUdWvX3stb37s0xzyJepyZbdCQQIPuROjm5nbv3r2DBw9evHgxLy9PKpW2bdv2o48+ont4+ggNDR00aNCWLVsKCgq2bdtmZ2dHCHn27NmPP/5IE+GMGTNu3Ljh6uqqUqkGDx4cHBxMCGFZdt++fcOHD//qq69yc3O//fbbli1bvqElBQAA0EFHIszOzg4ODv7mm29Gjhw5cuTI15tv06ZNnzx5kp6ebm1tLTzId8CAAQMGDKD/S6XS3377LTs7W+McQNu2bZ8+jLJoJQAAH4RJREFUfZqZmWlnZ4fDngAAYGg6Mg3HcWfOnKnU6VmdGIZxdHSs+HH2NjY22idm6dMQkQUBAKAK6Eg2dnZ2/v7+165dq/poAAAAqpjuc4Q7d+4cMmSIqalp//79XV1dsXMGAABvK90Zrm/fvrGxsVOmTHF3dxeJRIyaKo4PAADAoHTvES5YsEChUFRxKAAAAFVPdyKcOnVqFccBAABQLTQT4f3793/44YcnT544Ojr26tXrtS+fAAAAqBX+kQgfPHjQrl07pVIpl8sVCsXPP/8cFxdH7/kCAADwVvrHYJn169dLJJKrV6/m5+enpaV16dJl9erVZWVl1RUcAACAof0jET569Gj06NFt27YlhNjb2y9fvjw/Pz8hIaGaYgMAADC4fyTC1NRUDw8P4aWnpychJCUlpaqDAgAAqCr/SIQaDyOl//NaD28EAAB4a2iOGv3hhx9OnDhB/y8pKSGEzJgxQ3iUPCHk9OnTVRYcAACAof0jEXp4eCQlJcXGxgol9erVy8zMrOzjlQEAAGqLfyTCixcvVlccAAAA1QJ30wYAAKOGRAgAAEYNiRAAAIwaEiEAABg1JEIAADBqSIQAAGDUkAgBAMCoIRECAIBRQyIEAACjhkQIAABGDYkQAACMGhIhAAAYNSRCAAAwakiEAABg1JAIAQDAqCERAgCAUUMiBAAAo4ZECAAARg2JEAAAjBoSIQAAGDUkQgAAMGpIhAAAYNQMlQizs7OnTZsWFBQ0fvz4ly9falfgeX7Lli2dO3ceMGDAhQsXNKZeuHBh4sSJUVFRBgoPAACAMlQiHDlyZFpa2tq1a01MTPr3769d4ccff1y3bt3ixYsHDRrUv3//mJgYYVJeXt706dMPHDiQmJhooPAAAAAosSFmGhsbe+rUqdTUVGtr6xYtWjg5OV29erVdu3bqdb7//vulS5cGBQUFBQWdOXNmx44d3333HZ00e/bsadOmLV682BCxAUBtlJaW9ssvv1SqiUgkGjVqlJmZmYFCgreGQRLh/fv3fX19ra2tCSFisbhly5b37t1TT4SlpaURERFt2rShL9u0aXP06FH6/19//fXkyZMffvgBiRDeYjM/n5kUH1+pJh8EDx46ZKiB4qn5Hj58ePq/h+q7u+vf5EHs865du3p7exsuKng7GCQRpqWl2djYCC9tbW1TU1PVK6Snp3McJ9SxtbVNSUkhhCiVyqlTp/7yyy8Mw7yyF57nAwMDhZrdunVbuHDhG1uGmkShUOizQmoanueVSmV1R/E6FAoFz/MGXeePIyO7tGgulcn1rR8d9eTx44KCAkJIUVERx3EqlUq7ms5CQgjHcQqFgmVZQginUqnKaa6TiuNKSkpp14WFhXxl2hJCOI5XKBS0uUqlUnEq7eYcxzEMo73CeU5Vqta1hYVlm/ad9e86OjFZqVQKXXM8r3/kHMeVlpbRtkqlkud0ty13hfPc/7ouK+N1LXW5XfN8WZla13ylV7jQdVlZKa9rqXmOI4QwPK+5OJyqTPX/Xb81zMzMxOJXZDqDJEILC4vCwkLhpUKhsLS0VK9AXxYWFtJcqFAorKysCCELFiz4+OOPGzVqpE8vDMNs27aNfrYJIXXr1pXL9f1aqV14nq+Ni0ZzSW2MnBAik8kMmghFItbBycXK2lbP+klJ8RITE7oyzczMWJYViUTlzFlHOcuyMpmMNmdFIlH5zXXMkGVNTSS0rbm5OVOZtoQQlmWErkUikYgVaTdn/qZZzookkv91XcFSlxM5I5VKha5ZhtG/OcuyEomYtpVKpQxbblvdK5xh/9e1WMzoWupyu2YYsVita6bSK1zoWiyWMLqWmmcYQgjDao4REbEisUhcSz+z/4ZBBst4eHg8f/5c+BkSExPj6empXkEul9vZ2QkDZGJiYjw8PAghV65c+eqrr+hHIjExsUePHl9//XUFHQWqsbOzM8SyAADA280gibBt27YymezQoUOEkIsXLyYnJ/fu3ZsQEh4evnv3blpn2LBhISEhhJCcnJyff/552LBhhJAbN27wf3Nzc/vzzz9xphAAAAzKIIlQJBLt2LFjxowZTZs2HThwYGhoqEwmI4Rcu3Ztw4YNtM7ChQufPn3q4+PToEGD7t279+rVyxCRAAAAVMwg5wgJIV27do2Li0tISHB1dZVKpbRw0qRJkyZNov87OjreunXrxYsXcrnc3t5eew4JCQkGig0AAEBgqERICDE1NfXx8am4Tt26dQ0XAAAAwCvhXqMAAGDUkAgBAMCoIRECAIBRQyIEAACjhkQIAABGDYkQAACMGhIhAAAYNSRCAAAwakiEAABg1JAIAQDAqCERAgCAUUMiBAAAo4ZECAAARg2JEAAAjBoSIQAAGDUkQgAAMGpIhAAAYNSQCAEAwKghEQIAgFFDIgQAAKOGRAgAAEYNiRAAAIwaEiEAABg1JEIAADBqSIQAAGDUkAgBAMCoIRECAIBRQyIEAACjhkQIAABGDYkQAACMGhIhAAAYNSRCAAAwakiEAABg1JAIAQDAqCERAgCAUUMiBAAAo2bARHjhwoWhQ4cOHDjw8OHDOiskJydPmzatT58+y5YtKy4upoUnTpyYPHlyv379Jk+eHBUVZbjwAAAAiOESYWRkZL9+/bp37z58+PAJEyacOHFCowLHcd27d1epVDNnzjxz5sxnn31Gy1evXu3r6zt58mRLS8s2bdq8ePHCQBECAAAQQsQGmu+WLVtGjBgxduxYQkh8fPyGDRt69+6tXuHUqVO5ublbtmxhGKZu3bp+fn7fffedjY3NX3/9RSv06tXr3Llzp06dmjBhgoGCBAAAMNQe4e3bt9u3b0//b9++/e3bt7UrtGvXjmEYQoi3t7eNjU1ERIR6hZKSksTERDc3NwNFCAAAQAy3R5iammpra0v/t7Ozy87OLi4uNjU11VmB1nn58qX6HObOnevj49OzZ8/yuuB5/r333qOplBDSsWPHmTNnvsllqDEKCgqqO4TXwfO8Uqnkeb66A6k0hULBcZywaRlCmUql4jiVSqVnfV7FlxSX5OfnE0IKCwu5ctqWN0OO4woKCugSqSrZtYrjSkpKaddKpZKvTFtCiIrjCwoKaHOVSqXiVNrNOZWKYVntFc5zKqHrCpa6gq4VCoXQNcfz+jfnOK60VH2pdbctb4YqnhO6List43Utdbld83xZWRltq1AoeL5yS82pLXVpWSmva6l5juMJYbU+mypOVab6/67fGmZmZhKJpOI6hkqEUqm0sLCQ/l9YWGhiYmJiYqJeQSaTpaamCi+VSqWFhYXwctWqVX/88ceFCxdYttx9VoZh5s+fL3x46tevrz6Ht0xtXDSe51mWlcvl1R1IpTEMI5PJDJoIxSKRiGVFIpG+IYkYE1MTuhmYm5uz5bfVWU7fCNpcVMmuRSxraiKhbaVSKVOZtoQQEcv8s2uRdnPmb5rlrMhEItFnqcvrWiaTCV2zDKN/c5ZlJRL1pS63rc5yEcMKXYslYkbXUpfbNcOIxWLaViaTMUzllppVW2qJWMLoWmqeYQghjNa3q4gViUXi2vht8y8ZKhF6eHgI41yeP3/u7u6usZW7u7vfuHGD/l9UVPTy5Ut3d3f6cuPGjdu3bz9//ryjo2PFvbz33nsVZEoAAIBXMlQWCQ4O3r9/f3FxMc/zO3fuDA4OpuX79u2LjY0lhAwcOPDGjRvR0dGEkLCwMC8vLz8/P0LIjh071q9ff/r06Tp16hgoNgAAAIGhEuHw4cOdnZ0bN27s7+8fHx8/a9YsWj5//vw7d+4QQlxcXJYvX96hQ4d27drNmzdvy5YttMKUKVPS0v6vvTsPa+rK+wB+WEMCYUkMe5GtCKiPryKM07FU2lJ5XCgU24I4o9SFFqc6Yx8701Fra2fGWruMqG+dOkiVWqmVPhbqBiJafFAEO1Y62KqIEsnCnhiyL+8ft82bBmQCNdzA/X7+uvfcc3J+NyT8cs9dTseMGTN4PB6Px9u6daudIgQAACD2GxplsVjHjh27ceOGTqeLi4szj4s2Nzez2Wxq+Y9//OOSJUvu3r07adIkDodDFUokEsvX8fDwsFOEAAAAxH6JkPLwww9blVidhhUIBAKBwLLEz8/PriEBAABYwpUmAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEAADAaEiEY0BNTY1Go6E7imGTyWR1dXV0RzESFy5c6O3tpTuKYTMZjX1jMGxCSL9CMRY/4YSQnp4eukMYCZVarVQq6Y7CgdgrERoMhj179ixevPhPf/qTVCodtM65c+deeOGFFStWXLhwwVyoUqm2bt2anZ3917/+tb+/307hjS1//vOfb968SXcUw1ZfX//OO+/QHcVIvPfee5afybFCrVa3tLTQHcVIiMXisZhRjEbj99eu0R3FSHR1dko7OuiOwoG42ul133jjjYqKik2bNp06dSolJeXq1auurj/r6+LFi+np6e+++65Op0tLS/v666+nTZtGCFm6dKlMJnvxxRf37duXnZ1dUVFhpwjvRy6X6/X6YTXx9fV1dn4APykUCoVWqx1YbjQa5XL5wP8U7u7uXl5e5rY3btwYVnf+/v4hISHUslKpVKvVtrd1dnb29fWlltVqtVgsHlhHKpWq1erW1taBmzgcTkBAgDnyQfd6COY3XK1WXxvmfyJfX9+IiIhhNRmUXq8XCoXDasLlcidMmPDLux6fTCa6I2AQW95rrVZbVlZmMBiG9crp6ene3t4ji4pGdkmEKpVq9+7dp06dSkxMfOaZZ2JiYo4dO/b0009b1vnggw/WrFmzcuVKQkhLS0thYWFRUVFra2t5eblIJOLxeKmpqQEBAdeuXYuLi7NHkIOSy+UZ8+e7OzvZ3kRnMK7fuDEtLY0QUlxcfPTzI8PqMSL64X8U/oMQotVqn54/381pkK5NKtWGV15xd3e37lqvX7N+PfXG7t27t7qi3NOTY2O/RoNRQ5zLjx+jVjMWLnA2GG0PW2/Q569Z++yzzxJCPv7446MHD7I8WFZ1lMp+TW/fH1attN4dk0nv7HK8spJaXZSZSTQaYvNbrjcYcpevyMvLI4QcOnToSMkBL5v32mQiPff6T587S61mP/d8X+cgwxV32tq2vrF557vbB27KWZa3dOlSQkhZWVnR7t1slvVeD+GeRlN55ozVL0IAx3Tr1q39H/5vTOhDtjdpFYvCw8Nnz55tv6jsxC7fyevXr2u12pkzZxJCnJyckpOTL168aJUI6+vrqSxICElOTt6wYQMhpKGhIT4+nsfjEUK8vLxmzJhRX18/molQq9WyXFxe/N0Ltjc5dvIr8+kNoVAYFyCInzLNxrYyWW/1N99Qy3q93tlofCnPOm0QQhouXZo8eTLH09OqvPL0CfNhnMFgmBYVmfTrx2zsWiGXHTr+lXlVp1L9YcVLNrYlhNTUVCkUih/b6nT/83D0r2enWNXp7elpEwqpA31LGrWq6PNS86peo3kp93eubtZp/n7O11ab33C9Xj8pLOyx5CdsbGs06Hft32delXV3Z89byOZY59H//Kc5KCiIx/OzKr/c8P/nDnU63aSHQp98Is3GrgkhO4r22F4ZgHYcjucTTw7jE36kvMxoHMbvacfhZLLDiMSpU6dWrlzZ1tZGrVKnCT/++GPLOmw2u66ubvr06YSQurq6hQsXdnd3FxYWVlRUVFVVUXUyMzOTkpJee+21QXuhRuecfjqE4vF4YWFhvzByvV7f19EZHhRke5NeWZ/CZPLz8yOESKTSh7y9WR5sG9sajYZbEmlgSDAhxGg0donFkcEhA6splf0eHuyBo6+ye/I+nY7P5xNCJBLpQz5clofNx0ZGQ8tPXRNCpMK7UaGhNrYlhCjuKbq0amqgTyqVhnh5enC8rPfOoNdqtR7sASGZTDdFosDQH/dUcrc9OjiYDHYoPCilUiHpV/r7+xNCOjo6AjhsT0+urXGbTDfb2wMfCv2pa1FUUKDTgDdWrVK6u7s7u1j/TNSolEK5PDAwkBDS1dXFc3Mf1ihQS/tdQXAw9XcUt4ujA/2dnF1sbKtRK4WyH7vu6enxdnH29fa13jmjUalSeQ74wUQIaRWJ/AL8qYNRiUgU6e8/cO/u37VKKJNRXff19XFMhOdr3fUQ2sQSroDv5uZGCBGLxFGCCc6ubgO6UDs7O7sNGPPQajVtvb1U1zKZzF1vEPB4tnctlEo5fr4sFosQIhFJIgR8lwFd349Oq7nT2xcYGEAIUSgUThpNAI8/oJapX6Hw9Brk4yfq7HTjerHZbEKIRCwJ5/Ns/6mn12ru9PYGBAYSQpRKpaG/P2iCwMa2hBBJV5cTh019DMRiSQTPz9XdetxCp9WYTMR9wHiGQa9r7ewODA4khKjVao1MHuLvb3vXHT3dBnd3LpdLCOnr6xvuRR7u7u4CwTD21EbPPPPM6tWrh65jlyNCNptteQ2YWq0e+OX08PAw11Gr1RwOZ9CGnAG/1s02b95Mfc4o/v7+ocP5Vz6G3L59Oyws7IGchhxNOp1OKpWOxT9Ke3u7QCAYOBbt4Ewm0507d8LDw+kOZNg6OzvZbLb5hPcY0tra+kBOOY8ymUxmMBh4w/lVMXbZ8geySyIMCQnp6elRKBTUJ7utrS0xMdGqTmhoaFtb26xZs6gK1L9LqtBcx1w+qM2bN9sjeAAAYBS7HGRERUVNmTLl008/JYSIRKLq6uqsrCxCiFgsPnLkx2tJsrKySkpKTCaT0Wj85JNPqApz5sy5d+/euXPnCCGNjY1CofCpp56yR4QAAAAUu5wjJIScPXv22WefTUhIaGpqWrJkybZt2wghJ06cWLx4MXW5QU9PT0pKCovF0uv1bm5up0+fpkaWDxw4sG7duqSkpIaGhr/97W+rVq2yR3gAAAAUeyVCQkhfX9+VK1fCwsIiIyOpErVa3d3dbb53zWAwNDY2Ojs7JyQkWJ4Ak0qlzc3NsbGxQcO5aAUAAGAE7JgIAQAAHB/u7XVoSqXy/PnzEokkOjr6kUceoTscW8nl8kuXLplX4+Pjg4ODaYxnWK5du9bY2Ojt7f3EE084/nWMra2tLS0tM2fO9LW4pUGlUl29etXZ2XngRWoOoq+v7+rVq/7+/rGxsVabOjs7v/32W6s9chxCofDGjRtTpkzx/+m+gitXrnR1dZkrcDgcB/yqfvvtt1evXvX29k5JSbG85+fOnTtnz54NCAhITU11cbH1Zp5xyASOSq/Xc7ncOXPmLFu2LCIiIj09Xa/X0x2UTRoaGths9pM/OXHiBN0R2Wr79u0BAQEvv/xyRkZGUFDQnTt36I5oKHw+39fX19XV9dy5c+bCjz76yN3dncfjzZo1i8bYhrB69Wp3d3cfH5+CggKrTUajce7cuS4uLufPn6cltqHFxsZyuVwWi1VWVmYu3Lhxo/mjHhISkpKSQmOEgyooKIiOjs7NzU1NTRUIBE1NTVR5dXU1j8dbvnx5YmLi3LlzDQYDvXHSCInQcRmNxpaWFmq5p6fHx8enpqaG1ohs1dDQEBkZSXcUIxEUFFReXk4tz5079+9//zu98Qzt5s2bJpNJIBBYJkKpVCqTyYqLix02EQqFQrVavWbNmoGJ8F//+teqVat4PJ5jJsKWlhaDwRAfH2+ZCC3FxcXt379/lKP6r6iwqeW8vLzc3Fxq+ZFHHtm9e7fJZFIqleHh4SdPnqQtRLqNsXu0GcXJycl8nZGvr6/V0wYcnE6nq6qqunjxokqlojuWYeDz+ebpafr7+6mn9jisqKiogYX+/v4O/tTj0NBQ1mDPaBWLxe+9997bb789+iHZKDIycojnWpw/f769vX3RokWjGZItLMMODg6mnnHf3d1dV1dHRctms+fPn//VV18N9SrjGs4Rjg179+7lcrnJycl0B2IrFou1c+fO27dv9/X1HT16dMaMGXRHZJNPPvkkLy/vs88+a29vT0hIoB7tDaOjoKDgrbfeop5WOBYVFRVlZ2cP8TAs2onF4r179x44cIAQIhKJ3NzczGc6Q0JCGhoaaI2OTkiEY8Dp06c3bdp0/Phxy0fKObLp06eb54R69dVXX3rppfr6enpDslFxcTGXy33uuedEItGOHTvy8vIc9nqTcebgwYN6vZ56sMZYpFAojhw5Ul1dTXcg9yWXyzMyMpYtWzZ37lxCiMFgsDy6dXFxGe70c+MJEqGjq62tXbx4cVlZWUJCAt2x2Mry8rOcnJzCwkKTyeRk82O16SIWiwsLC9vb26kbWHt6erZv33748GG642KE7du3T5w4MT8/nxDS39//zjvvFBQUUP+yx4TS0tKJEycmJSXRHcjgFArFvHnzEhISzCPPgYGBGo1GJpP5+PgQQqRSKZPv28Y5Qod24cKFRYsWlZaWPvroo3THMkKXL18ODQ11/CxICHFxcTGZTOZZgjUaDaMvKB9d27ZtW7JkCXXtpZubW2Ji4sSJE+kOahiKioqWL19OdxSDUyqV6enpMTExu3btMn8TAwIC4uLiKisrCSEmk6mqqiolxXomNebADfWOS6FQhISERERE/OpXv6JKFi9e/Nhjts44SKMtW7aIRKLo6Ojbt2/v37//o48+ysnJoTsom2RlZbW2ti5fvlwsFu/YsePLL798/PHH6Q7qvt58802RSHTgwIHU1NSgoKAtW7YEBAR89913O3fuvH79enNzc0ZGxrRp0woKCuiO9GeOHz/+5Zdf1tXVGY3G2bNnL1y4cMGCBZYV+Hx+eXn5b37zG7oivJ/333//hx9++Pzzz2fOnBkREfHqq69S1yt9//3306ZNu3v3rj1mEfrl8vPzS0pKcnNzqbHQsLAwav7XgwcPvvLKK+vXr29oaGhqavr3v/895mZceVAwNOq4XF1dt2//2STpjvk1GygnJ+fkyZPt7e0RERH19fXx8fF0R2Srw4cPf/HFF01NTVwu99KlS6M5KfQITJ48OSgoyDxm7uHhQQjx8fFJSEgwFzrgcRUVsznCgSNy77///qAXxNIuJibGy8vLHLl5djm9Xl9aWuqwX8+srCzLEyvUNKKEkNzc3NDQ0MrKylmzZu3Zs4exWZDgiBAAABgO5wgBAIDRkAgBAIDRkAgBAIDRkAgBAIDRkAgBAIDRkAgBAIDRkAgBgFy+fLmoqIjuKADogUQIQJu6urrIyMjRn/6mtLT066+/tiypqKj4/e9/P8phADgIJEIA2iiVytbWVoVCMcr9btq0qaSkZJQ7BXBYSIQADk0ul0skkiGeANXZ2Xm/CXSkUql5nmHbdXV16XS64bYCGLuQCAEcVHV19YwZM3x8fIKCgoKDg/fu3Wve9Nprr8XGxtbW1k6aNMnf39/T0zM3N1etVpsr1NXVxcXFBQYGcrncjIyMkpISHo/X0tJCCImMjLx16xZVwuPxVq9ebW7V2Ng4depUgUDg6emZmZk5+oeqALRAIgRwRGfPnk1LS4uIiKitrb1y5crSpUtXrVp16NAhaqtKpRIKhStWrNiwYUNjY+Prr7/+6aeffvjhh9TWu3fvzps3z8PD48yZM9988014ePi6det6e3sNBgMhpLi4ODAw8PHHHz98+PDhw4fNc1Po9folS5asXbu2sbFx27ZtFRUVVs98Bxi3TABAk6qqKkLIoUOHBm5KSkpKSkrS6/XmkszMzOnTp1PLa9euJYRUV1ebtyYnJz/66KPU8saNG93c3G7fvm3e+uSTTxJCfvjhB2o1Ojp6xYoVlt1t3ryZEFJWVmYuSU9Pnzp16i/dQ4CxAEeEAA6nt7e3oaEhNja2pqbm9E8CAwObm5upozpCiIeHx5w5c8xN4uPjhUIhtdzU1DR16lTLCZgWLlz4Xzt1cnJKS0sb9AUBxjfMRwjgcDo6OkwmU1lZWUVFhWU5h8Pp7e2l5pPz9fWl5lmlsFgsrVZLLUskEqu58WyZKo/FYnE4nEFfEGB8wxEhgMPx9vYmhPzlL3/pGcA8q+oQQkJCxGKxZYlEIrFXrABjHxIhgMMJCgqKiYn54osvzAOhw5KQkPDdd981NzdTqyaT6bPPPrOs4OXlpVKpHkCgAOMChkYBaHbhwgUnJyfLkgULFrz99ttZWVk5OTmvv/56VFRUR0fHxYsXm5ub33zzzf/6gvn5+bt27Zo3b95bb73F5/OLi4utDhAnT5585syZ8vLykJAQPp8fHh7+YPcIYGxBIgSgWWFhYWFhoWXJrVu3MjMzS0tL169fP3XqVKrQz8/v5ZdftuUF+Xz+mTNn1qxZs3LlSk9Pz+zs7A0bNuTn55uHVbds2SKVSn/729/K5fJly5YVFxc/2D0CGFucTPd/YgUA2Nugg58uLi7Ugslkun79ukwmmzBhQlhYmKvrCH+5rlu3bt++fX19fSMPFGD8whEhAJ3MOW9QTk5OkyZNGsHL1tTUJCYmenl5EUIqKyv/+c9/Pv/88yMMEWC8wxEhwDiUmppaW1s7ceLE3t7ezs7O2bNnHz16lM/n0x0XgCNCIgQYh9Rq9aVLl9ra2oxGY1xc3MyZM62uxwEAMyRCAABgNNxHCAAAjIZECAAAjIZECAAAjPZ/CRVz+0+HQ8AAAAAASUVORK5CYII=",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "execution_count": 226,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "n=1000000\n",
+ "val_states = [FF.DiscreteState(P.k, sample(PM; rng)) for i in 1:n]\n",
+ "val_strings = [state_to_PM_string(P, s) for s in val_states]\n",
+ "pLen = plot_len_dist(\"model_vs_true_len\", val_strings, val_strings; title=\"Length distribution: Natural vs Generated\")\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Julia 1.11.6",
+ "language": "julia",
+ "name": "julia-1.11"
+ },
+ "language_info": {
+ "file_extension": ".jl",
+ "mimetype": "application/julia",
+ "name": "julia",
+ "version": "1.11.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/editflow_code/analysis_notebook copy.ipynb b/editflow_code/analysis_notebook copy.ipynb
new file mode 100644
index 0000000..67c138b
--- /dev/null
+++ b/editflow_code/analysis_notebook copy.ipynb
@@ -0,0 +1,4242 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `~/dev/Flowfusion.jl/editflow_code`\n",
+ "\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n",
+ "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/dev/Flowfusion.jl/editflow_code/Project.toml`\n",
+ "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/dev/Flowfusion.jl/editflow_code/Manifest.toml`\n",
+ "WARNING: using StatsBase.sample in module Main conflicts with an existing identifier.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "plot_len_dist (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "using Pkg\n",
+ "Pkg.activate(@__DIR__)\n",
+ "Pkg.instantiate()\n",
+ "using Revise\n",
+ "\n",
+ "using Random\n",
+ "using Statistics\n",
+ "using Adapt\n",
+ "using Functors\n",
+ "using Flux\n",
+ "using Onion\n",
+ "using RandomFeatureMaps\n",
+ "using Zygote\n",
+ "\n",
+ "Pkg.develop(path=joinpath(@__DIR__, \"..\"))\n",
+ "using Flowfusion\n",
+ "const FF = Flowfusion\n",
+ "\n",
+ "include(joinpath(@__DIR__, \"prob_model.jl\"))\n",
+ "include(joinpath(@__DIR__, \"helper_funcs.jl\"))\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "to_same_device (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import CUDA\n",
+ "\n",
+ "# Device helpers\n",
+ "const _gpu_enabled = try\n",
+ " CUDA.has_cuda()\n",
+ "catch\n",
+ " false\n",
+ "end\n",
+ "\n",
+ "to_dev(x) = _gpu_enabled ? Adapt.adapt(CUDA.CuArray, x) : x\n",
+ "to_cpu(x) = _gpu_enabled ? Adapt.adapt(Array, x) : x\n",
+ "# move x to the same device type as y (Array or CuArray)\n",
+ "to_same_device(x, y) = (_gpu_enabled && (y isa CUDA.CuArray)) ? Adapt.adapt(CUDA.CuArray, x) : Adapt.adapt(Array, x)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "make_minibatch (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Minibatch builder (uses true PM)\n",
+ "function make_minibatch(B::Int, P::FF.EditFlow; rng=Random.default_rng())\n",
+ " K = P.k\n",
+ " x0s = Vector{FF.DiscreteState}(undef, B)\n",
+ " x1s = Vector{FF.DiscreteState}(undef, B)\n",
+ " for b in 1:B\n",
+ " # x1 from true PM\n",
+ " seq1 = sample(PM; rng=rng)\n",
+ " @assert all(1 .<= seq1 .<= K)\n",
+ " x1s[b] = FF.DiscreteState(K, seq1)\n",
+ " # x0: uniform tokens with random length in 1:10 (no BOS in x0)\n",
+ " L0 = rand(rng, 1:10)\n",
+ " seq0 = rand(rng, 1:K, L0)\n",
+ " x0s[b] = FF.DiscreteState(K, seq0)\n",
+ " end\n",
+ " ts = rand(rng, Float32, B)\n",
+ " return x0s, x1s, ts\n",
+ "end\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "EditFlowModel"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Model definition\n",
+ "struct EditFlowModel{L}\n",
+ " layers::L\n",
+ "end\n",
+ "Flux.@layer EditFlowModel\n",
+ "#=\n",
+ "function EditFlowModel(; d=128, num_heads=8, nlayers=6, rff_dim=128, cond_dim=128, K::Int)\n",
+ " embedding = Flux.Embedding(K + 2 => d)\n",
+ " time_embed = Flux.Chain(RandomFourierFeatures(1 => rff_dim, 1.0f0), Dense(rff_dim => cond_dim))\n",
+ " blocks = [Onion.AdaTransformerBlock(d, cond_dim, num_heads) for _ in 1:nlayers]\n",
+ " head_combined = Dense(d => 2K + 1, bias=false)\n",
+ " rope = RoPE(d ÷ num_heads, 4096)\n",
+ " return EditFlowModel((; embedding, time_embed, blocks, head_combined, rope, K))\n",
+ "end\n",
+ "=#\n",
+ "function EditFlowModel(; d=128, num_heads=8, nlayers=6, rff_dim=128, cond_dim=128, K::Int)\n",
+ " embedding = Flux.Embedding(K + 2 => d)\n",
+ " time_embed = Flux.Chain(RandomFourierFeatures(1 => rff_dim, 1.0f0), Dense(rff_dim => cond_dim))\n",
+ " blocks = [Onion.AdaTransformerBlock(d, cond_dim, num_heads) for _ in 1:nlayers]\n",
+ " ins_q = Dense(d => K, bias=false)\n",
+ " sub_q = Dense(d => K, bias=false)\n",
+ " ins_lambda = Dense(d => 1, bias=false)\n",
+ " sub_lambda = Dense(d => 1, bias=false)\n",
+ " del_lambda = Dense(d => 1, bias=false)\n",
+ " rope = RoPE(d ÷ num_heads, 4096)\n",
+ " return EditFlowModel((; embedding, time_embed, blocks, ins_q, sub_q, ins_lambda, sub_lambda, del_lambda, rope, K))\n",
+ "end"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Forward pass\n",
+ "function (model::EditFlowModel)(t, Xt_ms)\n",
+ " m = model.layers\n",
+ " X = FF.tensor(Xt_ms)\n",
+ " X = ndims(X) == 1 ? reshape(X, :, 1) : X\n",
+ " L, B = size(X)\n",
+ "\n",
+ " pmask = Zygote.@ignore FF.getlmask(Xt_ms)\n",
+ " Xp = X .+ 1\n",
+ " #println(\"min/max X: \", minimum(X), \" / \", maximum(X), \" pad=\", P.padding_token, \" lat=\", P.latent_token)\n",
+ " if maximum(X) > P.padding_token\n",
+ " error(\"X contains values greater than the padding token; illegal token values in input\")\n",
+ " end\n",
+ "\n",
+ " H = m.embedding(Xp)\n",
+ "\n",
+ " t = ndims(t) == 0 ? fill(Float32(t), B) : Float32.(t)\n",
+ " cond = m.time_embed(reshape(t, 1, B))\n",
+ "\n",
+ " cond = to_same_device(cond, H)\n",
+ " pmask = Zygote.@ignore to_same_device(pmask, H)\n",
+ " rope = Zygote.@ignore to_same_device(m.rope[1:L], H)\n",
+ "\n",
+ " for blk in m.blocks\n",
+ " H = blk(H; cond, rope, kpad_mask=pmask)\n",
+ " end\n",
+ "\n",
+ " ins_head = m.ins_q(H)\n",
+ " sub_head = m.sub_q(H)\n",
+ " lambda_ins = m.ins_lambda(H)\n",
+ " lambda_sub = m.sub_lambda(H)\n",
+ " lambda_del = m.del_lambda(H)\n",
+ " return (ins_head, sub_head, lambda_ins, lambda_sub, lambda_del)\n",
+ "end"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Forward pass\n",
+ "# function (model::EditFlowModel)(t, Xt_ms)\n",
+ "# m = model.layers\n",
+ "# X = FF.tensor(Xt_ms)\n",
+ "# X = ndims(X) == 1 ? reshape(X, :, 1) : X\n",
+ "# L, B = size(X)\n",
+ "\n",
+ "# pmask = Zygote.@ignore FF.getlmask(Xt_ms)\n",
+ "# Xp = X .+ 1\n",
+ "# #println(\"min/max X: \", minimum(X), \" / \", maximum(X), \" pad=\", P.padding_token, \" lat=\", P.latent_token)\n",
+ "# #@assert all((0 .<= X) .& (X .<= P.padding_token))\n",
+ "# mX = Zygote.@ignore maximum(X)\n",
+ "# nX = Zygote.@ignore minimum(X)\n",
+ "# @assert (0 <= nX) && (mX <= P.padding_token)\n",
+ "\n",
+ " \n",
+ "# H = m.embedding(Xp)\n",
+ "\n",
+ "# t = ndims(t) == 0 ? fill(Float32(t), B) : Float32.(t)\n",
+ "# cond = m.time_embed(reshape(t, 1, B))\n",
+ "\n",
+ "# cond = to_same_device(cond, H)\n",
+ "# pmask = Zygote.@ignore to_same_device(pmask, H)\n",
+ "# rope = Zygote.@ignore to_same_device(m.rope[1:L], H)\n",
+ "\n",
+ "# for blk in m.blocks\n",
+ "# H = blk(H; cond, rope, kpad_mask=pmask)\n",
+ "# end\n",
+ "# return m.head_combined(H)\n",
+ "# end\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "train_editflow! (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Training (GPU if available)\n",
+ "function train_editflow!(P::FF.EditFlow,\n",
+ " model;\n",
+ " epochs::Int=1,\n",
+ " steps_per_epoch::Int=100,\n",
+ " batch_size::Int=64,\n",
+ " lr::Float32=1f-2,\n",
+ " seed::Int=42,\n",
+ " print_every::Int=25)\n",
+ "\n",
+ " rng = Random.MersenneTwister(seed)\n",
+ " Random.seed!(seed)\n",
+ "\n",
+ " # Move model to device (GPU if available)\n",
+ " model = Functors.fmap(to_dev, model)\n",
+ " opt_state = Flux.setup(Flux.Adam(lr), model)\n",
+ "\n",
+ " for epoch in 1:epochs\n",
+ " for step in 1:steps_per_epoch\n",
+ "\n",
+ " # 1) Minibatch Sampling\n",
+ " x0s, x1s, ts = make_minibatch(batch_size, P; rng=rng)\n",
+ "\n",
+ " # 2) Align and batch\n",
+ " Z0, Z1 = FF.align_and_batch(P, x0s, x1s)\n",
+ "\n",
+ " # 3) Interpolate\n",
+ " Zt, Xt = FF.interpolate_Z_elementwise(P, Z0, Z1, ts)\n",
+ "\n",
+ " # 4) Prepend BOS\n",
+ " bos = P.bos_token\n",
+ " Zt = vcat(fill(bos, 1, batch_size), Zt)\n",
+ " Xt = vcat(fill(bos, 1, batch_size), Xt)\n",
+ " Z1 = vcat(fill(bos, 1, batch_size), Z1)\n",
+ " \n",
+ " # 5) Masks and multipliers\n",
+ " transition_mask = FF.transition_mask_from_Xt(P, Xt)\n",
+ " edit_multiplier = FF.remaining_edits(P, Zt, Z1, Xt)\n",
+ " #@assert size(transition_mask) == size(edit_multiplier)\n",
+ "\n",
+ " # 6) Scheduler scaling\n",
+ " den = 1f0 .- P.κ.(ts)\n",
+ " den = max.(den, 1f-3)\n",
+ " scheduler_scaling = P.dκ.(ts) ./ den\n",
+ "\n",
+ " # 7) Masked state\n",
+ " lmask = Xt .!= P.padding_token\n",
+ " cmask = trues(size(lmask))\n",
+ " Xt_ms = FF.MaskedState(FF.DiscreteState(P.k, Xt), cmask, lmask)\n",
+ "\n",
+ " ts_d = to_dev(ts)\n",
+ " Xt_ms_d = to_dev(Xt_ms)\n",
+ " Tmask_d = to_dev(transition_mask)\n",
+ " Emult_d = to_dev(edit_multiplier)\n",
+ " sched_d = to_dev(reshape(Float32.(scheduler_scaling), 1, 1, :))\n",
+ "\n",
+ " # 8) Forward + loss + update\n",
+ " loss, grad = Flux.withgradient(model) do m\n",
+ " M = m(ts_d, Xt_ms_d)\n",
+ " l = FF.edit_loss(P, M, Tmask_d, Emult_d, sched_d; eps=1f-8)\n",
+ " if isnan(l)\n",
+ " println(\"Maximum element of M: \", maximum(M))\n",
+ " end\n",
+ " l\n",
+ " end\n",
+ " Flux.update!(opt_state, model, grad[1])\n",
+ "\n",
+ " if step % print_every == 0\n",
+ " @info \"train\" epoch step loss=Float32(loss)\n",
+ " end\n",
+ " end\n",
+ " end\n",
+ "\n",
+ " return Functors.fmap(to_cpu, model)\n",
+ "end\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Init process and model\n",
+ "K = PM.K\n",
+ "P = FF.EditFlow(K; bos_token=0, impl=\"positionwise_reparam\")\n",
+ "model = EditFlowModel(; d=128, num_heads=8, nlayers=4, rff_dim=128, cond_dim=128, K=K)\n",
+ "nothing"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 82.07346f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 62.159813f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 54.437492f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 52.70323f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 46.34868f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 47.708572f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 46.801437f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 43.88524f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 46.17478f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 46.61335f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 44.934906f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 41.69713f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 45.287468f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 43.52704f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 39.66895f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 39.165527f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 40.31173f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 36.59504f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 40.564255f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 37.86731f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 40.385826f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 40.322083f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 39.391945f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.939816f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 35.111343f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 35.31593f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 37.190735f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 36.458412f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 39.276863f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 38.577705f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 37.672207f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 33.816956f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 35.438004f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 36.36937f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 33.889923f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.536453f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.919273f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 33.35535f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.92321f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 37.54946f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.466896f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 36.90836f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 36.573483f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.769262f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.593307f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.809368f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.314964f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.868347f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.30793f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 35.449608f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.058853f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.30246f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 35.396187f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.03281f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.141605f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.48079f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.728176f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.799397f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.22338f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.56803f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.286154f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.165651f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.54279f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 33.8528f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.07912f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.126358f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.789497f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 33.40204f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 33.934967f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.35504f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.06865f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.93891f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.98565f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 33.669083f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.357887f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 33.41867f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.702007f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.948685f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.02884f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.43153f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.269884f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.48836f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.304775f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.295242f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.564354f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.63555f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.694923f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.10176f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.823997f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.046465f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 33.151978f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.241508f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.599903f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.371204f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.115711f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.063667f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.288649f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.17442f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.832388f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.63764f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.523653f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.578972f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.127888f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.43596f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.935762f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.834002f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.114868f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.446186f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.983818f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.701529f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.964905f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 33.798264f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.764925f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.253445f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.058111f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.854343f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.131287f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.974604f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.332983f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.150225f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.560247f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.277634f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.871674f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.280323f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.3564f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.779842f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.763954f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.29353f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.820616f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.870682f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.851711f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.26233f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.022175f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.356493f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.398968f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.326962f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.917953f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.692986f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.146017f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.466309f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.152166f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.562721f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.2849f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.194546f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.014896f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.774408f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.552523f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.040781f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.373951f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.159891f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.581429f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.509647f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.619043f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.09383f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.292168f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.818909f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.22113f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.000816f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.185415f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.700916f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.716354f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.38358f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.860315f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.69223f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.02826f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.024052f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.986008f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.56084f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.256157f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.557503f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.805897f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.765497f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.463768f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.466944f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.504349f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.668938f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.541996f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.095675f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.885004f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.725517f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.679646f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.332363f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.44205f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.786064f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.905752f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.435757f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.278011f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.903355f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.621813f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.800285f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.840708f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.018559f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.744186f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.735939f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.753193f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.21335f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.902012f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.089495f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.58031f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.263393f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.389595f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.411808f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.020435f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.144455f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.2962f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.897776f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.124271f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.111145f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.478966f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.792439f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.627457f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.22819f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.252316f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.160707f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.44091f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.25015f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.912188f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.750805f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.955189f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.026106f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.814238f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.040257f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.69309f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.04459f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.733395f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.58453f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.76516f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.80672f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.192831f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.523682f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.81498f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.908417f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.202335f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.47245f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.739391f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.068176f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.204624f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.831722f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.325375f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.1208f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.505514f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.5488f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.15102f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.176058f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.531853f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.99091f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.7192f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.728962f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.610317f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.416164f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.267582f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.809444f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.121967f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.335537f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.019642f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.637943f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.238605f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.979734f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.764843f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.702675f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.530308f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.94001f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.980862f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.945194f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.208347f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.52969f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.940765f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.146969f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.750103f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.741966f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.725286f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.318342f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.266163f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.628586f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.748112f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.119446f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.42128f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.901266f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.349586f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.926575f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.67647f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.600336f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.054993f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.485657f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.708344f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.638538f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.087189f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.382866f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.803917f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.354397f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.697845f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.903067f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.217096f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.466969f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.123995f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.66383f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.066828f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.641502f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.865017f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.352922f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 51\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.092247f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 51\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.752254f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 51\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.05304f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 51\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.390366f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 51\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.090763f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 51\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.176765f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 52\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.52108f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 52\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.761932f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 52\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.511892f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 52\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.29064f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 52\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.123562f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 52\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.654358f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 53\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.53424f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 53\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.85925f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 53\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.881779f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 53\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.724129f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 53\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.388699f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 53\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.270184f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 54\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.898977f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 54\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.655685f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 54\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.33598f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 54\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.403103f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 54\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.912945f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 54\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.995174f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 55\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.486912f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 55\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.728872f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 55\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.981642f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 55\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.466846f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 55\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.494558f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 55\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.157269f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 56\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.891315f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 56\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.81565f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 56\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.700804f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 56\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.016748f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 56\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 12.17991f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 56\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.762886f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 57\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.146517f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 57\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.501875f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 57\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.152218f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 57\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.110748f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 57\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.041103f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 57\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.101912f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 58\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.75323f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 58\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.365854f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 58\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.630274f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 58\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.837723f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 58\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.288212f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 58\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.135359f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 59\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.50134f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 59\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.57468f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 59\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.161716f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 59\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.87622f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 59\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.94062f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 59\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.8095f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 60\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.677917f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 60\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.46408f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 60\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.636616f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 60\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.922928f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 60\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.925663f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 60\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.531475f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 61\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.56285f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 61\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.698103f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 61\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.562912f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 61\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.336823f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 61\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.004013f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 61\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.274128f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 62\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.192417f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 62\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.432222f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 62\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.7392f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 62\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.985062f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 62\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.17378f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 62\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.799166f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 63\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.425634f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 63\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.468296f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 63\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = -5.995845f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 63\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.998158f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 63\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.038448f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 63\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.033749f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 64\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.00533f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 64\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.06829f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 64\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.032722f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 64\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.024298f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 64\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.170773f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 64\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.376472f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 65\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.3689f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 65\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.082571f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 65\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.11168f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 65\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.405136f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 65\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.619356f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 65\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.924015f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 66\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.195768f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 66\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.6123f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 66\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.629646f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 66\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.263647f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 66\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.222168f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 66\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.27013f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 67\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.022396f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 67\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.813812f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 67\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.486214f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 67\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.982243f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 67\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.693348f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 67\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.587395f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 68\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.629896f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 68\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.485079f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 68\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.933212f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 68\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.13412f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 68\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.339632f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 68\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.508022f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 69\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.1389f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 69\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.179682f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 69\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.82854f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 69\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.925406f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 69\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.995193f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 69\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.171566f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 70\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.341312f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 70\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.789955f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 70\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.980728f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 70\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.528828f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 70\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.014193f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 70\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.833584f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 71\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.698025f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 71\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.143219f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 71\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.284584f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 71\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.312044f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 71\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.3766f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 71\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.132614f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 72\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.464508f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 72\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.122822f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 72\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.225592f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 72\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.98212f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 72\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.111795f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 72\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.57614f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 73\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.375362f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 73\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.394024f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 73\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.27369f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 73\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.573868f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 73\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.740505f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 73\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.441765f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 74\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.771257f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 74\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.316023f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 74\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.580448f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 74\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.979656f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 74\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.400307f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 74\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.783073f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 75\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.628641f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 75\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.261189f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 75\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.686115f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 75\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.199797f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 75\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.52521f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 75\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.92347f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 76\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.527836f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 76\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.664387f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 76\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.153656f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 76\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.139687f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 76\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.865797f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 76\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.617004f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 77\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.611313f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 77\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.56675f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 77\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.861835f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 77\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.752243f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 77\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.810802f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 77\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.026962f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 78\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.86181f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 78\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.10205f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 78\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.015896f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 78\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.185467f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 78\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.688988f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 78\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.525013f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 79\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.49948f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 79\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.364954f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 79\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.283792f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 79\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.86265f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 79\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.039726f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 79\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.208265f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 80\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.437443f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 80\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.15319f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 80\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.790619f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 80\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.035023f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 80\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.27858f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 80\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.90172f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 81\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.833107f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 81\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.40643f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 81\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.92462f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 81\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.017815f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 81\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.769001f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 81\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.803432f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 82\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.338768f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 82\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.840986f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 82\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.032543f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 82\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.793646f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 82\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.137222f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 82\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.951649f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 83\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.809486f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 83\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.11989f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 83\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.108162f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 83\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.218895f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 83\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.576492f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 83\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.534967f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 84\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.878292f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 84\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.561852f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 84\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.066605f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 84\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.652271f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 84\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.827291f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 84\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.628416f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 85\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.40998f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 85\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.966393f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 85\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.59112f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 85\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.124773f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 85\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.860865f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 85\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.764847f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 86\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.170559f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 86\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.344856f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 86\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.094692f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 86\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.650303f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 86\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.443104f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 86\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.755693f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 87\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.28392f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 87\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.591637f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 87\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.558187f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 87\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.37761f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 87\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.453766f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 87\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.134775f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 88\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.580048f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 88\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.17911f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 88\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.458458f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 88\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.700092f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 88\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.836933f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 88\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.738186f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 89\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.815561f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 89\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.215977f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 89\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.129654f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 89\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.794102f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 89\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.125484f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 89\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.227345f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 90\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.045433f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 90\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.293316f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 90\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.518925f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 90\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.422106f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 90\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.499228f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 90\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.184135f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 91\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.26989f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 91\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.96262f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 91\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.837223f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 91\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.046673f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 91\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.653591f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 91\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.075289f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 92\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.342976f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 92\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.946255f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 92\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.191769f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 92\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.609737f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 92\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 17.93655f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 92\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.087547f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 93\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.67813f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 93\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.700335f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 93\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.010113f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 93\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.786858f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 93\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.679712f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 93\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.27972f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 94\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.283361f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 94\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.018883f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 94\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.054487f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 94\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.607964f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 94\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.42205f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 94\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.083143f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 95\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.265385f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 95\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.279564f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 95\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.667408f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 95\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.51435f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 95\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.896326f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 95\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.182985f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 96\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.115044f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 96\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.596788f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 96\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.342295f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 96\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.938116f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 96\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.91387f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 96\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.638369f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 97\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.230114f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 97\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.580563f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 97\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.14f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 97\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.359524f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 97\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.14893f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 97\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.068623f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 98\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.713148f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 98\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.837017f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 98\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.895924f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 98\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.283958f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 98\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.11446f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 98\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.290411f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 99\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.527283f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 99\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.730885f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 99\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.029686f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 99\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.297504f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 99\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.37918f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 99\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.384432f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 100\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.19099f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 100\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.480999f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 100\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.165169f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 100\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.805332f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 100\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.753227f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 100\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.786406f0\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "EditFlowModel(\n",
+ " Embedding(22 => 128), \u001b[90m# 2_816 parameters\u001b[39m\n",
+ " Chain(\n",
+ " RandomFourierFeatures{Float32, Matrix{Float32}}(Float32[7.531563 7.089197 … 2.0401998 3.328936]),\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " [\n",
+ " TransformerBlock(\n",
+ " Attention(\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " identity,\n",
+ " identity,\n",
+ " Onion.var\"#32#34\"(),\n",
+ " 16,\n",
+ " 16,\n",
+ " 8,\n",
+ " 8,\n",
+ " ),\n",
+ " StarGLU(\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(512 => 128; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " NNlib.swish,\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.9836579, 0.9530255, 0.9908016, 0.96244663, 0.99054164, 0.98432475, 0.9993702, 0.97146636, 0.9746882, 0.97592133 … 0.96757305, 0.98850816, 0.9889486, 0.9910423, 0.9700498, 0.9524227, 0.9703022, 0.9919154, 0.9982276, 0.98223925], Float32[-0.0059723244, -0.026827456, -0.005359013, 0.005184757, -0.015056814, 0.0036728473, -0.00411119, 0.014544279, -0.013788157, -0.0062612076 … -0.008408193, 0.007813087, 0.0057916404, -0.002667083, -0.0019434843, 0.0012296549, 0.0013133418, 0.0023761056, 0.00048080317, 0.006975226], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.9946981, 0.9968043, 0.98153776, 0.9809628, 0.99675304, 0.93618464, 0.9842954, 0.9745212, 1.0101839, 1.0036527 … 1.0099263, 0.99696696, 0.9861587, 0.9825586, 0.9812812, 0.97964483, 0.98476547, 0.98760384, 0.9870029, 0.979692], Float32[0.006245078, 0.00454478, -0.015628312, 0.006516256, -0.009261778, -0.01909565, 0.005845533, 0.008189242, -0.00068665465, 0.0016260961 … -0.0041808817, -0.00029761743, 0.0026925767, -0.007287982, -0.01596789, 0.00494587, -0.00235075, -0.0046186335, 0.0087447725, -0.0045568403], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " identity,\n",
+ " ),\n",
+ " TransformerBlock(\n",
+ " Attention(\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " identity,\n",
+ " identity,\n",
+ " Onion.var\"#32#34\"(),\n",
+ " 16,\n",
+ " 16,\n",
+ " 8,\n",
+ " 8,\n",
+ " ),\n",
+ " StarGLU(\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(512 => 128; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " NNlib.swish,\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.97298455, 0.9863549, 0.9892886, 0.9950389, 0.9884353, 0.9859241, 0.94629824, 0.9905537, 0.997098, 0.9910578 … 0.98902434, 0.9732674, 0.993341, 0.98686963, 0.97267485, 0.9891902, 0.9939604, 0.98106074, 0.989807, 0.9971157], Float32[0.0012234193, 0.0013402402, -0.0051020766, -0.0023925323, 0.0024530701, -0.007705464, 0.027468415, -0.0025647462, -0.0012954248, -0.0012756804 … -0.0062676566, -0.004466568, -0.005843617, -0.0037935532, -0.0069217044, -0.0014938526, 0.0044353334, -0.0068317032, -0.001554352, -0.006626264], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.98990935, 0.9927325, 0.99345046, 0.9694228, 1.0037662, 0.98568547, 0.99712723, 0.9872776, 1.0082906, 1.0044862 … 0.99839866, 1.0037067, 0.99369234, 0.99665964, 0.9925385, 0.958198, 0.97938985, 0.99434316, 1.0101033, 0.9903174], Float32[0.0046547917, -0.019893773, -0.009588573, 0.0028432165, 0.0047589364, -0.0028043785, 0.00833395, 0.009257588, 0.0071648816, 0.006460758 … -0.0042559416, -0.0088890875, -0.0017841165, -0.0037446455, -0.0112923, -0.05279327, 0.018110534, -0.0060070534, 0.005424199, -0.009653852], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " identity,\n",
+ " ),\n",
+ " TransformerBlock(\n",
+ " Attention(\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " identity,\n",
+ " identity,\n",
+ " Onion.var\"#32#34\"(),\n",
+ " 16,\n",
+ " 16,\n",
+ " 8,\n",
+ " 8,\n",
+ " ),\n",
+ " StarGLU(\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(512 => 128; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " NNlib.swish,\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.9813191, 0.97900933, 0.99497646, 0.9740931, 0.99270153, 0.9512806, 0.98416686, 0.98227394, 0.99777186, 0.9847334 … 0.97772944, 0.99356306, 0.99567527, 0.9884459, 0.99413466, 0.9872411, 0.9937668, 0.9934419, 0.9858429, 1.0006208], Float32[-0.008844349, -0.003362618, 0.007866318, 0.007047815, -0.0043394393, -0.011138873, 0.011454338, 0.0073125726, -0.0019595535, -0.005712127 … 0.0042020027, 0.012437841, 0.008444573, -0.010965995, 0.0033074883, 0.0013927073, -0.0025926381, 0.004861451, 0.0003271947, 0.0013459908], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.99184936, 1.0132029, 0.9949654, 0.99911726, 0.9930749, 1.004498, 1.0130638, 1.0191455, 1.0075065, 0.97904897 … 1.0130671, 1.0166669, 1.0298382, 1.0103947, 0.99601674, 0.97281563, 0.99154127, 1.0031415, 1.0141926, 0.9984006], Float32[0.0064145937, -0.012695074, -0.024113664, 0.0008978927, 0.008383268, -0.0046254005, 0.0058898213, -0.00048160343, 0.011751346, -0.001727852 … -0.011738534, -0.008813223, -0.0048925155, -0.002928767, -0.007028266, -0.028897885, 0.016255967, -0.008061163, -0.0006376766, -0.011933948], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " identity,\n",
+ " ),\n",
+ " TransformerBlock(\n",
+ " Attention(\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " identity,\n",
+ " identity,\n",
+ " Onion.var\"#32#34\"(),\n",
+ " 16,\n",
+ " 16,\n",
+ " 8,\n",
+ " 8,\n",
+ " ),\n",
+ " StarGLU(\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(512 => 128; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " NNlib.swish,\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.9871817, 0.97967505, 0.9925497, 0.9899778, 0.9875628, 1.0040362, 0.9646963, 0.98949474, 0.98805684, 0.9880806 … 1.0172434, 0.9862294, 1.0149201, 0.94580567, 1.0022846, 0.98350805, 0.99963933, 0.9940302, 1.0096109, 0.97280717], Float32[0.002797166, -0.00076662557, 0.00028469562, -0.0044771708, -0.0028138815, 0.003455172, 0.0049372525, 0.005800529, 0.0032799544, 0.0068818713 … 0.02613455, 0.006609633, 0.0013952806, 0.011928056, -0.008288531, -0.016250463, 0.006419934, -0.0055078357, -0.01332255, -0.016116258], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[1.0026083, 0.9906121, 1.0252106, 0.9807042, 1.0165613, 0.9926678, 1.0275302, 1.0164462, 1.0170248, 1.0145394 … 1.0104992, 1.0050902, 1.0078901, 1.0107113, 1.0065619, 0.99085945, 0.99034745, 1.0093502, 1.0229908, 0.9981014], Float32[0.00017921702, -0.014748752, 0.0016491384, 0.0112701375, 0.008428353, 0.0039549926, 0.016354358, -0.0023426865, 0.0004367487, 0.0045339833 … 0.0015938681, 0.0045206565, -0.00032513068, 0.0024292, 0.005038348, -0.020209014, -0.0013112819, 0.0021825603, -0.00091132557, 0.0007438597], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " identity,\n",
+ " ),\n",
+ " ],\n",
+ " Dense(128 => 20; bias=false), \u001b[90m# 2_560 parameters\u001b[39m\n",
+ " Dense(128 => 20; bias=false), \u001b[90m# 2_560 parameters\u001b[39m\n",
+ " Dense(128 => 1; bias=false), \u001b[90m# 128 parameters\u001b[39m\n",
+ " Dense(128 => 1; bias=false), \u001b[90m# 128 parameters\u001b[39m\n",
+ " Dense(128 => 1; bias=false), \u001b[90m# 128 parameters\u001b[39m\n",
+ " RoPE{Matrix{Float32}}(Float32[1.0 0.5403023 … -0.87528455 -0.065975994; 1.0 0.95041525 … 0.9552474 0.8159282; … ; 1.0 0.9999995 … -0.57972294 -0.5789079; 1.0 0.99999994 … 0.2726629 0.27235872], Float32[0.0 0.84147096 … -0.48360822 -0.9978212; 0.0 0.3109836 … 0.29580808 0.5781532; … ; 0.0 0.0009999999 … -0.8148137 -0.8153929; 0.0 0.0003162278 … 0.9621096 0.9621958]),\n",
+ " 20,\n",
+ ") \u001b[90m # Total: 84 trainable arrays, \u001b[39m1_339_648 parameters,\n",
+ "\u001b[90m # plus 3 non-trainable, 65_600 parameters, summarysize \u001b[39m5.365 MiB."
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "model = train_editflow!(P, model; epochs=100, steps_per_epoch=150, batch_size=256, lr=1f-4)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "MersenneTwister(42)"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "rng=Random.MersenneTwister(42)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "10-element Vector{String}:\n",
+ " \"QVQLVQSGAEVKKPGA\"\n",
+ " \"QVLVQSGAGAVKKPRASVKV\"\n",
+ " \"QVQLVKSGEVLVKP\"\n",
+ " \"EVQLMESGGPYKP\"\n",
+ " \"QVQLVQSGAEVKKPGASVKV\"\n",
+ " \"QVQLVQSGTMVKKPGASS\"\n",
+ " \"QVQVVESGGGAVVQPGA\"\n",
+ " \"QVQLVQSGAEVEKPGA\"\n",
+ " \"QVQLVESGGGVVSQLGS\"\n",
+ " \"QVQWYQYGGPVKK\""
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "model_samples_any = sample_gen_n(P, model; n=10, ts=0f0:0.01f0:1f0, rng)\n",
+ "model_final_states = map(final_state_from_gen, model_samples_any)\n",
+ "model_strings = [state_to_PM_string(P, s) for s in model_final_states]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "10-element Vector{String}:\n",
+ " \"EVQLVESGGGLVKPPGQLR\"\n",
+ " \"QVQLVQSKAEVKKPGASVKV\"\n",
+ " \"EGQRVECGGGGGQRG\"\n",
+ " \"EVQLVESGGGLV\"\n",
+ " \"QVQLVQSGAAV\"\n",
+ " \"EVQLVESGGGLVQPGGSLTL\"\n",
+ " \"QVQLVESGGGVVQPCR\"\n",
+ " \"QVLLVQSGTEVFKPGASMKV\"\n",
+ " \"QVLLVQSTAEVKK\"\n",
+ " \"QITLKESDPTLVKP\""
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "train_states = [FF.DiscreteState(P.k, sample(PM; rng=rng)) for i in 1:10]\n",
+ "train_strings = [state_to_PM_string(P, s) for s in train_states]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1000-element Vector{String}:\n",
+ " \"QVQLVESGGRV\"\n",
+ " \"QLQLGQSGAVV\"\n",
+ " \"QVQLVESGGGVVQPGR\"\n",
+ " \"QITLKESYPTLVKPS\"\n",
+ " \"EVQLVLESGGLVQPGASLRL\"\n",
+ " \"EEQLVESGGGVVQPG\"\n",
+ " \"QVQLVQSGAEVK\"\n",
+ " \"QVQLVQSGGEPGCVGTLRL\"\n",
+ " \"QQLTQKYGTAVKEGASVHV\"\n",
+ " \"QVQLVLSSAEVKKP\"\n",
+ " \"QLQLQESGPGLVKP\"\n",
+ " \"EVQLVESGGYLVQPGG\"\n",
+ " \"QLQLQESGPGVVQPGRSL\"\n",
+ " ⋮\n",
+ " \"QVQLVQSGAEVK\"\n",
+ " \"QVQLVESGGGVKPGR\"\n",
+ " \"EVHLVESGGGLVKPGGS\"\n",
+ " \"Q\"\n",
+ " \"QVQLVQYGANVVKPGASVKV\"\n",
+ " \"QVLLVQSGAEVKKYGTSVHV\"\n",
+ " \"QVQLVESSQGHVMQQPGR\"\n",
+ " \"QVQRAQAGAESKKPGTSVKV\"\n",
+ " \"QIQIKETGPGLFK\"\n",
+ " \"QVQLQKSGPGLVK\"\n",
+ " \"QVVQLQQPGAYVK\"\n",
+ " \"MVLVQSGAEV\""
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Sampling and Levenshtein plot\n",
+ "using Random\n",
+ "n = 1000\n",
+ "# 100 model samples (final states → strings)\n",
+ "model_samples_any = sample_gen_n(P, model; n=n, ts=0f0:0.01f0:1f0, rng=rng)\n",
+ "model_final_states = map(final_state_from_gen, model_samples_any)\n",
+ "model_strings = [state_to_PM_string(P, s) for s in model_final_states]\n",
+ "\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\u001b[32mProgress: 100%|█████████████████████████████████████████| Time: 0:00:00\u001b[39m\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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M4vp6en5+fm2trZr1qzR2RB9xWFqaqr2Wffqde/evWXLljdu3EhJSfHy8iKEhIaGZmdnjx07VnOWQjPYetOmTR999FHfvn179uypPVbWMM7OzjonQmpILBa/ePFCKBTS8aON/rxITU2tatRGUVERIURzYlKHSCTSGXnRpEkT8tcTSwihP+boI07aOnToQAiJi4vTXuju7q53dIlIJNIexEEIcXR0JITQn00a9JeknJwczRK1Wr1///5Dhw69fPkyJydHoVBo/lRQUFB5zMhb3b59e+bMmQ4ODufPn6e/BxBCHj16RFGUiYnJ4sWLddorlUqZTJadna15u9Kfs9p03q6GefToESHk1atXOjXQX4noDCOEWFlZjRgx4siRI5cvXx4xYgQhJCsr6/r1615eXr169dJeVVpams6qKIricDiaVdF8fX11hpbQbwDNqzBhwoR///vfCxcuPHTo0KBBgwIDAwMDA7VP6tP8/Px0/ot11lP9A09NTdWpVq1WV662Mp23ENF6A+sMvKJf7oKCAp23YmOCIDSeyZMnb9myJSQk5MKFC66urvS3UR0SiUSlUllbW1f+h6HfpvT3u/LycvLXx582nSX0LmlZWRm9s6LD1taW/rCouYkTJy5btuzIkSPLli0jhNBfxidPnqxpEBQUFBYWtmbNmvDw8Pv37//www+2trbLly//5ptvtE/L11Ztx7hqlJSUUBSlVCqregZUKlVVfekLB+n9wspEIpHOI6LvUn9d7lb9a0S/jhpVPUCRSKTzKUlvRWcADt2G0rrSbubMmbt27XJ2dh4yZIirqys9sPbo0aOPHz+u7YtOCHn+/PnIkSN5PN758+e1PyXpN1hGRkZVT69MJiM1frsahq4hMjIyOjq6cgEmJiaau5MnTz5y5MiBAwfoIDx48CD9fVTzDNOrevDgAT1eV5uNjY32qoi+a1vp9ajVavpu27ZtIyMjV65cef369SdPnmzYsMHCwmLu3LkrV64UCATVrId+iTXrqf6B379/n07E6qutrKrtUpWu16Tfq5UHxDYmCELj6dSpU5s2bTZv3iyRSBYuXKjzdZJmampKH8mUSqU6WUjvatBvR/ozuvJ3Rp0ldDMPD4+6mjtt8uTJK1euPHDgwNKlS4uKii5cuNCkSROdRO/Xr1+/fv1KSkru3Llz6dKlgwcPLliwQCAQfPXVVwZv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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "m = 100\n",
+ "p=100000\n",
+ "# Build training strings from PM parents (the data PM was built on)\n",
+ "train_states = [FF.DiscreteState(P.k, sample(PM; rng=rng)) for i in 1:m]\n",
+ "train_strings = [state_to_PM_string(P, s) for s in train_states]\n",
+ "\n",
+ "# Independent validation strings sampled from PM\n",
+ "val_states = [FF.DiscreteState(P.k, sample(PM; rng=rng)) for i in 1:p]\n",
+ "val_strings = [state_to_PM_string(P, s) for s in val_states]\n",
+ "#val_strings = [s for s in val_strings if !(s in train_strings)]\n",
+ "\n",
+ "# Plot normalized Levenshtein vs. training set (distinct val/train)\n",
+ "plt = plot_lev_dist(\"model_vs_true\", val_strings, model_strings, train_strings; title=\"Model vs True (normalized Levenshtein)\")\n",
+ "display(plt)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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lZVz5swRCASq258+fXpVVRWtsHnzZvopUmsol8tbt24tFAozMzNpiUQiWbBggeqA83i8iRMnVlRUMK127NhBCFm7dq3qZ5IQ0rt375KSEqZaTk5Or1691MZNW1u7rKyMVti0aRMh5Mcff/zoo49U6wwYMKC8vJzWmTJlSvXB37hxI322qqpq3rx5atFOnjy5srKSCePw4cOEkOXLlzMl9Hvj3LlzgYGBqptdsGBB9bGdPn06IeTy5ct1jP9bComwiTCJUCwWGxoa+vv7M09NmTKFx+MlJiZWT4TXr18XCAS6urobN26MiYkJDw+n/xlat25dUFDAVJs7dy4hpGvXrtevX09NTT1z5oyzszP90aeaCK9fvy4UCo2MjL7//vtHjx5FRESsWbNGW1vbzMwsLS2NqfbaRHj58mVCyNChQ9XKv/32W0JISEgIfUgP/y5atCgiIiI1NTU8PHzv3r2jRo2q54jVlggdHBzMzc2///7769evnzt3Li4uTlnvRBgREaGrq6urqxsSEnL//v3IyMjNmzfr6+vr6em9ePGijmDKysq0tLRsbW3VymmKcnR01NfXX7du3b17965evTpw4EBCyKBBg5hqCoViyJAhhBBfX99r164lJCQcPnyYnmtZt24dU40mQgcHBysrqx9++OHGjRtnzpxJTk6mvTg4OBgYGPzwww8PHjw4c+YM/bG/YsUKa2vrKVOmXLly5e7du5MmTSKE+Pj4qAY5cODAFStWXLp06cWLF+Hh4Rs2bDA2NhYKheHh4Uyd1ybC+Pj4y//0n//8R1dXl8/n37lzh9bZuXMnIcTW1va33357+vTpgwcP5s+fz+Px2rVrx3zjy2QyOtvlww8/fPz48cuXL7dv325oaEhH480T4fvvv0/H+cyZMzExMZcvX+7bty8hZPbs2bRCXl4efStlMplqw0uXLhFChg8fzpTQH3w9evQ4depUTEzMlStXaLaYPHkyU4cmQicnJ0tLyx07djx8+PDMmTMdO3YkhHz22WdMNfq+TJ48me6XP3369Pfffx8+fLhaInRycrKzs9u1a9ejR49OnDjh5uam+h8qKirq+++/px8t5l1ISUmhz44bN44Q0rNnTyba/v37E0KmTZvGhFFbInRycurSpcuxY8ciIiJ27txJ9+/pT0xVoaGh9CNXx/i/pZAImwiTCJVK5dSpU3k8XkJC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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "model_strings_bos = [\">\" * state_to_PM_string(P, s) for s in model_final_states]\n",
+ "plt = plot_lev_dist(\"model_vs_true\", val_strings, model_strings_bos, train_strings; title=\"Model vs True (normalized Levenshtein)\")\n",
+ "display(plt)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "\n",
+ "n=1000000\n",
+ "val_states = [FF.DiscreteState(P.k, sample(PM; rng)) for i in 1:n]\n",
+ "val_strings = [state_to_PM_string(P, s) for s in val_states]\n",
+ "\n",
+ "\n",
+ "\n",
+ "pLen = plot_len_dist(\"model_vs_true_len\", val_strings, model_strings; title=\"Length distribution: Natural vs Generated\")\n",
+ "display(pLen)\n",
+ "\n",
+ "pAA = plot_AA_dist(\"model_vs_true_AA\", val_strings, model_strings; title=\"AA frequency: Natural vs Generated\")\n",
+ "display(pAA)\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Natural 'A' frequency: 0.047142480905978404\n"
+ ]
+ }
+ ],
+ "source": [
+ "println(\"Natural 'A' frequency: \", (isdefined(Main, :val_strings) ? sum(count(==('A'), s) for s in val_strings) / sum(length.(val_strings)) : sum(count(==('A'), s) for s in val_strings) / sum(length.(val_strings))))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Natural 'A' frequency: 0.04109772423025435\n"
+ ]
+ }
+ ],
+ "source": [
+ "println(\"Natural 'A' frequency: \", (isdefined(Main, :model_strings) ? sum(count(==('A'), s) for s in model_strings) / sum(length.(model_strings)) : sum(count(==('A'), s) for s in model_strings) / sum(length.(model_strings))))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "MersenneTwister(42)"
+ ]
+ },
+ "execution_count": 183,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "rng = Random.MersenneTwister(42)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "execution_count": 226,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "n=1000000\n",
+ "val_states = [FF.DiscreteState(P.k, sample(PM; rng)) for i in 1:n]\n",
+ "val_strings = [state_to_PM_string(P, s) for s in val_states]\n",
+ "pLen = plot_len_dist(\"model_vs_true_len\", val_strings, val_strings; title=\"Length distribution: Natural vs Generated\")\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Julia 1.11.6",
+ "language": "julia",
+ "name": "julia-1.11"
+ },
+ "language_info": {
+ "file_extension": ".jl",
+ "mimetype": "application/julia",
+ "name": "julia",
+ "version": "1.11.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/editflow_code/analysis_notebook.ipynb b/editflow_code/analysis_notebook.ipynb
new file mode 100644
index 0000000..c32ea1c
--- /dev/null
+++ b/editflow_code/analysis_notebook.ipynb
@@ -0,0 +1,2655 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `~/dev/Flowfusion.jl/editflow_code`\n",
+ "\u001b[92m\u001b[1mPrecompiling\u001b[22m\u001b[39m project...\n",
+ " 2266.3 ms\u001b[32m ✓ \u001b[39mFlowfusion\n",
+ " 1 dependency successfully precompiled in 4 seconds. 470 already precompiled.\n",
+ "\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n",
+ "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/dev/Flowfusion.jl/editflow_code/Project.toml`\n",
+ "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/dev/Flowfusion.jl/editflow_code/Manifest.toml`\n",
+ "WARNING: using StatsBase.sample in module Main conflicts with an existing identifier.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "plot_len_dist (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "using Pkg\n",
+ "Pkg.activate(@__DIR__)\n",
+ "Pkg.instantiate()\n",
+ "using Revise\n",
+ "\n",
+ "using Random\n",
+ "using Statistics\n",
+ "using Adapt\n",
+ "using Functors\n",
+ "using Flux\n",
+ "using Onion\n",
+ "using RandomFeatureMaps\n",
+ "using Zygote\n",
+ "\n",
+ "Pkg.develop(path=joinpath(@__DIR__, \"..\"))\n",
+ "using Flowfusion\n",
+ "const FF = Flowfusion\n",
+ "\n",
+ "include(joinpath(@__DIR__, \"prob_model.jl\"))\n",
+ "include(joinpath(@__DIR__, \"helper_funcs.jl\"))\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "to_same_device (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import CUDA\n",
+ "\n",
+ "# Device helpers\n",
+ "const _gpu_enabled = try\n",
+ " CUDA.has_cuda()\n",
+ "catch\n",
+ " false\n",
+ "end\n",
+ "\n",
+ "to_dev(x) = _gpu_enabled ? Adapt.adapt(CUDA.CuArray, x) : x\n",
+ "to_cpu(x) = _gpu_enabled ? Adapt.adapt(Array, x) : x\n",
+ "# move x to the same device type as y (Array or CuArray)\n",
+ "to_same_device(x, y) = (_gpu_enabled && (y isa CUDA.CuArray)) ? Adapt.adapt(CUDA.CuArray, x) : Adapt.adapt(Array, x)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "make_minibatch (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Minibatch builder (uses true PM)\n",
+ "function make_minibatch(B::Int, P::FF.EditFlow; rng=Random.default_rng())\n",
+ " K = P.k\n",
+ " x0s = Vector{FF.DiscreteState}(undef, B)\n",
+ " x1s = Vector{FF.DiscreteState}(undef, B)\n",
+ " for b in 1:B\n",
+ " # x1 from true PM\n",
+ " seq1 = sample(PM; rng=rng)\n",
+ " @assert all(1 .<= seq1 .<= K)\n",
+ " x1s[b] = FF.DiscreteState(K, seq1)\n",
+ " # x0: uniform tokens with random length in 1:10 (no BOS in x0)\n",
+ " L0 = rand(rng, 1:10)\n",
+ " seq0 = rand(rng, 1:K, L0)\n",
+ " x0s[b] = FF.DiscreteState(K, seq0)\n",
+ " end\n",
+ " ts = rand(rng, Float32, B)\n",
+ " return x0s, x1s, ts\n",
+ "end\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "EditFlowModel"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Model definition\n",
+ "struct EditFlowModel{L}\n",
+ " layers::L\n",
+ "end\n",
+ "Flux.@layer EditFlowModel\n",
+ "\n",
+ "function EditFlowModel(; d=128, num_heads=8, nlayers=6, rff_dim=128, cond_dim=128, K::Int)\n",
+ " embedding = Flux.Embedding(K + 2 => d)\n",
+ " time_embed = Flux.Chain(RandomFourierFeatures(1 => rff_dim, 1.0f0), Dense(rff_dim => cond_dim))\n",
+ " blocks = [Onion.AdaTransformerBlock(d, cond_dim, num_heads) for _ in 1:nlayers]\n",
+ " head_combined = Dense(d => 2K + 1, bias=false)\n",
+ " rope = RoPE(d ÷ num_heads, 4096)\n",
+ " return EditFlowModel((; embedding, time_embed, blocks, head_combined, rope, K))\n",
+ "end\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Forward pass\n",
+ "function (model::EditFlowModel)(t, Xt_ms)\n",
+ " m = model.layers\n",
+ " X = FF.tensor(Xt_ms)\n",
+ " X = ndims(X) == 1 ? reshape(X, :, 1) : X\n",
+ " L, B = size(X)\n",
+ "\n",
+ " pmask = Zygote.@ignore FF.getlmask(Xt_ms)\n",
+ " Xp = X .+ 1\n",
+ " H = m.embedding(Xp)\n",
+ "\n",
+ " t = ndims(t) == 0 ? fill(Float32(t), B) : Float32.(t)\n",
+ " cond = m.time_embed(reshape(t, 1, B))\n",
+ "\n",
+ " cond = to_same_device(cond, H)\n",
+ " pmask = Zygote.@ignore to_same_device(pmask, H)\n",
+ " rope = Zygote.@ignore to_same_device(m.rope[1:L], H)\n",
+ "\n",
+ " for blk in m.blocks\n",
+ " H = blk(H; cond, rope, kpad_mask=pmask)\n",
+ " end\n",
+ " return m.head_combined(H)\n",
+ "end\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "train_editflow! (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Training (GPU if available)\n",
+ "function train_editflow!(P::FF.EditFlow,\n",
+ " model;\n",
+ " epochs::Int=1,\n",
+ " steps_per_epoch::Int=100,\n",
+ " batch_size::Int=64,\n",
+ " lr::Float32=1f-2,\n",
+ " seed::Int=42,\n",
+ " print_every::Int=25)\n",
+ "\n",
+ " rng = Random.MersenneTwister(seed)\n",
+ " Random.seed!(seed)\n",
+ "\n",
+ " # Move model to device (GPU if available)\n",
+ " model = Functors.fmap(to_dev, model)\n",
+ " opt_state = Flux.setup(Flux.Adam(lr), model)\n",
+ "\n",
+ " for epoch in 1:epochs\n",
+ " for step in 1:steps_per_epoch\n",
+ "\n",
+ " # 1) Minibatch Sampling\n",
+ " x0s, x1s, ts = make_minibatch(batch_size, P; rng=rng)\n",
+ "\n",
+ " # 2) Align and batch\n",
+ " Z0, Z1 = FF.align_and_batch(P, x0s, x1s)\n",
+ "\n",
+ " # 3) Interpolate\n",
+ " Zt, Xt = FF.interpolate_Z_elementwise(P, Z0, Z1, ts)\n",
+ "\n",
+ " # 4) Prepend BOS\n",
+ " bos = P.bos_token\n",
+ " Zt = vcat(fill(bos, 1, batch_size), Zt)\n",
+ " Xt = vcat(fill(bos, 1, batch_size), Xt)\n",
+ " Z1 = vcat(fill(bos, 1, batch_size), Z1)\n",
+ " \n",
+ " # 5) Masks and multipliers\n",
+ " transition_mask = FF.transition_mask_from_Xt(P, Xt)\n",
+ " edit_multiplier = FF.remaining_edits(P, Zt, Z1, Xt)\n",
+ " @assert size(transition_mask) == size(edit_multiplier)\n",
+ "\n",
+ " # 6) Scheduler scaling\n",
+ " den = 1f0 .- P.κ.(ts)\n",
+ " den = max.(den, 1f-3)\n",
+ " scheduler_scaling = P.dκ.(ts) ./ den\n",
+ "\n",
+ " # 7) Masked state\n",
+ " lmask = Xt .!= P.padding_token\n",
+ " cmask = trues(size(lmask))\n",
+ " Xt_ms = FF.MaskedState(FF.DiscreteState(P.k, Xt), cmask, lmask)\n",
+ "\n",
+ " ts_d = to_dev(ts)\n",
+ " Xt_ms_d = to_dev(Xt_ms)\n",
+ " Tmask_d = to_dev(transition_mask)\n",
+ " Emult_d = to_dev(edit_multiplier)\n",
+ " sched_d = to_dev(reshape(Float32.(scheduler_scaling), 1, 1, :))\n",
+ "\n",
+ " # 8) Forward + loss + update\n",
+ " loss, grad = Flux.withgradient(model) do m\n",
+ " M = m(ts_d, Xt_ms_d)\n",
+ " l = FF.edit_loss(P, M, Tmask_d, Emult_d, sched_d; eps=1f-8)\n",
+ " if isnan(l)\n",
+ " println(\"Maximum element of M: \", maximum(M))\n",
+ " end\n",
+ " l\n",
+ " end\n",
+ " Flux.update!(opt_state, model, grad[1])\n",
+ "\n",
+ " if step % print_every == 0\n",
+ " @info \"train\" epoch step loss=Float32(loss)\n",
+ " end\n",
+ " end\n",
+ " end\n",
+ "\n",
+ " return Functors.fmap(to_cpu, model)\n",
+ "end\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Init process and model\n",
+ "K = PM.K\n",
+ "P = FF.EditFlow(K; bos_token=0, impl=\"positionwise\")\n",
+ "model = EditFlowModel(; d=128, num_heads=8, nlayers=4, rff_dim=128, cond_dim=128, K=K)\n",
+ "nothing"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 77.32212f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 62.010212f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 54.765823f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 55.06506f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 51.20858f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 49.92301f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 49.66504f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 48.609978f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 51.766243f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 46.577633f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 46.013363f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 44.984547f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 45.69627f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 48.54598f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 46.083076f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 41.404823f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 41.41694f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 40.346214f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 44.24388f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 42.988144f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 44.356007f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 43.046814f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 44.238304f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 42.40614f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 40.038864f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 39.248238f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 39.251083f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 38.37234f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 39.504143f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 38.68367f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 39.95724f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 36.87685f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.32936f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 37.77718f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 37.4764f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.697372f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 35.233315f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.579445f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 37.07529f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 37.277664f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 33.53584f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 35.566807f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 36.145203f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 36.07258f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.562103f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 35.07919f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.078888f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 37.076546f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 36.745842f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 35.205795f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 33.40426f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 33.041412f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.140083f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.82329f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.56766f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.306625f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 33.299297f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.544945f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 33.594986f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 35.99458f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 35.273575f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.578995f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.579735f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.745888f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.89444f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.12862f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.716965f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.7956f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.485348f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.210342f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.249763f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.991463f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 33.865524f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 33.39278f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.85763f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.728132f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.789724f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.589245f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.698822f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.386007f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.859806f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 33.39788f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.370934f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.334873f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.145905f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.896702f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.935232f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.63628f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.987965f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.22433f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.780943f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.084726f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.95314f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.072214f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.637058f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.1978f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.311502f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.983727f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.378075f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.824142f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.99437f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.723846f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.51981f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 34.55582f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.413897f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.88297f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.492455f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.25613f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.992672f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.894299f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.46797f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.885025f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.204609f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.554102f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.592083f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.41414f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.871262f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.159111f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.342709f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.10995f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.296486f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.800013f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.61753f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.39122f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.753365f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.641577f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.24447f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.80323f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.964045f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.822504f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.006264f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.91555f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.783787f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.890472f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.845434f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.83451f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 32.009922f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.013016f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.106924f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.63213f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.449276f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.05313f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.290436f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.276487f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.076471f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.027508f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.74162f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.38826f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.541903f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.33956f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.591618f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.27103f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.449995f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.65526f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.825336f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.996181f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.86678f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.68143f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.710367f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.882233f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.672073f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.578857f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.669641f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.462646f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.811617f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.703606f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.874252f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.179556f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.148922f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.66884f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.42384f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.84734f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.043884f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.35019f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.323244f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.033892f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.690865f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.976942f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.335669f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.302813f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 30.665878f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.722029f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.110176f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.456757f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.793577f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.014038f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.246342f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.316242f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.664661f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.209648f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.616825f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.14788f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.519016f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.73012f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.564869f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.706131f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.197008f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 31.765541f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.374762f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.70539f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.18553f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.417723f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.525036f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.731668f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.166397f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.808641f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.353008f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.624584f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.626465f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.990967f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.641216f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.256786f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.595907f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.807907f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.43351f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 29.224606f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.267601f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.160694f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.640324f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.291248f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.828138f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.923212f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.349394f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.088284f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 17.915966f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.723827f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.686745f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.787931f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.630884f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.99827f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.101845f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.79374f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.24427f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.814526f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.683496f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.020454f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.851532f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.559927f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.804356f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.212154f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.894348f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.453125f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.238836f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.200993f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.51118f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.900951f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.565336f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.649536f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.295158f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.369617f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.885021f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.096455f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.068813f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.79005f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.681047f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.360323f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.9206f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.990232f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.18895f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.445778f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.310482f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.915564f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.857944f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.920141f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.909576f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.859642f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.192644f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.794025f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.398401f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 16.175182f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 28.37204f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.062489f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.663717f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.957298f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.496971f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.304325f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.922512f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.699911f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.254108f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.706352f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.18057f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.411335f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.421764f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.939445f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.996864f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.648907f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.776127f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.542099f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.333237f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.898983f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.80355f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.847319f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.493822f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.442886f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.023598f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.138752f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.160217f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.487549f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.946358f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.53986f0\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "EditFlowModel(\n",
+ " Embedding(22 => 128), \u001b[90m# 2_816 parameters\u001b[39m\n",
+ " Chain(\n",
+ " RandomFourierFeatures{Float32, Matrix{Float32}}(Float32[0.37109837 7.704748 … 5.5441585 1.6017374]),\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " [\n",
+ " TransformerBlock(\n",
+ " Attention(\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " identity,\n",
+ " identity,\n",
+ " Onion.var\"#32#34\"(),\n",
+ " 16,\n",
+ " 16,\n",
+ " 8,\n",
+ " 8,\n",
+ " ),\n",
+ " StarGLU(\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(512 => 128; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " NNlib.swish,\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.9961103, 0.98354983, 0.98296183, 0.9941034, 0.9855069, 0.97056925, 0.98523986, 0.98571247, 0.992952, 0.9959597 … 0.9968077, 0.974237, 0.9965491, 0.99233574, 0.975247, 0.9818705, 0.97323513, 0.9854002, 0.9814506, 1.0009559], Float32[-0.0038236545, 0.0061107413, -0.00062911137, 0.0057799933, -0.002794507, -0.001555508, -0.00058775704, -0.011436283, -0.0010510351, 0.0030899069 … 0.0054938016, 0.0007393659, -0.0042932453, -0.00040333753, 0.01101881, -0.0013433272, 0.0003267441, 0.006723721, -0.0017793853, 0.0063674543], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.9982594, 1.0053198, 0.9896972, 0.9885052, 1.0034368, 0.9959786, 1.0024047, 1.0017761, 1.0079848, 0.998037 … 0.99845004, 1.0012459, 1.0023891, 0.9972836, 1.0016316, 0.9928665, 0.9821593, 1.001839, 0.9991159, 0.98322225], Float32[0.0077800294, 0.006313712, 0.005019753, 0.009399522, 0.0057638027, 0.008210472, -0.00041128998, 0.009714841, 0.005229109, 0.010837439 … -0.008408365, 0.0010688071, -0.0026440201, -0.0047563454, -0.00029993433, -0.00017475362, 0.010465704, 0.0038032355, 0.008328137, 0.0069600623], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " identity,\n",
+ " ),\n",
+ " TransformerBlock(\n",
+ " Attention(\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " identity,\n",
+ " identity,\n",
+ " Onion.var\"#32#34\"(),\n",
+ " 16,\n",
+ " 16,\n",
+ " 8,\n",
+ " 8,\n",
+ " ),\n",
+ " StarGLU(\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(512 => 128; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " NNlib.swish,\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.98340446, 0.99515694, 0.99383044, 0.98744017, 0.98178893, 0.99770486, 0.9998854, 0.98325014, 0.99851084, 0.97928643 … 0.9928049, 0.9935282, 0.99334264, 0.9797028, 0.9886869, 0.9849082, 0.96643585, 0.99244535, 0.9834009, 0.9998993], Float32[-0.0050134575, -0.0036863368, 0.0032099392, -0.000613435, -0.0024439872, -0.0025708228, -0.0032925045, -0.0032033226, 0.006190524, 0.0064956564 … 0.005046286, -0.0013077608, -0.0036956323, -0.0070013213, -0.0011397419, -7.354888f-5, -0.00049049803, 0.0032066598, 0.00010148762, 0.0008781409], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.99697554, 0.9989613, 0.98683894, 0.9949222, 0.99189675, 0.9979521, 1.0014259, 0.9904876, 0.9937987, 1.0045815 … 1.0036364, 1.0192485, 0.9905473, 0.992812, 1.007178, 1.0157473, 1.0048788, 1.0006422, 1.005701, 1.0034955], Float32[0.01035669, 0.007019663, 0.0067280596, 0.0077844895, 0.011074385, 0.005554042, 0.009326161, 0.0038617663, -0.0066101057, 0.010390683 … 0.0052756458, -0.0034369635, -0.0035258406, -0.009991266, 0.003326182, -0.00122832, 0.010301022, 0.0126599455, -0.005512634, -0.00085900724], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " identity,\n",
+ " ),\n",
+ " TransformerBlock(\n",
+ " Attention(\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " identity,\n",
+ " identity,\n",
+ " Onion.var\"#32#34\"(),\n",
+ " 16,\n",
+ " 16,\n",
+ " 8,\n",
+ " 8,\n",
+ " ),\n",
+ " StarGLU(\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(512 => 128; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " NNlib.swish,\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.99811625, 0.9854664, 0.9989415, 0.99436367, 1.0049703, 0.9964015, 0.9879783, 1.0056946, 1.000729, 0.99081683 … 1.0057596, 1.0069537, 0.99401844, 1.0044988, 0.9727968, 0.99472237, 0.9930699, 0.9901404, 0.99556744, 0.99798906], Float32[-0.0072035347, -0.0070618317, 0.00017180148, 0.0028987664, -0.00460521, -0.0011136559, 0.0010147326, -0.0032454734, 0.0025976172, 0.003775801 … -0.00087325997, 0.0020796831, 0.0005583409, 0.0042034183, 0.0023550594, -0.0021972822, 0.0001533411, 0.0024601675, 0.0048599523, 0.0049486584], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[1.0113374, 1.0362657, 1.0129801, 1.0054824, 0.9959235, 1.0161504, 1.0031482, 1.0127438, 1.0027536, 1.0205426 … 1.0534416, 0.99659115, 1.0074198, 1.027664, 0.99709916, 0.9974137, 1.005346, 0.98684317, 1.0034771, 0.9989774], Float32[-0.0014052559, 0.0030515736, -0.0021614903, 0.0066673947, 0.007202584, 0.0017106866, -0.0010570075, 0.0007347914, 0.0047691455, -0.00045394935 … 0.0019431848, -0.007668013, 0.006576849, -0.0028465583, 0.0037018328, -0.007993788, 0.006362465, 0.008466869, -0.007678316, 0.004118309], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " identity,\n",
+ " ),\n",
+ " TransformerBlock(\n",
+ " Attention(\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " identity,\n",
+ " identity,\n",
+ " Onion.var\"#32#34\"(),\n",
+ " 16,\n",
+ " 16,\n",
+ " 8,\n",
+ " 8,\n",
+ " ),\n",
+ " StarGLU(\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(512 => 128; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " NNlib.swish,\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.9981497, 1.002889, 0.98744977, 1.0060855, 0.985402, 0.98569524, 0.9988142, 0.99421, 0.97521454, 0.98611385 … 1.004141, 1.0106245, 0.9919724, 0.99938774, 0.9956309, 1.0020154, 1.014488, 1.0070881, 0.9995131, 0.9986625], Float32[-0.00467435, -0.0041207974, 0.003574141, 0.0018393839, -0.00774704, -0.0004402911, 0.009702865, -0.0013263967, -0.0007161403, 0.0039062018 … 0.00023826491, 0.0005687163, -0.005481451, -0.002329852, 0.00050594786, 0.0018227947, -0.0053469585, -0.0071314457, -0.004511974, 0.00010769644], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[1.0128297, 1.0101146, 1.0129786, 0.9997293, 1.0020403, 0.99318516, 1.0349357, 1.0035822, 1.0150418, 1.0350649 … 1.0229619, 1.0016078, 1.0106664, 1.0060273, 1.0075238, 0.9961528, 1.0068473, 1.0010078, 1.0145574, 1.0092921], Float32[0.0013683313, 0.006150891, 0.0034406697, 0.005812049, 0.012213179, 0.0059094066, -0.0019328047, 0.0070142355, 0.0056433696, 0.00019984429 … 0.002948093, -0.011170231, 0.009000667, 0.0016508012, 0.007526409, -0.005769551, 0.0012698864, 0.0066841603, 0.00037845137, -0.0011874678], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " identity,\n",
+ " ),\n",
+ " ],\n",
+ " Dense(128 => 41; bias=false), \u001b[90m# 5_248 parameters\u001b[39m\n",
+ " RoPE{Matrix{Float32}}(Float32[1.0 0.5403023 … -0.87528455 -0.065975994; 1.0 0.95041525 … 0.9552474 0.8159282; … ; 1.0 0.9999995 … -0.57972294 -0.5789079; 1.0 0.99999994 … 0.2726629 0.27235872], Float32[0.0 0.84147096 … -0.48360822 -0.9978212; 0.0 0.3109836 … 0.29580808 0.5781532; … ; 0.0 0.0009999999 … -0.8148137 -0.8153929; 0.0 0.0003162278 … 0.9621096 0.9621958]),\n",
+ " 20,\n",
+ ") \u001b[90m # Total: 80 trainable arrays, \u001b[39m1_339_392 parameters,\n",
+ "\u001b[90m # plus 3 non-trainable, 65_600 parameters, summarysize \u001b[39m5.364 MiB."
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "model = train_editflow!(P, model; epochs=50, steps_per_epoch=150, batch_size=256, lr=1f-4)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "MersenneTwister(123023)"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "rng = Random.MersenneTwister(123023)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1000-element Vector{String}:\n",
+ " \"QVQLVQSLAEVK\"\n",
+ " \"QVQLVESGGIFK\"\n",
+ " \"TPQLQESCPGLWVKPG\"\n",
+ " \"QVQLVQSGAEVKK\"\n",
+ " \"QQHLVQSGAEVK\"\n",
+ " \"QVQAVKSGGEVKPAGGKSR\"\n",
+ " \"QVQLVESGTGLVKLP\"\n",
+ " \"EVLVERGGQLVQPGNKLS\"\n",
+ " \"QTQLDQSGRLVKPSGTL\"\n",
+ " \"QFQLVQSVAA\"\n",
+ " \"VVQLVQSGAEVKKKPGASVVK\"\n",
+ " \"QVQLVESGGVLVQPGGSLV\"\n",
+ " \"QVQLVQSGTEVKKPGASVKSVK\"\n",
+ " ⋮\n",
+ " \"QVQLVQSGAEVKK\"\n",
+ " \"EVLQEGGGLVQRSL\"\n",
+ " \"QVQLVESDGAEVKKP\"\n",
+ " \"EVELMESGGGLVQPGGSL\"\n",
+ " \"EHHLVESGGGL\"\n",
+ " \"EVQLVQSGAEV\"\n",
+ " \"EVTLVEVGPL\"\n",
+ " \"QVQLLVPSGAEVKKPGS\"\n",
+ " \"EVQLVQDVGLVKCGGS\"\n",
+ " \"QVQLVQSGTEVK\"\n",
+ " \"QVQLVESGGTVKK\"\n",
+ " \"QVQLVQSGFEVKK\""
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Sampling and Levenshtein plot\n",
+ "using Random\n",
+ "n = 1000\n",
+ "# 100 model samples (final states → strings)\n",
+ "model_samples_any = sample_gen_n(P, model; n=n, ts=0f0:0.01f0:1f0, rng=rng)\n",
+ "model_final_states = map(final_state_from_gen, model_samples_any)\n",
+ "model_strings = [state_to_PM_string(P, s) for s in model_final_states]\n",
+ "\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Build training strings from PM parents (the data PM was built on)\n",
+ "train_states = [FF.DiscreteState(P.k, sample(PM; rng=rng)) for i in 1:100]\n",
+ "train_strings = [state_to_PM_string(P, s) for s in train_states]\n",
+ "\n",
+ "# Independent validation strings sampled from PM\n",
+ "val_states = [FF.DiscreteState(P.k, sample(PM; rng=rng)) for i in 1:n]\n",
+ "val_strings = [state_to_PM_string(P, s) for s in val_states]\n",
+ "#val_strings = [s for s in val_strings if !(s in train_strings)]\n",
+ "\n",
+ "# Plot normalized Levenshtein vs. training set (distinct val/train)\n",
+ "plt = plot_lev_dist(\"model_vs_true\", val_strings, model_strings, train_strings; title=\"Model vs True (normalized Levenshtein)\")\n",
+ "display(plt)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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Nztr1qyoqKhu3br5+Ph06NCBKRcIBCr7l68mnCMEAGAdl8O5c2DL4zMH2O7oecIdzpS3lUtGjx49evRo5uGuXbt27dpF/37//feHDx9eWFjo4ODA3B2ew+EcPHiQqe/g4JCcnJyVlWVjYyMQCGiho6Mjs1tJCHF1dU1JScnOzraystLR0fn6669peWFhIQsvseUhEQIAsK7aDncAACAASURBVO7rLRuTk5NbpasxzVoURldX18nJqfE6HA7H0dGx8To8Hu+F23llIRECALCuU6dOL8wlLcXY2Lh1Omo3kAgBAFg3fuwH589f4PN5bHdUUys89scfI0aMYLsjVkml0pqaGiMjo9bpDokQAIB1NdVVe5d9NLinL9sdzfj6Z2YujLKYmJjvvvsuISFBR0fH09Nz2rRpoaGhbAfDiI+PLy8v79u3bxPr37hxY/78+XTVt1aAWaMAAO3c6dOnQ0NDvby89u3bFx4eHhISMmPGDLlc3moBnDt37vDhw63WXXNhjxAAoD2TSqUfffTR+vXr58+fT0t8fX3Hjx/PTBM9c+bMyZMn5XL5mDH/nWhz8+bN58+fczicEydOODo6rlixwszMjBAil8v37dt37do1AwOD2bNnd+nShRASERFhbm4eGxt79+7dr7/+Oicn58iRI9nZ2U5OTvPnz3dyckpPTz937lxpaeny5csdHBzmzp1LCPn111+joqK0tLTCwsJ69uxJIzl27Njp06ctLS0DAwNbc4iwRwgA0J7Fx8fn5ORMnjxZuVBXV5f+8Z///GflypUjR44cNWrU3LlzIyMjCSH37t375JNP7t69GxYWlpGRMXPmTFp55syZp06dmjx5co8ePQYNGvT06VNCyJkzZyZNmiSRSKZNm6avr//gwYPevXvPnz/f0tKyT58+NTU1JiYmHh4e9vb2AwcODAgIIIQsW7Zs9+7d48aNCwkJGT16dFxcHCHk119/XbJkyZgxY3r27LlixYrWHCLsEQIAtGd5eXkGBgYmJib04Zo1a3JzcwkhS5cudXNzW7169T///EP37cRi8Y8//kgn2jg5OdHLAV1dXWn2SktLO3bsWF5eno6ODiEkNTV1z549GzduJIQMGjSISV0zZswQi8X5+fl2dnYRERG3b98ODQ318PDgcDj0mv2SkpLvv/8+Ozvb1NSUEJKTk7Nr166dO3du3779q6++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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "model_strings_bos = [\">\" * state_to_PM_string(P, s) for s in model_final_states]\n",
+ "plt = plot_lev_dist(\"model_vs_true\", val_strings, model_strings_bos, train_strings; title=\"Model vs True (normalized Levenshtein)\")\n",
+ "display(plt)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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gUq/fv1Onjx57tw55kAccy35vwYhTdPM/UdGjRp17dq1hISE9evXOzs7N2nS5JmDMDs7WywWM3k/bNgwo7He3t4TJkw4cODArVu34uPj9+/f36xZM0LI/v37q5/t3r17mRNynTt3/uGHH44dO3b69Oldu3bNnj2b2XIMbyURHR1ta2srFAqnTp169OjRe/funTt3buPGjb169Ro3bhzbrCZBSNP0uXPnrKysJBLJ3LlzT548ee/evTNnzqxZs6ZTp07z589n2lQVhDRNMxewjhw50nQNGwbhmjVrCCGtW7deunTp5s2bf/75Z2Z4XFycg4MDcyuJI0eO3Lt3788//9y8eXPfvn1HjRrFTj537lxCSFhY2PHjxx8+fLh//35/f3/mnlAIQhaCsKF78803CSHffvttVQ02bNhACBkyZAi771jNrglzLur777+vqkGtgpCmaZVKNXfuXKM7VIlEot69exvewOXEiROGHbh9fHxu3bpldGcZmqajoqIMT+N7eHhERkaa3llGp9MtXLiQ6TTIEgqF3bt3Z7/51jAIaZquqKiYMGGCUQfFtm3bmj5Z5oquGTNmGA1/ziDMz89n+90Y7ubOnTvX8NxSkyZN7t69a2dnZxiENE2fOXPGsHMs+xmamprK3ECAYWtru3fv3qruLGNa7f379w3vwCIQCGbPns2s1WcLQvqfCwqJweWDrI4dO5Kn2draLl++vCazvX37dv/+/U3PwwUHB69du5Y5WMK6c+eO6bLc3d3XrVvHtqlhENI0ffHiRdN77Pn6+rI3AKomCE3X8Icffrhq1SrydBCqVKp3332X7XRteGeZ2NjYrl27Gi3d1dV1xYoVbButVmt0PnvEiBHMgRAEIUtA4xfqG7b09HSdTufl5cV5C0FCiFqtzsrKEolEPj4+zOm0oKCgqjpklpWVFRUV2draMn3BTSmVypycHHt7e8OeZhUVFfn5+XK53NnZmXOqkpKSq1evZmRk2NjYeHl5tW/f3jD2GE+ePDl37lxBQYGfn1+fPn2sra2ZnRujU4Dl5eVnz54tKCjw9PTs37+/TCbLzMxk7rRp9KTKy8uvXLmSlpYmlUq9vLzatm1r+KSYZ+ri4mLUkScrK0utVgcGBholX3Z29uXLl0tKSuRyeatWrTgvMunatev169djYmKMxhYUFJSWljo5OVX/m3zl5eUFBQUO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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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z5//4osv6McBAABtCMIGYfXq1Rs3bmT2FNbW1tKXdMjOzv7rr7/oRhcXl8LCQib8mjZtGhkZSQiRSqW6w21Yj1NXV/fjjz8a+1kAADRGCMIGoU2bNkOHDmWCcMWKFWPHju3atevIkSP79etHN7722mvdunULDAykj/+bP3/++fPnW7Zs2blz53bt2ul92FmzZh09evS1115r165daGgo087n81nrlwAAFsvS9xFyOZyonyPuHdlm7BllJ93hcKZqt4wbN27cuHHMv7/88ssvv/xC337//fdHjRpVWlrq6+vLJBaXyz1w4ADTPygo6PHjx3l5eZ6enszm0ObNmxcXFzN9QkJC0tLS8vPzPTw8rK2tmfaampqX/fwAABorSw/CHzZ+9/jxY5PM6t0333zT8N4ikUgkEtXfh8vl+vn51d/HysrK39/f8PkCAFgaSw/C0NDQwMBA08zLzs7ONDMCAADDWXoQjnp7xLVr13g8nrFnVCuVnTx1qn///saekVEplUq5XG5vb2/uQgAAXhpLD0JpTc3+ZfPeaNvS2DMa//UWqVSq237jxo3vv/8+MTFRJBK1aNFiypQpvXr1MnYxjNjY2Lq6uh49ehjY/+LFiytWrLhx44ZRqwIAMCWMGjWnQ4cODRgwoEOHDnv37t22bVuPHj2mTZtmygKOHz9+8OBBU84RAKChsfQ1QjOSy+Vz5sxZv379hx9+SLe0b99+woQJTIe///77xIkThJBx48aFhYURQq5evVpSUiKVSk+ePBkYGPjZZ5+JxWJCiFqt/vnnn6OiohwdHWfNmtWiRQtCyP79+318fGJiYuLi4jZv3pySknL48OH8/PzAwMB58+b5+PikpKRcuHBBLpd/+umngYGBM2bMoChq3759ly9ftrGx+eijj9q3b09XcuDAgRMnTnh7e9OnOQUAeJVgjdBsbt++XVJSop18hBAbGxv6xvr161evXj1y5MghQ4ZMnTr1woULhJAbN27MmjUrOTl56tSpDx48mDNnDt15woQJ58+fnzx5ctu2bcPCwnJycgghx44de//993k83qRJk6ytrRMTE19//fW5c+fa29v37t27rq7OxcUlODjYz8+vX79+nTp1IoTMnTt3//7977//fo8ePQYPHpycnEwI2blz5/Lly8eNG9e2bVtcBwrgZVGpVDKD4WLaRoU1QrMpLCx0dXUVCoX0v0uXLi0pKaFv+Pj4rFixIj4+vkmTJoSQmpqaH3/8kT6yPiQk5OuvvyaEeHp6Dhw4kBCSnJx84cKF3NxcgUAQFhaWnJy8Z8+eZcuWEUKGDh26ePFi+vFnzJihUCgKCwvHjx9/8ODBuLi47t27BwcHl5eX049cUFCwe/fuwsJCenRrVlbWjh07Nm3atHHjxg0bNgwePJgQkp6efurUKZMvKoBX0I87f0nILORy2WsjSqWKz2d/M3PVis9nTnym0w6D4RCEZuPg4FBRUaFWq+kxq61bt66urv7444+nT5+uVqulUml4eDjdUy6XOzs707ebNWtG33BxcSkvLyeEJCcny2QyZsBLZWUlHZCEEO2zyfzf//3fhg0bQkJCHB0di4uLCwoKWPU8fPhQrVb36dOH/re6uppeTUxLS2vTpg3d2LZtWwQhwEtRIVM49fnAztWL1a5QKOgzI2rLvfQ7VgqNB0FoNp07d+ZyuZcuXaKPqRg7diwhZMGCBYQQOvYuXbrk4ODAmkr396OLi4u3t/edO3d0Z2Fl9c/rW1VVtWTJkpycHDc3N0JI69atmRN5M2fidnFxsbOzu337Nuvsa46OjuXl5fRP0bKyshd81gAADQ32EZqNs7PzwoULZ86cyRyNkJ+fr1arCSFisXjAgAHLly+n/5XJZPTuOr26du1aV1e3e/du+t+SkpLMzExWH6VSSVEUfcLu48ePM4/m5uaWmZlJZ2FoaKinp+eGDRvouyorK+lz7gwZMuSHH36gKIq+0uFLe/4AAA0DgtCcVq9ePWPGjNGjRzs6Ovr6+vbq1evLL79s2bIlIWT37t05OTl+fn6tW7du1qwZfaEJoVDInHeNy+U6OjoSQkQi0bFjx3766aegoKCQkJCuXbtmZGQQQmxtbZnzi7q4uCxZsqR169atWrXavXv3gAED6G0v4eHhcrk8KCjovffes7Ky+uuvv06ePOnv79+yZct27dolJSURQtasWZOWlhYYGNi+ffvXX38dR9MDwCvG0jeNcrjcbw8c33X2mrFnFPcwTXerJofDWbRo0aJFi8rKykQiETNwhhDi6en5559/qlSq6upqJycnunHevHnaHfLz8+nbbdu2jY6OlsvlSqWSCaqdO3dqz2vVqlWff/65QqHQ3tzq4uJy7tw55t9mzZpdunRJoVDI5XKmm7u7+5UrV6qrq4VCofbFDgEAXg2WHoT/t3nLw4cPTTCjCVZWffv2fdK9zFgYFisrKyYFn0ooFGpH6XN0oAkEAt199VgRBIBXlaUHYZs2bZghkQAAYIGwjxAAACwaghAAACyapW8aBQBD1FZXluelsxrVag0hhMdj/56uqSw3UVkALwOCEACeQq1WS+7ddOVSrHb6CFTNv8/AQAgpvh8rk8mYQ30AGjgEIQA8nRWXeqtTe1YjpdEQQjg6xwVlJscxZywCaPgsKwhtbGwWL178xRdfmLuQVwp9iKG5qwAAeE6WFYRff/11Y7mQUE1NDX0ViAaOoiiFQuHp6WnuQgAAnpNlBSGfzzf8+HTzsrKyahTHsFMUJZVKzV0FAMDzw+ETAABg0RCEAABg0RCEAABg0RCEAABg0RCEAABg0Sxr1ChAg5KWlkZfRZlFKpXqPS1L69atcaQKwEuHIAQwm5i4e8fSFXauXqx2lZJjpXMN5MrctAVCIYIQ4KVDEAKYk7N/M8/m7ViNCoVC99rI2co6UxUFYFmwjxAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACwaghAAACyasYKwsLBw/PjxoaGho0aNSk9P1+1w8+bNZcuWDR8+fO3atdrtDx48GDZsWGho6OTJk0tLS41UHgAAAM1YQTh+/HhbW9sTJ060bNly+PDhFEWxOty8eVMqlSqVyuTkZKZRpVINGjSoW7duJ06cUCqV06ZNM1J5AAAANKME4aNHj6Kjo9evXx8cHBwREVFcXHz16lVWn7lz565fv75Dhw7ajadOneJyuUuXLg0ODt6wYcPJkydzc3ONUSEAAADNKEGYmJgYEhJib29PCOFyuR07drx//76BE7722mv0bXd3d19fX+31RQAAgJfOyhgP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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "\n",
+ "pAA = plot_AA_dist(\"model_vs_true_AA\", val_strings, model_strings; title=\"AA frequency: Natural vs Generated\")\n",
+ "display(pAA)\n",
+ "\n",
+ "pLen = plot_len_dist(\"model_vs_true_len\", val_strings, model_strings; title=\"Length distribution: Natural vs Generated\")\n",
+ "display(pLen)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Natural 'A' frequency: 0.04726267529665588\n"
+ ]
+ }
+ ],
+ "source": [
+ "println(\"Natural 'A' frequency: \", (isdefined(Main, :val_strings) ? sum(count(==('A'), s) for s in val_strings) / sum(length.(val_strings)) : sum(count(==('A'), s) for s in val_strings) / sum(length.(val_strings))))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Natural 'A' frequency: 0.04435456690259521\n"
+ ]
+ }
+ ],
+ "source": [
+ "println(\"Natural 'A' frequency: \", (isdefined(Main, :model_strings) ? sum(count(==('A'), s) for s in model_strings) / sum(length.(model_strings)) : sum(count(==('A'), s) for s in model_strings) / sum(length.(model_strings))))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Julia 1.11.6",
+ "language": "julia",
+ "name": "julia-1.11"
+ },
+ "language_info": {
+ "file_extension": ".jl",
+ "mimetype": "application/julia",
+ "name": "julia",
+ "version": "1.11.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/editflow_code/editflowsrun.jl b/editflow_code/editflowsrun.jl
new file mode 100644
index 0000000..3ef36e0
--- /dev/null
+++ b/editflow_code/editflowsrun.jl
@@ -0,0 +1,199 @@
+using Pkg
+Pkg.activate(@__DIR__)
+#Pkg.instantiate()
+using Revise
+
+using Random
+using Statistics
+using Adapt
+using Functors
+using Flux
+using Onion
+using RandomFeatureMaps
+using Zygote
+Pkg.develop(path=joinpath(@__DIR__, ".."))
+using Flowfusion
+const FF = Flowfusion
+include(joinpath(@__DIR__, "prob_model.jl"))
+include(joinpath(@__DIR__, "helper_funcs.jl"))
+
+import CUDA
+
+# Device helpers
+const _gpu_enabled = try
+ CUDA.has_cuda()
+catch
+ false
+end
+
+to_dev(x) = _gpu_enabled ? Adapt.adapt(CUDA.CuArray, x) : x
+to_cpu(x) = _gpu_enabled ? Adapt.adapt(Array, x) : x
+# move x to the same device type as y (Array or CuArray)
+to_same_device(x, y) = (_gpu_enabled && (y isa CUDA.CuArray)) ? Adapt.adapt(CUDA.CuArray, x) : Adapt.adapt(Array, x)
+
+# Load PM target (brings PM and AA20)
+
+function make_minibatch(B::Int, P::FF.EditFlow; rng=Random.default_rng())
+ K = P.k
+ x0s = Vector{FF.DiscreteState}(undef, B)
+ x1s = Vector{FF.DiscreteState}(undef, B)
+ for b in 1:B
+ # x1 from true PM
+ seq1 = sample(PM; rng=rng)
+ @assert all(1 .<= seq1 .<= K)
+ x1s[b] = FF.DiscreteState(K, seq1)
+ # x0: uniform tokens with random length in 1:10 (no BOS in x0)
+ L0 = rand(rng, 1:10)
+ seq0 = rand(rng, 1:K, L0)
+ x0s[b] = FF.DiscreteState(K, seq0)
+ end
+ ts = rand(rng, Float32, B)
+ return x0s, x1s, ts
+end
+
+struct EditFlowModel{L}
+ layers::L
+end
+Flux.@layer EditFlowModel
+
+function EditFlowModel(; d=128, num_heads=8, nlayers=6, rff_dim=128, cond_dim=128, K::Int)
+ embedding = Flux.Embedding(K + 2 => d)
+ time_embed = Flux.Chain(RandomFourierFeatures(1 => rff_dim, 1.0f0), Dense(rff_dim => cond_dim))
+ blocks = [Onion.AdaTransformerBlock(d, cond_dim, num_heads) for _ in 1:nlayers]
+ head_combined = Dense(d => 2K + 1, bias=false)
+ rope = RoPE(d ÷ num_heads, 4096)
+ return EditFlowModel((; embedding, time_embed, blocks, head_combined, rope, K))
+end
+
+function (model::EditFlowModel)(t, Xt_ms)
+ m = model.layers
+ X = FF.tensor(Xt_ms)
+ X = ndims(X) == 1 ? reshape(X, :, 1) : X
+ L, B = size(X)
+
+ pmask = Zygote.@ignore FF.getlmask(Xt_ms)
+ Xp = X .+ 1
+ H = m.embedding(Xp)
+
+ t = ndims(t) == 0 ? fill(Float32(t), B) : Float32.(t)
+ cond = m.time_embed(reshape(t, 1, B))
+
+ cond = to_same_device(cond, H)
+ pmask = Zygote.@ignore to_same_device(pmask, H)
+ rope = Zygote.@ignore to_same_device(m.rope[1:L], H)
+
+ for blk in m.blocks
+ H = blk(H; cond, rope, kpad_mask=pmask)
+ end
+ return m.head_combined(H)
+end
+
+# Training (GPU if available)
+function train_editflow!(P::FF.EditFlow,
+ model;
+ epochs::Int=1,
+ steps_per_epoch::Int=100,
+ batch_size::Int=64,
+ lr::Float32=1f-2,
+ seed::Int=42,
+ print_every::Int=25)
+
+ rng = Random.MersenneTwister(seed)
+ Random.seed!(seed)
+
+ # Move model to device (GPU if available)
+ model = Functors.fmap(to_dev, model)
+ opt_state = Flux.setup(Flux.Adam(lr), model)
+
+ for epoch in 1:epochs
+ for step in 1:steps_per_epoch
+
+ # 1) Minibatch Sampling
+ x0s, x1s, ts = make_minibatch(batch_size, P; rng=rng)
+
+ # align_and_batch basically
+ Z0, Z1 = FF.align_and_batch(P, x0s, x1s)
+
+ #
+ Zt, Xt = FF.interpolate_Z_elementwise(P, Z0, Z1, ts)
+
+ #Append BOS token to the beginning of the batch
+ bos = P.bos_token
+ Zt = vcat(fill(bos, 1, batch_size), Zt)
+ Xt = vcat(fill(bos, 1, batch_size), Xt)
+ Z1 = vcat(fill(bos, 1, batch_size), Z1)
+
+ transition_mask = FF.transition_mask_from_Xt(P, Xt)
+ edit_multiplier = FF.remaining_edits(P, Zt, Z1, Xt)
+
+ @assert size(transition_mask) == size(edit_multiplier)
+
+ den = 1f0 .- P.κ.(ts)
+ den = max.(den, 1f-6)
+ scheduler_scaling = P.dκ.(ts) ./ den
+
+ # 3) Masked state (CPU → device)
+ lmask = Xt .!= P.padding_token
+ cmask = trues(size(lmask))
+ Xt_ms = FF.MaskedState(FF.DiscreteState(P.k, Xt), cmask, lmask)
+
+ ts_d = to_dev(ts)
+ Xt_ms_d = to_dev(Xt_ms)
+ Tmask_d = to_dev(transition_mask)
+ Emult_d = to_dev(edit_multiplier)
+ sched_d = to_dev(reshape(Float32.(scheduler_scaling), 1, 1, :))
+
+ # 4) Forward + loss + update (on device)
+ loss, grad = Flux.withgradient(model) do m
+ M = m(ts_d, Xt_ms_d)
+ l = FF.edit_loss(P, M, Tmask_d, Emult_d, sched_d; eps=1f-8)
+ # INSERT_YOUR_CODE
+ if isnan(l)
+ println("Maximum element of M: ", maximum(M))
+ end
+ l
+ end
+ Flux.update!(opt_state, model, grad[1])
+
+ if step % print_every == 0
+ @info "train2" epoch step loss=Float32(loss)
+ end
+ end
+ end
+
+ # Move model back to CPU for sampling
+ return Functors.fmap(to_cpu, model)
+end
+
+# PM is the target probability model and K is the alphabet size
+K = PM.K
+println("K: ", K)
+
+P = FF.EditFlow(K; bos_token=0, impl=:positionwise)
+
+model = EditFlowModel(; d=128, num_heads=8, nlayers=4, rff_dim=128, cond_dim=128, K=K)
+
+# Train; returned model is on CPU
+model = train_editflow!(P, model; epochs=10, steps_per_epoch=150, batch_size=256, lr=1f-3)
+
+rng = Random.MersenneTwister(42)
+println("\n=== True PM samples (20) ===")
+for i in 1:20
+ seq = sample(PM; rng=rng) # Vector{Int} in 1..K_AA
+ aa_str = String(collect(AA20[seq]))
+ println("[", i, "] ", aa_str)
+end
+
+samples = sample_gen_10_strings(P, model; ts=0f0:0.01f0:1f0)
+
+println("\n=== Model samples (20) ===")
+for (i, s) in enumerate(samples)
+ if s isa AbstractString
+ println("[", i, "] ", s)
+ elseif s isa AbstractVector{<:AbstractString}
+ last_str = isempty(s) ? "" : s[end]
+ println("[", i, "] traj_last=", last_str, " (len=", length(s), ")")
+ else
+ println("[", i, "] (raw) ", s)
+ end
+end
diff --git a/editflow_code/figures/model_vs_true.pdf b/editflow_code/figures/model_vs_true.pdf
new file mode 100644
index 0000000..6f4f1a7
Binary files /dev/null and b/editflow_code/figures/model_vs_true.pdf differ
diff --git a/editflow_code/gapwise_editflowsrun.jl b/editflow_code/gapwise_editflowsrun.jl
new file mode 100644
index 0000000..385dbaf
--- /dev/null
+++ b/editflow_code/gapwise_editflowsrun.jl
@@ -0,0 +1,209 @@
+using Pkg
+Pkg.activate(@__DIR__)
+#Pkg.instantiate()
+using Revise
+
+using Random
+using Statistics
+using Adapt
+using Functors
+using Flux
+using Onion
+using RandomFeatureMaps
+using Zygote
+Pkg.develop(path=joinpath(@__DIR__, ".."))
+using Flowfusion
+const FF = Flowfusion
+include(joinpath(@__DIR__, "prob_model.jl"))
+include(joinpath(@__DIR__, "helper_funcs.jl"))
+
+import CUDA
+
+# Device helpers
+const _gpu_enabled = try
+ CUDA.has_cuda()
+catch
+ false
+end
+
+to_dev(x) = _gpu_enabled ? Adapt.adapt(CUDA.CuArray, x) : x
+to_cpu(x) = _gpu_enabled ? Adapt.adapt(Array, x) : x
+# move x to the same device type as y (Array or CuArray)
+to_same_device(x, y) = (_gpu_enabled && (y isa CUDA.CuArray)) ? Adapt.adapt(CUDA.CuArray, x) : Adapt.adapt(Array, x)
+
+# Load PM target (brings PM and AA20)
+
+function make_minibatch(B::Int, P::FF.EditFlow; rng=Random.default_rng())
+ K = P.k
+ x0s = Vector{FF.DiscreteState}(undef, B)
+ x1s = Vector{FF.DiscreteState}(undef, B)
+ for b in 1:B
+ # x1 from true PM
+ seq1 = sample(PM; rng=rng)
+ @assert all(1 .<= seq1 .<= K)
+ x1s[b] = FF.DiscreteState(K, seq1)
+ # x0: uniform tokens with random length in 1:10 (no BOS in x0)
+ L0 = rand(rng, 1:10)
+ seq0 = rand(rng, 1:K, L0)
+ x0s[b] = FF.DiscreteState(K, seq0)
+ end
+ ts = rand(rng, Float32, B)
+ return x0s, x1s, ts
+end
+
+
+############################
+# Gap-wise model + training
+############################
+
+# --- helper: build gap embeddings (pick one) ---
+gaps_from_sites_dup(H) = hcat(@view(H[:,1:1,:]), @view(H[:,2:end,:]), @view(H[:,end:end,:]))
+
+
+function gaps_from_sites_avg(H)
+ d, L, B = size(H)
+ if L == 1
+ middle = @view H[:, 1:0, :]
+ else
+ @views middle = 0.5f0 .* (H[:, 1:L-1, :] .+ H[:, 2:L, :])
+ end
+ # cat med dims=2 är säkrare på GPU än hcat i vissa kombinationer av views
+ return cat(@view(H[:, 1:1, :]), middle, @view(H[:, L:L, :]); dims=2) # d×(L+1)×B
+end
+
+struct EditFlowModel{L}
+ layers::L
+end
+Flux.@layer EditFlowModel
+
+function EditFlowModel(; d=128, num_heads=8, nlayers=6, rff_dim=128, cond_dim=128, K::Int)
+ embedding = Flux.Embedding(K + 2 => d)
+ time_embed = Flux.Chain(RandomFourierFeatures(1 => rff_dim, 1.0f0), Dense(rff_dim => cond_dim))
+ blocks = [Onion.AdaTransformerBlock(d, cond_dim, num_heads) for _ in 1:nlayers]
+ # --- split heads: ins on gaps, sub/del on sites ---
+ head_ins = Dense(d => K, bias=false) # applied on gaps (L+1)
+ head_sub = Dense(d => K, bias=false) # applied on sites (L)
+ head_del = Dense(d => 1, bias=false) # applied on sites (L)
+ rope = RoPE(d ÷ num_heads, 4096)
+ return EditFlowModel((; embedding, time_embed, blocks, head_ins, head_sub, head_del, rope, K))
+end
+
+# Forward: returns M of shape (2K+1, L+1, B)
+function (model::EditFlowModel)(t, Xt_ms)
+ m = model.layers
+ X = FF.tensor(Xt_ms)
+ X = ndims(X) == 1 ? reshape(X, :, 1) : X
+ L, B = size(X)
+
+ pmask = Zygote.@ignore FF.getlmask(Xt_ms)
+ Xp = X .+ 1 # embedding is 1-indexed
+ H = m.embedding(Xp) # d×L×B
+
+ t = ndims(t) == 0 ? fill(Float32(t), B) : Float32.(t)
+ cond = m.time_embed(reshape(t, 1, B))
+
+ cond = to_same_device(cond, H)
+ pmask = Zygote.@ignore to_same_device(pmask, H)
+ rope = Zygote.@ignore to_same_device(m.rope[1:L], H)
+
+ for blk in m.blocks
+ H = blk(H; cond, rope, kpad_mask=pmask) # d×L×B
+ end
+
+ # --- gap embeddings & heads ---
+ Hg = gaps_from_sites_avg(H) # d×(L+1)×B (or use gaps_from_sites_dup)
+ ins = m.head_ins(Hg) # K×(L+1)×B
+ sub = m.head_sub(H) # K×L×B
+ del = m.head_del(H) # 1×L×B
+
+ # pad sub/del with a zero last column to reach L+1
+ @views sub_pad = cat(sub, sub[:, 1:1, :].*0; dims=2)
+ @views del_pad = cat(del, del[:, 1:1, :].*0; dims=2)
+
+ # final combined logits (untransformed): (2K+1)×(L+1)×B
+ return vcat(ins, sub_pad, del_pad)
+end
+
+# --- training loop (gap-wise) ---
+function train_editflow!(P::FF.EditFlow,
+ model;
+ epochs::Int=1,
+ steps_per_epoch::Int=100,
+ batch_size::Int=64,
+ lr::Float32=1f-2,
+ seed::Int=42,
+ print_every::Int=25)
+
+ rng = Random.MersenneTwister(seed)
+ Random.seed!(seed)
+
+ # device
+ model = Functors.fmap(to_dev, model)
+ opt_state = Flux.setup(Flux.Adam(lr), model)
+
+ for epoch in 1:epochs
+ for step in 1:steps_per_epoch
+ # 1) minibatch
+ x0s, x1s, ts = make_minibatch(batch_size, P; rng=rng)
+ Z0, Z1 = FF.align_and_batch(P, x0s, x1s)
+ Zt, Xt = FF.interpolate_Z_elementwise(P, Z0, Z1, ts)
+
+ # prepend BOS to all streams
+ bos = P.bos_token
+ Zt = vcat(fill(bos, 1, batch_size), Zt)
+ Xt = vcat(fill(bos, 1, batch_size), Xt)
+ Z1 = vcat(fill(bos, 1, batch_size), Z1)
+
+ # 2) gap-wise masks & multipliers
+ transition_mask = FF.transition_mask_from_Xt_gapwise(P, Xt) # (2K+1, L+1, B)
+ edit_multiplier = FF.remaining_edits_gapwise(P, Zt, Z1, Xt) # (2K+1, L+1, B)
+ @assert size(transition_mask) == size(edit_multiplier)
+ @assert size(transition_mask, 2) == size(Xt, 1) + 1
+
+ # scheduler
+ den = 1f0 .- P.κ.(ts); den = max.(den, 1f-2)
+ scheduler_scaling = P.dκ.(ts) ./ den # length B
+
+ # 3) masked state → device
+ lmask = Xt .!= P.padding_token
+ cmask = trues(size(lmask))
+ Xt_ms = FF.MaskedState(FF.DiscreteState(P.k, Xt), cmask, lmask)
+
+ ts_d = to_dev(ts)
+ Xt_ms_d = to_dev(Xt_ms)
+ Tmask_d = to_dev(transition_mask)
+ Emult_d = to_dev(edit_multiplier)
+ sched_d = to_dev(reshape(Float32.(scheduler_scaling), 1, 1, :))
+
+ # 4) fwd + loss + update
+ loss, grad = Flux.withgradient(model) do m
+ M = m(ts_d, Xt_ms_d) # (2K+1, L+1, B)
+ # shape sanity
+ @assert size(M) == size(Tmask_d) == size(Emult_d)
+ FF.edit_loss_gapwise(P, M, Tmask_d, Emult_d, sched_d; eps=1f-8)
+ end
+ Flux.update!(opt_state, model, grad[1])
+
+ if step % print_every == 0
+ @info "train-gapwise" epoch step loss=Float32(loss)
+ end
+ end
+ end
+
+ return Functors.fmap(to_cpu, model)
+end
+
+# PM is the target probability model and K is the alphabet size
+K = PM.K
+println("K: ", K)
+
+P = FF.EditFlow(K; bos_token=0, impl="positionwise_reparam")
+
+model = EditFlowModel(; d=128, num_heads=8, nlayers=4, rff_dim=128, cond_dim=128, K=K)
+
+# Train; returned model is on CPU
+model = train_editflow!(P, model; epochs=10, steps_per_epoch=150, batch_size=256, lr=1f-3)
+
+
+
+
diff --git a/editflow_code/gapwise_notebook.ipynb b/editflow_code/gapwise_notebook.ipynb
new file mode 100644
index 0000000..4d36385
--- /dev/null
+++ b/editflow_code/gapwise_notebook.ipynb
@@ -0,0 +1,2554 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 50,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `~/dev/Flowfusion.jl/editflow_code`\n",
+ "\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n",
+ "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/dev/Flowfusion.jl/editflow_code/Project.toml`\n",
+ "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/dev/Flowfusion.jl/editflow_code/Manifest.toml`\n",
+ "WARNING: redefinition of constant Main.AA20. This may fail, cause incorrect answers, or produce other errors.\n",
+ "WARNING: redefinition of constant Main.TOK2ID_AA. This may fail, cause incorrect answers, or produce other errors.\n",
+ "WARNING: redefinition of constant Main.PM. This may fail, cause incorrect answers, or produce other errors.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "plot_len_dist (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 50,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "using Pkg\n",
+ "Pkg.activate(@__DIR__)\n",
+ "Pkg.instantiate()\n",
+ "using Revise\n",
+ "\n",
+ "using Random\n",
+ "using Statistics\n",
+ "using Adapt\n",
+ "using Functors\n",
+ "using Flux\n",
+ "using Onion\n",
+ "using RandomFeatureMaps\n",
+ "using Zygote\n",
+ "\n",
+ "Pkg.develop(path=joinpath(@__DIR__, \"..\"))\n",
+ "using Flowfusion\n",
+ "const FF = Flowfusion\n",
+ "\n",
+ "include(joinpath(@__DIR__, \"prob_model.jl\"))\n",
+ "include(joinpath(@__DIR__, \"helper_funcs.jl\"))\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "to_same_device (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import CUDA\n",
+ "\n",
+ "# Device helpers\n",
+ "const _gpu_enabled = try\n",
+ " CUDA.has_cuda()\n",
+ "catch\n",
+ " false\n",
+ "end\n",
+ "\n",
+ "to_dev(x) = _gpu_enabled ? Adapt.adapt(CUDA.CuArray, x) : x\n",
+ "to_cpu(x) = _gpu_enabled ? Adapt.adapt(Array, x) : x\n",
+ "# move x to the same device type as y (Array or CuArray)\n",
+ "to_same_device(x, y) = (_gpu_enabled && (y isa CUDA.CuArray)) ? Adapt.adapt(CUDA.CuArray, x) : Adapt.adapt(Array, x)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "make_minibatch (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Load PM target (brings PM and AA20) and minibatch\n",
+ "\n",
+ "function make_minibatch(B::Int, P::FF.EditFlow; rng=Random.default_rng())\n",
+ " K = P.k\n",
+ " x0s = Vector{FF.DiscreteState}(undef, B)\n",
+ " x1s = Vector{FF.DiscreteState}(undef, B)\n",
+ " for b in 1:B\n",
+ " # x1 from true PM\n",
+ " seq1 = sample(PM; rng=rng)\n",
+ " @assert all(1 .<= seq1 .<= K)\n",
+ " x1s[b] = FF.DiscreteState(K, seq1)\n",
+ " # x0: uniform tokens with random length in 1:10 (no BOS in x0)\n",
+ " L0 = rand(rng, 1:10)\n",
+ " seq0 = rand(rng, 1:K, L0)\n",
+ " x0s[b] = FF.DiscreteState(K, seq0)\n",
+ " end\n",
+ " ts = rand(rng, Float32, B)\n",
+ " return x0s, x1s, ts\n",
+ "end\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "gaps_from_sites_avg (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Gap-wise helpers\n",
+ "\n",
+ "gaps_from_sites_dup(H) = hcat(@view(H[:,1:1,:]), @view(H[:,2:end,:]), @view(H[:,end:end,:]))\n",
+ "\n",
+ "function gaps_from_sites_avg(H)\n",
+ " d, L, B = size(H)\n",
+ " if L == 1\n",
+ " middle = @view H[:, 1:0, :]\n",
+ " else\n",
+ " @views middle = 0.5f0 .* (H[:, 1:L-1, :] .+ H[:, 2:L, :])\n",
+ " end\n",
+ " # safer on GPU than hcat in some view combinations\n",
+ " return cat(@view(H[:, 1:1, :]), middle, @view(H[:, L:L, :]); dims=2) # d×(L+1)×B\n",
+ "end\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "EditFlowModel"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Model definition (gap-wise heads)\n",
+ "\n",
+ "struct EditFlowModel{L}\n",
+ " layers::L\n",
+ "end\n",
+ "Flux.@layer EditFlowModel\n",
+ "\n",
+ "function EditFlowModel(; d=128, num_heads=8, nlayers=6, rff_dim=128, cond_dim=128, K::Int)\n",
+ " embedding = Flux.Embedding(K + 2 => d)\n",
+ " time_embed = Flux.Chain(RandomFourierFeatures(1 => rff_dim, 1.0f0), Dense(rff_dim => cond_dim))\n",
+ " blocks = [Onion.AdaTransformerBlock(d, cond_dim, num_heads) for _ in 1:nlayers]\n",
+ " # split heads: ins on gaps, sub/del on sites\n",
+ " head_ins = Dense(d => K, bias=false) # gaps (L+1)\n",
+ " head_sub = Dense(d => K, bias=false) # sites (L)\n",
+ " head_del = Dense(d => 1, bias=false) # sites (L)\n",
+ " rope = RoPE(d ÷ num_heads, 4096)\n",
+ " return EditFlowModel((; embedding, time_embed, blocks, head_ins, head_sub, head_del, rope, K))\n",
+ "end\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Forward (returns logits of shape (2K+1, L+1, B))\n",
+ "function (model::EditFlowModel)(t, Xt_ms)\n",
+ " m = model.layers\n",
+ " X = FF.tensor(Xt_ms)\n",
+ " X = ndims(X) == 1 ? reshape(X, :, 1) : X\n",
+ " L, B = size(X)\n",
+ "\n",
+ " pmask = Zygote.@ignore FF.getlmask(Xt_ms)\n",
+ " Xp = X .+ 1 # embedding is 1-indexed\n",
+ " H = m.embedding(Xp) # d×L×B\n",
+ "\n",
+ " t = ndims(t) == 0 ? fill(Float32(t), B) : Float32.(t)\n",
+ " cond = m.time_embed(reshape(t, 1, B))\n",
+ "\n",
+ " cond = to_same_device(cond, H)\n",
+ " pmask = Zygote.@ignore to_same_device(pmask, H)\n",
+ " rope = Zygote.@ignore to_same_device(m.rope[1:L], H)\n",
+ "\n",
+ " for blk in m.blocks\n",
+ " H = blk(H; cond, rope, kpad_mask=pmask) # d×L×B\n",
+ " end\n",
+ "\n",
+ " # gap embeddings & heads\n",
+ " Hg = gaps_from_sites_avg(H) # d×(L+1)×B\n",
+ " ins = m.head_ins(Hg) # K×(L+1)×B\n",
+ " sub = m.head_sub(H) # K×L×B\n",
+ " del = m.head_del(H) # 1×L×B\n",
+ "\n",
+ " # pad sub/del with a zero FIRST column to align sites with gaps (site i ↔ gap i+1)\n",
+ " @views sub_pad = cat(sub[:, 1:1, :].*0, sub; dims=2)\n",
+ " @views del_pad = cat(del[:, 1:1, :].*0, del; dims=2)\n",
+ "\n",
+ " return vcat(ins, sub_pad, del_pad) # (2K+1)×(L+1)×B\n",
+ "end\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "train_editflow! (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Training loop (gap-wise)\n",
+ "function train_editflow!(P::FF.EditFlow,\n",
+ " model;\n",
+ " epochs::Int=1,\n",
+ " steps_per_epoch::Int=100,\n",
+ " batch_size::Int=64,\n",
+ " lr::Float32=1f-2,\n",
+ " seed::Int=42,\n",
+ " print_every::Int=25)\n",
+ "\n",
+ " rng = Random.MersenneTwister(seed)\n",
+ " Random.seed!(seed)\n",
+ "\n",
+ " # device\n",
+ " model = Functors.fmap(to_dev, model)\n",
+ " opt_state = Flux.setup(Flux.Adam(lr), model)\n",
+ "\n",
+ " for epoch in 1:epochs\n",
+ " for step in 1:steps_per_epoch\n",
+ " # 1) minibatch\n",
+ " x0s, x1s, ts = make_minibatch(batch_size, P; rng=rng)\n",
+ " Z0, Z1 = FF.align_and_batch(P, x0s, x1s)\n",
+ " Zt, Xt = FF.interpolate_Z_elementwise(P, Z0, Z1, ts)\n",
+ "\n",
+ " # prepend BOS to all streams\n",
+ " bos = P.bos_token\n",
+ " Zt = vcat(fill(bos, 1, batch_size), Zt)\n",
+ " Xt = vcat(fill(bos, 1, batch_size), Xt)\n",
+ " Z1 = vcat(fill(bos, 1, batch_size), Z1)\n",
+ "\n",
+ " # 2) gap-wise masks & multipliers\n",
+ " transition_mask = FF.transition_mask_from_Xt(P, Xt) # (2K+1, L+1, B)\n",
+ " edit_multiplier = FF.remaining_edits(P, Zt, Z1, Xt) # (2K+1, L+1, B)\n",
+ " @assert size(transition_mask) == size(edit_multiplier)\n",
+ " @assert size(transition_mask, 2) == size(Xt, 1) + 1\n",
+ "\n",
+ " # scheduler\n",
+ " den = 1f0 .- P.κ.(ts); den = max.(den, 1f-3)\n",
+ " scheduler_scaling = P.dκ.(ts) ./ den # length B\n",
+ "\n",
+ " # 3) masked state → device\n",
+ " lmask = Xt .!= P.padding_token\n",
+ " cmask = trues(size(lmask))\n",
+ " Xt_ms = FF.MaskedState(FF.DiscreteState(P.k, Xt), cmask, lmask)\n",
+ "\n",
+ " ts_d = to_dev(ts)\n",
+ " Xt_ms_d = to_dev(Xt_ms)\n",
+ " Tmask_d = to_dev(transition_mask)\n",
+ " Emult_d = to_dev(edit_multiplier)\n",
+ " sched_d = to_dev(reshape(Float32.(scheduler_scaling), 1, 1, :))\n",
+ "\n",
+ " # 4) fwd + loss + update\n",
+ " loss, grad = Flux.withgradient(model) do m\n",
+ " M = m(ts_d, Xt_ms_d) # (2K+1, L+1, B)\n",
+ " # shape sanity\n",
+ " @assert size(M) == size(Tmask_d) == size(Emult_d)\n",
+ " FF.edit_loss(P, M, Tmask_d, Emult_d, sched_d; eps=1f-8)\n",
+ " end\n",
+ " Flux.update!(opt_state, model, grad[1])\n",
+ "\n",
+ " if step % print_every == 0\n",
+ " @info \"train-gapwise\" epoch step loss=Float32(loss)\n",
+ " end\n",
+ " end\n",
+ " end\n",
+ "\n",
+ " return Functors.fmap(to_cpu, model)\n",
+ "end\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "K: 20\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Init and (optional) train\n",
+ "K = PM.K\n",
+ "println(\"K: \", K)\n",
+ "\n",
+ "#alpha_exponent = 3.0f0\n",
+ "P = FF.EditFlow(K; bos_token=0)\n",
+ "\n",
+ "model = EditFlowModel(; d=128, num_heads=8, nlayers=4, rff_dim=128, cond_dim=128, K=K)\n",
+ "nothing"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 53,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.042582143f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.051574655f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.040682144f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03176706f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04301755f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.047801197f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03131537f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.025587518f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.040904406f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.051154993f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.038289122f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.040351614f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.026478458f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.052063473f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.02528245f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.049059216f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.045367613f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.0028266194f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.021066202f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.033532213f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.038553096f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04018806f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04420363f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.046000928f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.032879625f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04658139f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.033914283f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.044273406f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.053182956f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.051027846f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.043055456f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.0364012f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.033408396f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03524468f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.046422645f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04579732f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.056083847f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.02740052f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.036104627f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.040208943f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.029784188f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.031641074f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04278183f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.045025032f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.05684315f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.038700566f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.037000623f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.047675125f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03150429f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.05844419f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.026736975f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.029746149f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.035454303f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.049596604f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.02378349f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.043790184f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03123553f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04705058f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.037064686f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04445659f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.051929086f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.02436034f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.022771671f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.044702657f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.045137305f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.041192025f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.029864756f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.038833927f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.041693743f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.023466088f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.046086684f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04445929f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.05211716f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.036415737f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.035114527f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.05363507f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.031739093f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.034422822f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.045822714f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03548678f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04809461f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.040762138f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.022662576f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.034381583f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.02072578f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04044771f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.043389153f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.033454575f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.02941765f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03229374f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.030144595f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04410399f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.014296858f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.045350045f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.01808934f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.037948772f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.040850688f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.047814716f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03897f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.039783433f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.046952866f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.050687954f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.027305104f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.034051463f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04046725f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.035221793f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.015419234f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.032407716f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03907629f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04017909f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.042050876f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.06224002f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.032651253f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.034311622f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.050489604f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.01942078f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04674881f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.031366825f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.030259585f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.020899203f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03374313f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.026232053f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03176389f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04193217f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.039803006f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.0016402872f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.034368455f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.044954106f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.049633063f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.051525604f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.039586365f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.056642942f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04322856f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03591118f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.039617103f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.033589836f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.045645736f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04366725f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04571055f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04562773f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.037686266f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04003264f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03928131f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04958935f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.044996995f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.017311074f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03966754f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.045690224f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.045542553f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.043954458f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.02862454f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.027264602f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.040636502f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04547987f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03184007f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04121754f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.046075374f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.042077787f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.02793716f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.047131248f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.031824037f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.049015008f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03991092f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.041570164f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.031357594f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.023561478f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.015707273f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04599042f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.035853077f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.043617148f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03299003f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.036430042f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.041398343f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.004706221f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.037196025f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.05408126f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.040643804f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.028125618f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.039175157f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.046623144f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03860229f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04580462f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.026982484f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.01907624f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.033030905f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04366968f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.019387946f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.041732203f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.038875856f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.033090573f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03511978f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.049247496f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.034137912f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.025268145f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04250137f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.035059683f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.020794798f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.045273773f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.028975278f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03930358f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.025179597f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.026635196f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.038387585f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03936877f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.041131224f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.037794285f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.031822115f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.0286325f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03954857f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.034084857f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.032853782f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.015939223f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.038161334f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.044323556f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.021606334f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.024146589f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.046376158f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04099659f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.0414833f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.027421055f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.05385631f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03387799f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03678792f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03864511f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.031337883f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.035680942f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.028983377f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.022545489f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.033676624f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04305654f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.018965978f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03362689f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.026229195f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.033605922f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.02983573f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.040450968f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.042170297f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.014729615f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.034614924f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03768231f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.032214597f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04054915f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.05015796f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.046196725f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.034610253f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.024003044f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03458842f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04691034f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.035118952f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.028442157f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.037072852f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.017393941f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03015057f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.036646903f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.028592978f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.047810607f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04006023f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.029726554f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.038993478f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.036169015f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.035097905f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.036238242f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.013541234f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.040243626f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.042542692f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.032190338f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03143801f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.011104978f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04108549f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.021270731f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.030110102f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.04132489f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.014701558f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.038577426f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.013419241f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.036465287f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.0129490765f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.042824633f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03329256f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.038794056f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.042093784f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.039231405f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.016737167f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03380588f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.032274134f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03857955f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.035523675f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03874997f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.032295678f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.031139178f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03532363f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.034379814f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.021528132f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.03387867f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.015707625f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.027938733f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.031691514f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.035845827f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.038091443f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain-gapwise\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 0.042518776f0\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "EditFlowModel(\n",
+ " Embedding(22 => 128), \u001b[90m# 2_816 parameters\u001b[39m\n",
+ " Chain(\n",
+ " RandomFourierFeatures{Float32, Matrix{Float32}}(Float32[-3.4897678 12.4698105 … 6.522122 -6.1615295]),\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " [\n",
+ " TransformerBlock(\n",
+ " Attention(\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " identity,\n",
+ " identity,\n",
+ " Onion.var\"#32#34\"(),\n",
+ " 16,\n",
+ " 16,\n",
+ " 8,\n",
+ " 8,\n",
+ " ),\n",
+ " StarGLU(\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(512 => 128; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " NNlib.swish,\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.9485438, 0.9517056, 0.91631305, 0.93132836, 0.8952846, 0.9048501, 0.9849782, 0.97568834, 0.9770145, 0.9543596 … 0.95225495, 0.9640162, 0.96162915, 0.95250344, 0.9518388, 0.93140155, 0.95342207, 0.9564777, 0.9472097, 0.9704547], Float32[-0.0025767968, -0.005531265, -0.057881825, -0.0020387296, -0.011449936, -0.011851602, 0.002365834, -0.011678252, -0.014808152, 0.009572189 … 0.0022765587, -0.020436158, -0.015536882, 0.0023218014, 7.319261f-5, 0.00029178447, 0.010181397, -0.008527656, 0.00060043234, 0.009188443], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.92454726, 1.0295289, 0.98453337, 1.0147902, 0.9616023, 0.9640124, 0.96462286, 0.95139396, 0.968303, 1.0446378 … 0.97232085, 0.9544489, 0.94105947, 1.01344, 0.97555476, 0.9792089, 1.0025232, 0.95133525, 0.9576563, 1.0143557], Float32[0.0027763864, -0.00047614917, -0.015428355, 0.021620063, -0.017400159, 0.005237624, -0.015351549, -0.012930975, -0.02459172, -0.017333504 … -0.010810377, -0.015740385, -0.009417565, 0.008541248, 0.00019140948, -0.005366987, -0.0088723535, 0.005091113, 0.0075245644, 0.026632788], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " identity,\n",
+ " ),\n",
+ " TransformerBlock(\n",
+ " Attention(\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " identity,\n",
+ " identity,\n",
+ " Onion.var\"#32#34\"(),\n",
+ " 16,\n",
+ " 16,\n",
+ " 8,\n",
+ " 8,\n",
+ " ),\n",
+ " StarGLU(\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(512 => 128; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " NNlib.swish,\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.9579994, 0.9476913, 0.9554934, 0.9522036, 0.9599546, 0.9532042, 0.9783103, 0.9622565, 0.9757522, 0.9626176 … 0.97050655, 0.87086666, 0.97092474, 0.9631059, 0.97171074, 0.96746814, 0.97048044, 0.9612386, 0.9372323, 0.97935456], Float32[-0.01209553, -0.010203717, -0.010120125, -0.0020847165, 0.011635498, 0.00048273787, -0.007999752, 6.894706f-5, -0.021175401, -0.0140660945 … -0.0046253526, -0.0031032036, -0.012982736, 0.03514903, 0.0010869585, -0.013199106, -0.0038628152, -0.002296497, 0.02071869, 0.011734843], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.985139, 0.9774747, 1.0477108, 0.98501253, 0.98935205, 0.9846256, 0.9944955, 0.9971468, 0.98940533, 1.011992 … 0.94710165, 1.0043437, 1.0460154, 1.0454555, 0.97295123, 1.0074944, 1.0127513, 1.004472, 1.0336586, 0.98678666], Float32[0.009985156, 0.0148912845, 0.0007550778, 0.013916604, -0.0054427087, -0.0115058925, 0.016221523, 0.00095696026, -0.010937472, -0.013677097 … -0.013091496, 0.0013413352, -0.013482028, 0.00044459678, -0.0081370445, -0.02209245, -0.015265387, -0.00967068, 0.0014689483, 0.0148694515], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " identity,\n",
+ " ),\n",
+ " TransformerBlock(\n",
+ " Attention(\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " identity,\n",
+ " identity,\n",
+ " Onion.var\"#32#34\"(),\n",
+ " 16,\n",
+ " 16,\n",
+ " 8,\n",
+ " 8,\n",
+ " ),\n",
+ " StarGLU(\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(512 => 128; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " NNlib.swish,\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.9705351, 1.0028347, 0.9740206, 0.969771, 0.9363874, 0.9498614, 0.9676518, 0.9835581, 0.9829488, 0.9746027 … 1.003019, 0.9874021, 0.9921866, 0.95297444, 0.9610126, 0.98681086, 0.98136693, 0.9986948, 0.9301441, 0.9700858], Float32[-0.0007444257, -0.029364536, -0.0039363527, -0.000186554, -0.005866427, -0.009861192, -0.002090479, -0.0008000579, 0.008326826, -0.019328756 … 0.008347517, 0.00077981426, -0.0090034325, 0.0023879372, -0.014871054, -0.02297807, 0.0025592789, -0.0046469, 0.011648754, 0.023409285], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[1.0317453, 1.0391508, 1.0567257, 0.9506647, 1.0375222, 0.95721054, 0.99698806, 1.0370752, 1.0125376, 1.0758225 … 1.0426638, 1.0156405, 1.1337172, 0.98136586, 0.99563056, 1.0322379, 1.0522087, 1.0129474, 1.0208626, 0.98538053], Float32[-0.021828685, 0.016727783, -0.014718995, 0.017482841, 0.0045893975, -0.029517096, -0.018830335, 0.0072353478, -0.014692814, -0.0018668761 … 0.0047888295, -0.013738959, -0.02322664, -0.010887477, -0.01950592, -0.007834701, -0.00089994207, 0.006822281, 0.005051074, 0.02711348], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " identity,\n",
+ " ),\n",
+ " TransformerBlock(\n",
+ " Attention(\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " identity,\n",
+ " identity,\n",
+ " Onion.var\"#32#34\"(),\n",
+ " 16,\n",
+ " 16,\n",
+ " 8,\n",
+ " 8,\n",
+ " ),\n",
+ " StarGLU(\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(512 => 128; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " NNlib.swish,\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.9345033, 1.0022833, 0.9521148, 0.9575872, 0.8875572, 1.0460182, 0.9967136, 1.0072346, 0.9725838, 1.0341343 … 0.99518543, 0.98995036, 1.0307875, 1.0181413, 1.0229013, 0.9724673, 0.96660626, 1.0165946, 0.8986929, 0.9959466], Float32[-0.043202747, 0.004392449, 0.005028139, 0.033483025, -0.0054316483, -0.005291531, -0.022794988, -0.014869429, 0.013712466, -0.023869297 … 0.020763112, -0.008715548, 0.0013027693, 0.0014196149, 0.0013407562, -0.026271563, 0.013075633, -0.009605205, 0.0029699882, 0.005611375], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[1.0118818, 1.0250593, 1.0372803, 0.9790395, 1.0693208, 1.015231, 1.0267678, 1.0174215, 1.0019836, 1.0813804 … 1.043039, 1.0293376, 1.194062, 0.99059707, 1.0406202, 0.9874126, 1.0517399, 1.0073861, 1.0147883, 1.0668176], Float32[0.0047795386, -0.0060442886, -0.008400408, 0.029895015, -0.015548748, -0.022354802, -0.019373512, 0.023813745, -0.018122695, -0.007683282 … 0.005050846, -0.027234506, -0.0535788, -0.02090459, -0.0033181268, -0.032578275, 0.02245798, 0.00907158, 0.009862278, 0.0163724], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " identity,\n",
+ " ),\n",
+ " ],\n",
+ " Dense(128 => 20; bias=false), \u001b[90m# 2_560 parameters\u001b[39m\n",
+ " Dense(128 => 20; bias=false), \u001b[90m# 2_560 parameters\u001b[39m\n",
+ " Dense(128 => 1; bias=false), \u001b[90m# 128 parameters\u001b[39m\n",
+ " RoPE{Matrix{Float32}}(Float32[1.0 0.5403023 … -0.87528455 -0.065975994; 1.0 0.95041525 … 0.9552474 0.8159282; … ; 1.0 0.9999995 … -0.57972294 -0.5789079; 1.0 0.99999994 … 0.2726629 0.27235872], Float32[0.0 0.84147096 … -0.48360822 -0.9978212; 0.0 0.3109836 … 0.29580808 0.5781532; … ; 0.0 0.0009999999 … -0.8148137 -0.8153929; 0.0 0.0003162278 … 0.9621096 0.9621958]),\n",
+ " 20,\n",
+ ") \u001b[90m # Total: 82 trainable arrays, \u001b[39m1_339_392 parameters,\n",
+ "\u001b[90m # plus 3 non-trainable, 65_600 parameters, summarysize \u001b[39m5.364 MiB."
+ ]
+ },
+ "execution_count": 53,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Train; returned model is on CPU\n",
+ "model = train_editflow!(P, model; epochs=50, steps_per_epoch=150, batch_size=256, lr=3f-4)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "=== Gap-wise model samples (20) ===\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\u001b[33m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[33m\u001b[1mWarning: \u001b[22m\u001b[39mLayer with Float32 parameters got Float64 input.\n",
+ "\u001b[33m\u001b[1m│ \u001b[22m\u001b[39m The input will be converted, but any earlier layers may be very slow.\n",
+ "\u001b[33m\u001b[1m│ \u001b[22m\u001b[39m layer = Dense(128 => 128; bias=false) \u001b[90m# 16_384 parameters\u001b[39m\n",
+ "\u001b[33m\u001b[1m│ \u001b[22m\u001b[39m summary(x) = \"128×2 Matrix{Float64}\"\n",
+ "\u001b[33m\u001b[1m└ \u001b[22m\u001b[39m\u001b[90m@ Flux ~/.julia/packages/Flux/uRn8o/src/layers/stateless.jl:60\u001b[39m\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[1] EVHLQESGGGL\n",
+ "[2] QVQLVQSGAGVKPSTNTVPVSVE\n",
+ "[3] QVQLVQSKAEVKKHGGASVK\n",
+ "[4] EVQLVSYGGRVKK\n",
+ "[5] QVQLQQGYGAKKKVK\n",
+ "[6] QVQLVQSGAE\n",
+ "[7] QVQLVQSGAEVK\n",
+ "[8] QVQLVQSGAAVE\n",
+ "[9] VVQLVESGGGLVK\n",
+ "[10] QVQLVQSSGAEVSKPWGA\n",
+ "[11] QVQLQECGKGLNQH\n",
+ "[12] LVQLVQGSAEVKKK\n",
+ "[13] QVQLVQSGAEVKKPGASVK\n",
+ "[14] QVLVQSGAEVMVKPGA\n",
+ "[15] QQVKVQSGAEVKVKPG\n",
+ "[16] QVLLVQSGAQV\n",
+ "[17] EVQVESSGGGPTSP\n",
+ "[18] QVQLQESGGLVEKP\n",
+ "[19] QVQLQESGGGVKVPK\n",
+ "[20] EVQLVESGGGLVL\n"
+ ]
+ }
+ ],
+ "source": [
+ "function sample_gapwise_strings(P, model; N=20, ts=0.0f0:0.01f0:1.0f0, rng=Random.default_rng())\n",
+ " out = String[]\n",
+ " tg = collect(ts)\n",
+ " for _ in 1:N\n",
+ " x0s, _, _ = make_minibatch(1, P; rng=rng) # ta ett x0 per sample\n",
+ " x0 = x0s[1]\n",
+ " # lägg till BOS längst fram (träningen hade alltid BOS i pos 1)\n",
+ " x0_tokens = collect(FF.tensor(x0))\n",
+ " x0_bos = FF.DiscreteState(P.k, vcat(P.bos_token, x0_tokens))\n",
+ "\n",
+ " x = FF.rollout_gapwise(P, model, x0_bos, tg; rng=rng)\n",
+ " seq = collect(FF.tensor(x))\n",
+ " seq = filter(t -> t != P.bos_token && t != P.padding_token, seq)\n",
+ " push!(out, String(collect(AA20[seq])))\n",
+ " end\n",
+ " return out\n",
+ "end\n",
+ "\n",
+ "# Användning\n",
+ "rng = Random.MersenneTwister(42)\n",
+ "ts = 0.0f0:0.02f0:1.0f0\n",
+ "println(\"\\n=== Gap-wise model samples (20) ===\")\n",
+ "for (i, s) in enumerate(sample_gapwise_strings(P, model; N=20, ts=ts, rng=rng))\n",
+ " println(\"[\", i, \"] \", s)\n",
+ "end"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 81,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "500-element Vector{String}:\n",
+ " \"EVQLVESGGGLQLP\"\n",
+ " \"QVQLVESGGGVVQPGRS\"\n",
+ " \"QVQLKQSGAEVKKPSGAAVE\"\n",
+ " \"VQLVESGGGDVKPGGSLRL\"\n",
+ " \"QVQLQESGPGGLVK\"\n",
+ " \"QVQLVQSGAEVKK\"\n",
+ " \"EVQLVESGGGLVKPSGT\"\n",
+ " \"QVQVYQVGSETQKRP\"\n",
+ " \"EVQLLESGGVLVQP\"\n",
+ " \"QVQLVQSGAEVWK\"\n",
+ " \"EVQLVDSGGGLV\"\n",
+ " \"QVELRESGRVMVHPRG\"\n",
+ " \"VQLVQSGAEVK\"\n",
+ " ⋮\n",
+ " \"QVQVLEGGGGVVQPSRLSAK\"\n",
+ " \"EVQLVESGGGLVQP\"\n",
+ " \"QVQLVQSGARVKKPEAS\"\n",
+ " \"QVEGQQMGAGVKRG\"\n",
+ " \"EVYLVQPYESGYLQTGSLFL\"\n",
+ " \"QVMLQESGPGLVVK\"\n",
+ " \"EVQLVESGGGLVQPGKS\"\n",
+ " \"QVQLVQSGAEVKKPGSSV\"\n",
+ " \"EVQLVASGHVLVQTLS\"\n",
+ " \"QVQLVQSGAEVVKPSET\"\n",
+ " \"QVQLVQSQAETKKP\"\n",
+ " \"QVQLVQSGAVKKPGASVK\""
+ ]
+ },
+ "execution_count": 81,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Sampling and Levenshtein plot\n",
+ "using Random\n",
+ "n = 500\n",
+ "\n",
+ "model_strings = sample_gapwise_strings(P, model; N=n, ts=ts, rng=rng)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 83,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "execution_count": 83,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "\n",
+ "\n",
+ "n2 = 500\n",
+ "# Build training strings from PM parents (the data PM was built on)\n",
+ "train_states = [FF.DiscreteState(P.k, sample(PM; rng=Random.MersenneTwister(1000+i))) for i in 1:n2]\n",
+ "train_strings = [state_to_PM_string(P, s) for s in train_states]\n",
+ "\n",
+ "# Independent validation strings sampled from PM\n",
+ "val_states = [FF.DiscreteState(P.k, sample(PM; rng=Random.MersenneTwister(1000+i+2*n2))) for i in 1:n2]\n",
+ "val_strings = [state_to_PM_string(P, s) for s in val_states]\n",
+ "#val_strings = [s for s in val_strings if !(s in train_strings)]\n",
+ "\n",
+ "# Plot normalized Levenshtein vs. training set (distinct val/train)\n",
+ "plt = plot_lev_dist(\"model_vs_true\", val_strings, model_strings, train_strings; title=\"Model vs True (normalized Levenshtein)\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "100000-element Vector{String}:\n",
+ " \"EVQDVESGGGLV\"\n",
+ " \"EVQSVESGGGLVKPGGSLR\"\n",
+ " \"QVQLVPSGAAVKKP\"\n",
+ " \"SVQLVQSGAEVKKP\"\n",
+ " \"QVQLVQSWADCKKPLASVEV\"\n",
+ " \"EVQLVQSGGGLVQTGGS\"\n",
+ " \"EVQLLESGGGLVQ\"\n",
+ " \"QPQLVKPGDEVKKPGASVKV\"\n",
+ " \"FVTLRDSVALV\"\n",
+ " \"QITLKESDPTNVKP\"\n",
+ " \"QVQLVKSGAEV\"\n",
+ " \"QVQLVQSGPEVKKP\"\n",
+ " \"QVQKVQSGAEVKRP\"\n",
+ " ⋮\n",
+ " \"QVQLQNSGPGLVK\"\n",
+ " \"QVQLQQSGPGLVKPSQTLSL\"\n",
+ " \"QEKGGQEGGKV\"\n",
+ " \"QVQLVQSGAEVKKP\"\n",
+ " \"QVQLVESGGGVVQPGRSLR\"\n",
+ " \"QVQLVQSGAAV\"\n",
+ " \"QVQLVESGGG\"\n",
+ " \"EVNLVESMGGL\"\n",
+ " \"QVQLVQSGIAVKKPGA\"\n",
+ " \"QVQLPQSGAEVKKPGASVK\"\n",
+ " \"QVQLQESGPGLVK\"\n",
+ " \"QVQLVQSGAEVKKPGS\""
+ ]
+ },
+ "execution_count": 78,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "model_samples_any = sample_gen_n(P, model; n=10, ts=0f0:0.01f0:1f0, rng=Random.MersenneTwister(42))\n",
+ "model_final_states = map(final_state_from_gen, model_samples_any)\n",
+ "model_strings_old = [state_to_PM_string(P, s) for s in model_final_states]\n",
+ "\n",
+ "n3 = 500\n",
+ "# Build training strings from PM parents (the data PM was built on)\n",
+ "train_states = [FF.DiscreteState(P.k, sample(PM; rng=Random.MersenneTwister(1000+i))) for i in 1:n3]\n",
+ "train_strings = [state_to_PM_string(P, s) for s in train_states]\n",
+ "\n",
+ "# Independent validation strings sampled from PM\n",
+ "val_states = [FF.DiscreteState(P.k, sample(PM; rng=Random.MersenneTwister(1000+i+2*n3))) for i in 1:n3]\n",
+ "val_strings = [state_to_PM_string(P, s) for s in val_states]\n",
+ "#val_strings = [s for s in val_strings if !(s in train_strings)]\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print(\"Hej\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "pAA = plot_AA_dist(\"model_vs_true_AA\", val_strings, model_strings; title=\"AA frequency: Natural vs Generated\")\n",
+ "display(pAA)\n",
+ "\n",
+ "pLen = plot_len_dist(\"model_vs_true_len\", val_strings, model_strings; title=\"Length distribution: Natural vs Generated\")\n",
+ "display(pLen)\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Julia 1.11.6",
+ "language": "julia",
+ "name": "julia-1.11"
+ },
+ "language_info": {
+ "file_extension": ".jl",
+ "mimetype": "application/julia",
+ "name": "julia",
+ "version": "1.11.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/editflow_code/helper_funcs.jl b/editflow_code/helper_funcs.jl
new file mode 100644
index 0000000..6a27246
--- /dev/null
+++ b/editflow_code/helper_funcs.jl
@@ -0,0 +1,180 @@
+using StringDistances, Statistics, ProgressMeter, Plots, StatsBase
+
+
+# Sampling helpers
+function state_to_PM_string(P::FF.EditFlow, st::FF.DiscreteState)
+ xs = FF.tensor(st)
+ pad = hasfield(typeof(P), :padding_token) ? P.padding_token : -1
+ io = IOBuffer()
+ @inbounds for tok in xs
+ if tok == 0
+ write(io, '>')
+ elseif tok == pad
+ continue
+ else
+ write(io, AA20[tok])
+ end
+ end
+ return String(take!(io))
+end
+
+states_to_PM_strings(P::FF.EditFlow, sts::Vector{<:FF.DiscreteState}) =
+ [state_to_PM_string(P, s) for s in sts]
+
+function sample_gen_n(P::FF.EditFlow, model; n::Int=10, ts=0f0:0.01f0:1f0, rng=Random.default_rng())
+ gens = Vector{Any}(undef, n)
+ for i in 1:n
+ x0s, _, _ = make_minibatch(1, P; rng=rng)
+ bos = P.bos_token
+ toks = collect(FF.tensor(x0s[1]))
+ x0_bos = FF.DiscreteState(P.k, vcat([bos], toks))
+ res = FF.gen(P, x0_bos, model, ts)
+ # Strip BOS token(s) from outputs
+ strip_bos_state(st::FF.DiscreteState) = begin
+ xs = collect(FF.tensor(st))
+ if !isempty(xs) && xs[1] == bos
+ FF.DiscreteState(P.k, xs[2:end])
+ else
+ st
+ end
+ end
+ if res isa FF.DiscreteState
+ gens[i] = strip_bos_state(res)
+ elseif res isa AbstractVector{<:FF.DiscreteState}
+ gens[i] = strip_bos_state.(res)
+ else
+ gens[i] = res
+ end
+ end
+ return gens
+end
+
+function sample_gen_10_strings(P::FF.EditFlow, model; ts=0f0:0.01f0:1f0)
+ outs = sample_gen_n(P, model; n=20, ts=ts)
+ return map(outs) do o
+ if o isa FF.DiscreteState
+ state_to_PM_string(P, o)
+ elseif o isa AbstractVector{<:FF.DiscreteState}
+ states_to_PM_strings(P, o)
+ else
+ o
+ end
+ end
+end
+
+final_state_from_gen(res) = res isa FF.DiscreteState ? res : (res isa AbstractVector{<:FF.DiscreteState} ? last(res) : res)
+
+function to_aa_tokens(P::FF.EditFlow, st::FF.DiscreteState)
+ xs = FF.tensor(st)
+ pad = hasfield(typeof(P), :padding_token) ? P.padding_token : -1
+ toks = Vector{Int}()
+ @inbounds for tok in xs
+ if tok == 0 || tok == pad
+ continue
+ else
+ push!(toks, Int(tok))
+ end
+ end
+ return toks
+end
+
+function min_lev_to_set(queries::Vector{String}, refs::Vector{String}; normalize::Bool=true)
+ d = Levenshtein()
+ ref_lens = length.(refs)
+ out = Vector{Float64}(undef, length(queries))
+ @showprogress for (i, q) in enumerate(queries)
+ Lq = length(q)
+ best = typemax(Int); best_Lr = 1
+ for (r, Lr) in zip(refs, ref_lens)
+ lb = abs(Lq - Lr)
+ lb >= best && continue
+ dist = evaluate(d, q, r)
+ if dist < best
+ best = dist; best_Lr = Lr
+ best == 0 && break
+ end
+ end
+ out[i] = normalize ? best / max(Lq, best_Lr) : best
+ end
+ return out
+end
+
+function plot_lev_dist(name, val_seqs, gen_seqs, train_seqs; title="Novelty vs. training set", max_seqs=1000)
+ sample_if_large(seqs, n=max_seqs) = length(seqs) > n ? rand(seqs, n) : seqs
+
+ val_sample = sample_if_large(val_seqs)
+ gen_sample = sample_if_large(gen_seqs)
+ train_sample = sample_if_large(train_seqs)
+
+ val_lev = min_lev_to_set(val_sample, train_sample; normalize=true)
+ gen_lev = min_lev_to_set(gen_sample, train_sample; normalize=true)
+
+ # Robust bins even when all values are identical
+ minv = minimum([minimum(val_lev), minimum(gen_lev)])
+ maxv = maximum([maximum(val_lev), maximum(gen_lev)])
+ bins = (minv == maxv) ? range(0.0, 1.0, length=25) : range(minv, maxv, length=25)
+ p = histogram(val_lev; normalize=:probability, alpha=0.5, label="Natural",
+ bins=bins, xlabel="Min normalized Levenshtein", ylabel="Density", title=title)
+ histogram!(gen_lev; normalize=:probability, alpha=0.5, label="Generated", bins=bins)
+
+ #println("val_lev: ", val_lev)
+ #println("gen_lev: ", gen_lev)
+
+ #path = joinpath(@__DIR__, "figures", "$(name).pdf")
+ #mkpath(dirname(path))
+ #savefig(p, path)
+ #savefig(p, "/figures/$(name).pdf")
+ return p
+end
+
+function AA_counts(seqs)
+ counts = countmap(Iterators.flatten(seqs))
+ labels = sort!(collect(keys(counts)))
+ return labels, counts
+end
+
+function plot_AA_dist(name, real_seqs, gen_seqs; title="Normalized AA frequencies")
+ # Always show the full alphabet and filter invalid chars
+ labels = collect(AA20)
+ alphabet = Set(labels)
+ r_counts = countmap(Iterators.flatten((ch for s in real_seqs for ch in s if ch in alphabet)))
+ g_counts = countmap(Iterators.flatten((ch for s in gen_seqs for ch in s if ch in alphabet)))
+ r = Float64[get(r_counts, c, 0) for c in labels]
+ g = Float64[get(g_counts, c, 0) for c in labels]
+ rs = sum(r); r = rs > 0 ? r ./ rs : fill(0.0, length(r))
+ gs = sum(g); g = gs > 0 ? g ./ gs : fill(0.0, length(g))
+ # Grouped bars without unsupported bar_position
+ p = bar(string.(labels), [r g];
+ label=["Natural" "Generated"], xlabel="AA", ylabel="Proportion",
+ title=title, alpha=0.5)
+ return p
+end
+
+function len_dist(seqs; fig_name="len_dist.pdf", sort_labels=true)
+ isempty(seqs) && return (Int[], Float64[])
+ # Count only AA20 letters (ignore BOS '>' and any non-AA chars)
+ alphabet = Set(AA20)
+ lens = [count(ch -> ch in alphabet, s) for s in seqs]
+ cm = countmap(lens) # how many seqs of each length
+ Ls = collect(keys(cm))
+ sort_labels && sort!(Ls)
+ props = [cm[L] for L in Ls] ./ max(length(lens), 1)
+ return Ls, props
+end
+function plot_len_dist(name, real_seqs, gen_seqs; title="Sequence length distribution")
+ real_labels, real_props = len_dist(real_seqs)
+ gen_labels, gen_props = len_dist(gen_seqs)
+
+ # Build unified x-axis and zero-fill missing bins
+ all_labels = sort!(union(real_labels, gen_labels))
+ rmap = Dict(real_labels .=> real_props)
+ gmap = Dict(gen_labels .=> gen_props)
+ r = [get(rmap, L, 0.0) for L in all_labels]
+ g = [get(gmap, L, 0.0) for L in all_labels]
+
+ p = bar(string.(all_labels), [r g];
+ label=["Natural" "Generated"], xlabel="Length", ylabel="Proportion",
+ title=title, alpha=0.5)
+ #savefig(p, "../img/unconditional/len_dist_$(name).pdf")
+ return p
+end
\ No newline at end of file
diff --git a/editflow_code/jack.jl b/editflow_code/jack.jl
new file mode 100644
index 0000000..bd7ea17
--- /dev/null
+++ b/editflow_code/jack.jl
@@ -0,0 +1,200 @@
+using Pkg
+Pkg.activate(".")
+ENV["CUDA_VISIBLE_DEVICES"] = 1
+using Revise, Random, Statistics, Adapt, Functors, Flux, Onion, RandomFeatureMaps, Zygote, CannotWaitForTheseOptimisers, CodecZlib, CSV, LearningSchedules, DataFrames, Distributions
+using Flowfusion
+const FF = Flowfusion
+include("scripts/model_training/editflows/prob_model.jl")
+include("scripts/model_training/editflows/helper_funcs.jl")
+include("scripts/misc/data_loading.jl")
+import CUDA
+
+# Device helpers
+const _gpu_enabled = try
+ CUDA.has_cuda()
+catch
+ false
+end
+
+to_dev(x) = _gpu_enabled ? Adapt.adapt(CUDA.CuArray, x) : x
+to_cpu(x) = _gpu_enabled ? Adapt.adapt(Array, x) : x
+to_same_device(x, y) = (_gpu_enabled && (y isa CUDA.CuArray)) ? Adapt.adapt(CUDA.CuArray, x) : Adapt.adapt(Array, x)
+
+# Load PM target (brings PM and AA20)
+
+struct EditFlowModel{L}
+ layers::L
+end
+Flux.@layer EditFlowModel
+
+function EditFlowModel(; d=128, num_heads=8, nlayers=6, rff_dim=128, cond_dim=128, K::Int)
+ embedding = Flux.Embedding(K + 2 => d)
+ time_embed = Flux.Chain(RandomFourierFeatures(1 => rff_dim, 1.0f0), Dense(rff_dim => cond_dim))
+ blocks = [Onion.AdaTransformerBlock(d, cond_dim, num_heads) for _ in 1:nlayers]
+ head_combined = Dense(d => 2K + 1, bias=false)
+ rope = RoPE(d ÷ num_heads, 512)
+ return EditFlowModel((; embedding, time_embed, blocks, head_combined, rope, K))
+end
+
+function (model::EditFlowModel)(t, Xt_ms)
+ m = model.layers
+ X = FF.tensor(Xt_ms)
+ X = ndims(X) == 1 ? reshape(X, :, 1) : X
+ L, B = size(X)
+
+ pmask = Zygote.@ignore FF.getlmask(Xt_ms)
+ Xp = X .+ 1
+ H = m.embedding(Xp)
+
+ t = ndims(t) == 0 ? fill(Float32(t), B) : Float32.(t)
+ cond = m.time_embed(reshape(t, 1, B))
+
+ cond = to_same_device(cond, H)
+ pmask = Zygote.@ignore to_same_device(pmask, H)
+ rope = Zygote.@ignore to_same_device(m.rope[1:L], H)
+
+ for blk in m.blocks
+ H = blk(H; cond, rope, kpad_mask=pmask)
+ end
+ return m.head_combined(H)
+end
+
+data = readlines("data/oas_heavy_8M.txt")
+
+K = PM.K
+P = FF.EditFlow(K; bos_token=0)
+epochs = 1; batch_size = 64
+
+model = EditFlowModel(; d=512, num_heads=8, nlayers=12, rff_dim=512, cond_dim=512, K=K)
+const START_LR = 1f-3
+const MAX_LR = 1f-3
+const UP_GAMMA = 1.00f0
+const DOWN_GAMMA = 0.99994398f0
+
+sched = burnin_learning_schedule(START_LR, MAX_LR, UP_GAMMA, DOWN_GAMMA)
+for layer in model.layers.blocks
+ layer.attention_norm.scale.weight .= 0.0f0
+ layer.attention_norm.shift.weight .= 0.0f0
+ layer.ffn_norm.scale.weight .= 0.0f0
+ layer.ffn_norm.shift.weight .= 0.0f0
+end
+
+rng = Random.MersenneTwister(seed)
+Random.seed!(seed)
+global_step = 1
+model = Functors.fmap(to_dev, model)
+sched = burnin_learning_schedule(START_LR, MAX_LR, UP_GAMMA, DOWN_GAMMA)
+
+# do learning rate warmdown
+total_iters = div(512000, batch_size)
+DECAY_STEPS = 8000
+get_lr(i) = 1f-3 + (1f-7 - 1f-3) * (Float32(min(i, DECAY_STEPS)) / Float32(DECAY_STEPS))
+opt_state = Flux.setup(Muon(eta=get_lr(1)), model)
+
+for epoch in 1:epochs
+ # for (step, seqs) in enumerate(stream_heavy_batches(path; L=140, batch=batch_size, total=10^6))
+ for step in 1:total_iters
+ seqs = [rand(data) for _ in 1:batch_size]
+ xpairs = format_for_editflows(seqs)
+ x0s = [p[1] for p in xpairs]
+ x1s = [p[2] for p in xpairs]
+ ts = rand(Float32, batch_size)
+ # align_and_batch basically
+ Z0, Z1 = try
+ FF.align_and_batch(P, x0s, x1s)
+ catch e
+ if e isa LoadError || e isa ArgumentError
+ @warn "skip batch due to Data loading error" err=e
+ continue
+ else
+ rethrow(e)
+ end
+ end
+ Zt, Xt = FF.interpolate_Z_elementwise(P, Z0, Z1, ts)
+ #Append BOS token to the beginning of the batch
+ bos = P.bos_token
+ Zt = vcat(fill(bos, 1, batch_size), Zt)
+ Xt = vcat(fill(bos, 1, batch_size), Xt)
+ Z1 = vcat(fill(bos, 1, batch_size), Z1)
+
+ transition_mask = FF.transition_mask_from_Xt(P, Xt)
+ edit_multiplier = FF.remaining_edits(P, Zt, Z1, Xt)
+ den = (1f0 .- P.κ.(ts)) .+ 0.2f0
+ scheduler_scaling = P.dκ.(ts) ./ den
+ # 3) Masked state (CPU → device)
+ lmask = Xt .!= P.padding_token
+ cmask = trues(size(lmask))
+ Xt_ms = FF.MaskedState(FF.DiscreteState(P.k, Xt), cmask, lmask)
+ ts_d = to_dev(ts)
+ Xt_ms_d = to_dev(Xt_ms)
+ Tmask_d = to_dev(transition_mask)
+ Emult_d = to_dev(edit_multiplier)
+ sched_d = to_dev(reshape(Float32.(scheduler_scaling), 1, 1, :))
+ loss, grad = try
+ Flux.withgradient(model) do m
+ M = m(ts_d, Xt_ms_d)
+ FF.edit_loss(P, M, Tmask_d, Emult_d, sched_d; eps=1f-8)
+ end
+ catch e
+ if e isa DimensionMismatch
+ @warn "skip batch due to DimensionMismatch" err=e
+ continue
+ else
+ rethrow(e)
+ end
+ end
+ if Float32(loss) < 0
+ @warn "negative loss at step $step"
+ continue
+ end
+ open("losses/EDITFLOWS.csv", "a") do io
+ println(io, "$(global_step),$(epoch),$(step),$(Float32(loss)),$(get_lr(step)),$(time())")
+ end
+ Flux.adjust!(opt_state, get_lr(step))
+ Flux.update!(opt_state, model, grad[1])
+ if step % 10 == 0
+ @info "EditFlows" epoch step loss=Float32(loss)
+ end
+ if step % 500 == 0
+ samples = sample_gen_10_strings(P, Functors.fmap(to_cpu, model), n=5)
+ CSV.write("gens/samples_step_$(step).csv",DataFrame(step = fill(step, length(samples)), sample = samples))
+ end
+ global_step += 1
+ end
+end
+
+model_name = "EDITFLOWS"
+using JLD2
+model_state = Flux.state(cpu(model))
+model_state_file = "models/model_state_"*model_name*".jld2"
+JLD2.@save model_state_file model_state
+
+open("losses/loss_$(model_name).txt", "w") do io
+ println.(io, losses)
+end
+
+rng = Random.MersenneTwister(42)
+println("\n=== True PM samples (20) ===")
+for i in 1:20
+ seq = sample(PM; rng=rng) # Vector{Int} in 1..K_AA
+ aa_str = String(collect(AA20[seq]))
+ println("[", i, "] ", aa_str)
+end
+
+gens = sample_gen_10_strings(P, Functors.fmap(to_cpu, model); ts=0f0:0.005f0:1f0, n=500)
+gens = replace.(gens, ">"=>"")
+open("gens/$(model_name)_gens.txt", "w") do io
+ println.(io, gens)
+end
+
+println("\n=== Model samples (10) ===")
+for (i, s) in enumerate(gens)
+ if s isa AbstractString
+ println("[", i, "] ", s)
+ elseif s isa AbstractVector{<:AbstractString}
+ last_str = isempty(s) ? "" : s[end]
+ println("[", i, "] traj_last=", last_str, " (len=", length(s), ")")
+ else
+ println("[", i, "] (raw) ", s)
+ end
+end
diff --git a/editflow_code/jackcomparison.jl b/editflow_code/jackcomparison.jl
new file mode 100644
index 0000000..e69de29
diff --git a/editflow_code/prob_model.jl b/editflow_code/prob_model.jl
new file mode 100644
index 0000000..08f3a22
--- /dev/null
+++ b/editflow_code/prob_model.jl
@@ -0,0 +1,164 @@
+# ===================== Target: ProfileMixtureEOS from examples/abs.txt =====================
+# 20 AA alphabet (no '#', no '-')
+const AA20 = collect("ACDEFGHIKLMNPQRSTVWY")
+const TOK2ID_AA = Dict{Char,Int}(c => i for (i,c) in enumerate(AA20)) # 1..20
+const K_AA = length(AA20)
+
+# encode and truncate to a random length in 10:20 (inclusive), reproducible via `rng`
+function encode_line_AA(line::AbstractString; rng::AbstractRNG, trunc_range::UnitRange{Int}=10:20)
+ maxlen = rand(rng, trunc_range)
+ s = uppercase(strip(line))
+ out = Int[]
+ sizehint!(out, min(length(s), maxlen))
+ for ch in s
+ if haskey(TOK2ID_AA, ch)
+ push!(out, TOK2ID_AA[ch])
+ if length(out) == maxlen; break; end
+ end
+ end
+ return out
+end
+
+struct ProfileMixtureEOS
+ K::Int
+ parents::Vector{Vector{Int}}
+ weights::Vector{Float64}
+ base_token_probs::Vector{Vector{Vector{Float64}}} # per m, per t
+ L::Vector{Int}
+ background::Vector{Float64}
+ mode::Symbol
+ h_tail::Float64
+ h_inside::Float64 # end hazard for t ≤ L_m
+ alpha::Float64
+ beta::Float64
+end
+
+function ProfileMixtureEOS(parents::Vector{Vector{Int}};
+ K::Union{Int,Nothing}=nothing,
+ weights::AbstractVector=Float64[],
+ α::Real=1.0, β::Real=20.0,
+ background::Union{AbstractVector{<:Real},Nothing}=nothing,
+ mode::Symbol=:soft, h_tail::Real=0.99, h_inside::Real=0.001)
+ K === nothing && (K = maximum([isempty(p) ? 1 : maximum(p) for p in parents]))
+ @assert all(all(1 .<= p .<= K) for p in parents)
+ @assert mode in (:hard, :soft)
+ if mode === :soft
+ @assert 0.0 < h_tail < 1.0
+ @assert 0.0 < h_inside < 1.0
+ end
+ N = length(parents)
+ weights = isempty(weights) ? fill(1.0/N, N) : collect(weights ./ sum(weights))
+ background = background === nothing ? fill(1.0/K, K) : collect(background ./ sum(background))
+ base_token_probs = Vector{Vector{Vector{Float64}}}(undef, N)
+ L = Int[]
+ for (m, seq) in enumerate(parents)
+ push!(L, length(seq))
+ prof = Vector{Vector{Float64}}(undef, length(seq))
+ for t in 1:length(seq)
+ λv = α .* background
+ λv[seq[t]] += β
+ prof[t] = λv ./ sum(λv)
+ end
+ base_token_probs[m] = prof
+ end
+ ProfileMixtureEOS(K, parents, weights, base_token_probs, L, background, mode,
+ float(h_tail), float(h_inside), float(α), float(β))
+end
+
+@inline function _hazard(M::ProfileMixtureEOS, m::Int, t::Int)
+ Lm = M.L[m]
+ if M.mode === :hard
+ return t <= Lm ? 0.0 : 1.0
+ else
+ return t <= Lm ? M.h_inside : M.h_tail
+ end
+end
+
+@inline function _logsumexp(v::AbstractVector{<:Real})
+ m = maximum(v); !isfinite(m) && return m
+ s = 0.0
+ @inbounds for i in eachindex(v); s += exp(v[i] - m); end
+ return m + log(s)
+end
+
+function _logpmf_component(M::ProfileMixtureEOS, m::Int, x::Vector{Int})
+ n = length(x)
+ if n == 0
+ qend = _hazard(M, m, 1)
+ return qend > 0.0 ? log(qend) : -Inf
+ end
+ lp = 0.0
+ @inbounds for t in 1:n
+ s = 1.0 - _hazard(M, m, t)
+ p = (t <= M.L[m]) ? M.base_token_probs[m][t][x[t]] : M.background[x[t]]
+ q = s * p
+ if q <= 0.0; return -Inf; end
+ lp += log(q)
+ end
+ qend = _hazard(M, m, n + 1)
+ return qend > 0.0 ? lp + log(qend) : -Inf
+end
+
+function logpmf(M::ProfileMixtureEOS, x::Vector{Int})
+ @assert all(1 .<= x .<= M.K) "PMF expects tokens in 1..K_AA"
+ tmp = similar(M.weights)
+ @inbounds for m in 1:length(M.parents)
+ tmp[m] = log(M.weights[m]) + _logpmf_component(M, m, x)
+ end
+ return _logsumexp(tmp)
+end
+pmf(M::ProfileMixtureEOS, x::Vector{Int}) = exp(logpmf(M, x))
+
+@inline function _catdraw(rng::AbstractRNG, p::AbstractVector{<:Real})
+ r = rand(rng); acc = 0.0
+ @inbounds for i in eachindex(p)
+ acc += p[i]
+ if r <= acc; return i; end
+ end
+ return lastindex(p)
+end
+
+function _sample_from_component(M::ProfileMixtureEOS, m::Int; rng::AbstractRNG)
+ seq = Int[]; t = 1
+ while true
+ h = _hazard(M, m, t)
+ if h > 0.0 && rand(rng) < h
+ return seq
+ end
+ a = (t <= M.L[m]) ? _catdraw(rng, M.base_token_probs[m][t]) : _catdraw(rng, M.background)
+ push!(seq, a); t += 1
+ end
+end
+
+function sample(M::ProfileMixtureEOS; rng::AbstractRNG=Random.default_rng(), return_component::Bool=false)
+ m = _catdraw(rng, M.weights)
+ seq = _sample_from_component(M, m; rng=rng)
+ return return_component ? (seq, m) : seq
+end
+import Random: rand
+rand(rng::AbstractRNG, M::ProfileMixtureEOS) = sample(M; rng=rng)
+rand(M::ProfileMixtureEOS) = sample(M)
+
+function build_target_from_abs(; file::AbstractString=joinpath(@__DIR__, "abs.txt"),
+ maxlines::Int=100,
+ seed::Int=0,
+ α=1.0, β=20.0, mode::Symbol=:soft,
+ h_tail=0.99, h_inside=0.001,
+ trunc_range::UnitRange{Int}=10:20)
+ @assert isfile(file) "abs.txt not found at $file"
+ rng = Random.MersenneTwister(seed)
+ parents = Vector{Vector{Int}}()
+ open(file, "r") do io
+ for (i, line) in enumerate(eachline(io))
+ i > maxlines && break
+ seq = encode_line_AA(line; rng=rng, trunc_range=trunc_range)
+ if !isempty(seq); push!(parents, seq); end
+ end
+ end
+ @assert !isempty(parents) "No non-empty sequences in first $maxlines lines after filtering."
+ ProfileMixtureEOS(parents; K=K_AA, α=α, β=β, mode=mode, h_tail=h_tail, h_inside=h_inside)
+end
+
+const PM = build_target_from_abs(file=joinpath(@__DIR__, "abs.txt"))
+
+
diff --git a/editflow_code/test/analysis_notebook.ipynb b/editflow_code/test/analysis_notebook.ipynb
new file mode 100644
index 0000000..662e339
--- /dev/null
+++ b/editflow_code/test/analysis_notebook.ipynb
@@ -0,0 +1,3753 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `~/dev/Flowfusion.jl/editflow_code`\n",
+ "\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n",
+ "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/dev/Flowfusion.jl/editflow_code/Project.toml`\n",
+ "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/dev/Flowfusion.jl/editflow_code/Manifest.toml`\n",
+ "WARNING: using StatsBase.sample in module Main conflicts with an existing identifier.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "plot_len_dist (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "using Pkg\n",
+ "Pkg.activate(@__DIR__)\n",
+ "Pkg.instantiate()\n",
+ "using Revise\n",
+ "\n",
+ "using Random\n",
+ "using Statistics\n",
+ "using Adapt\n",
+ "using Functors\n",
+ "using Flux\n",
+ "using Onion\n",
+ "using RandomFeatureMaps\n",
+ "using Zygote\n",
+ "\n",
+ "Pkg.develop(path=joinpath(@__DIR__, \"..\"))\n",
+ "using Flowfusion\n",
+ "const FF = Flowfusion\n",
+ "\n",
+ "include(joinpath(@__DIR__, \"prob_model.jl\"))\n",
+ "include(joinpath(@__DIR__, \"helper_funcs.jl\"))\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "to_same_device (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import CUDA\n",
+ "\n",
+ "# Device helpers\n",
+ "const _gpu_enabled = try\n",
+ " CUDA.has_cuda()\n",
+ "catch\n",
+ " false\n",
+ "end\n",
+ "\n",
+ "to_dev(x) = _gpu_enabled ? Adapt.adapt(CUDA.CuArray, x) : x\n",
+ "to_cpu(x) = _gpu_enabled ? Adapt.adapt(Array, x) : x\n",
+ "# move x to the same device type as y (Array or CuArray)\n",
+ "to_same_device(x, y) = (_gpu_enabled && (y isa CUDA.CuArray)) ? Adapt.adapt(CUDA.CuArray, x) : Adapt.adapt(Array, x)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "make_minibatch (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Minibatch builder (uses true PM)\n",
+ "function make_minibatch(B::Int, P::FF.EditFlow; rng=Random.default_rng())\n",
+ " K = P.k\n",
+ " x0s = Vector{FF.DiscreteState}(undef, B)\n",
+ " x1s = Vector{FF.DiscreteState}(undef, B)\n",
+ " for b in 1:B\n",
+ " # x1 from true PM\n",
+ " seq1 = sample(PM; rng=rng)\n",
+ " @assert all(1 .<= seq1 .<= K)\n",
+ " x1s[b] = FF.DiscreteState(K, seq1)\n",
+ " # x0: uniform tokens with random length in 1:10 (no BOS in x0)\n",
+ " L0 = rand(rng, 1:10)\n",
+ " seq0 = rand(rng, 1:K, L0)\n",
+ " x0s[b] = FF.DiscreteState(K, seq0)\n",
+ " end\n",
+ " ts = rand(rng, Float32, B)\n",
+ " return x0s, x1s, ts\n",
+ "end\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "EditFlowModel"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Model definition\n",
+ "struct EditFlowModel{L}\n",
+ " layers::L\n",
+ "end\n",
+ "Flux.@layer EditFlowModel\n",
+ "\n",
+ "function EditFlowModel(; d=128, num_heads=8, nlayers=6, rff_dim=128, cond_dim=128, K::Int)\n",
+ " embedding = Flux.Embedding(K + 2 => d)\n",
+ " time_embed = Flux.Chain(RandomFourierFeatures(1 => rff_dim, 1.0f0), Dense(rff_dim => cond_dim))\n",
+ " blocks = [Onion.AdaTransformerBlock(d, cond_dim, num_heads) for _ in 1:nlayers]\n",
+ " head_combined = Dense(d => 2K + 1, bias=false)\n",
+ " rope = RoPE(d ÷ num_heads, 4096)\n",
+ " return EditFlowModel((; embedding, time_embed, blocks, head_combined, rope, K))\n",
+ "end\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Forward pass\n",
+ "function (model::EditFlowModel)(t, Xt_ms)\n",
+ " m = model.layers\n",
+ " X = FF.tensor(Xt_ms)\n",
+ " X = ndims(X) == 1 ? reshape(X, :, 1) : X\n",
+ " L, B = size(X)\n",
+ "\n",
+ " pmask = Zygote.@ignore FF.getlmask(Xt_ms)\n",
+ " Xp = X .+ 1\n",
+ " H = m.embedding(Xp)\n",
+ "\n",
+ " t = ndims(t) == 0 ? fill(Float32(t), B) : Float32.(t)\n",
+ " cond = m.time_embed(reshape(t, 1, B))\n",
+ "\n",
+ " cond = to_same_device(cond, H)\n",
+ " pmask = Zygote.@ignore to_same_device(pmask, H)\n",
+ " rope = Zygote.@ignore to_same_device(m.rope[1:L], H)\n",
+ "\n",
+ " for blk in m.blocks\n",
+ " H = blk(H; cond, rope, kpad_mask=pmask)\n",
+ " end\n",
+ " return m.head_combined(H)\n",
+ "end\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "train_editflow! (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Training (GPU if available)\n",
+ "function train_editflow!(P::FF.EditFlow,\n",
+ " model;\n",
+ " epochs::Int=1,\n",
+ " steps_per_epoch::Int=100,\n",
+ " batch_size::Int=64,\n",
+ " lr::Float32=1f-2,\n",
+ " seed::Int=42,\n",
+ " print_every::Int=25)\n",
+ "\n",
+ " rng = Random.MersenneTwister(seed)\n",
+ " Random.seed!(seed)\n",
+ "\n",
+ " # Move model to device (GPU if available)\n",
+ " model = Functors.fmap(to_dev, model)\n",
+ " opt_state = Flux.setup(Flux.Adam(lr), model)\n",
+ "\n",
+ " for epoch in 1:epochs\n",
+ " for step in 1:steps_per_epoch\n",
+ "\n",
+ " # 1) Minibatch Sampling\n",
+ " x0s, x1s, ts = make_minibatch(batch_size, P; rng=rng)\n",
+ "\n",
+ " # 2) Align and batch\n",
+ " Z0, Z1 = FF.align_and_batch(P, x0s, x1s)\n",
+ "\n",
+ " # 3) Interpolate\n",
+ " Zt, Xt = FF.interpolate_Z_elementwise(P, Z0, Z1, ts)\n",
+ "\n",
+ " # 4) Prepend BOS\n",
+ " bos = P.bos_token\n",
+ " Zt = vcat(fill(bos, 1, batch_size), Zt)\n",
+ " Xt = vcat(fill(bos, 1, batch_size), Xt)\n",
+ " Z1 = vcat(fill(bos, 1, batch_size), Z1)\n",
+ " \n",
+ " # 5) Masks and multipliers\n",
+ " transition_mask = FF.transition_mask_from_Xt(P, Xt)\n",
+ " edit_multiplier = FF.remaining_edits(P, Zt, Z1, Xt)\n",
+ " @assert size(transition_mask) == size(edit_multiplier)\n",
+ "\n",
+ " # 6) Scheduler scaling\n",
+ " den = 1f0 .- P.κ.(ts)\n",
+ " den = max.(den, 1f-3)\n",
+ " scheduler_scaling = P.dκ.(ts) ./ den\n",
+ "\n",
+ " # 7) Masked state\n",
+ " lmask = Xt .!= P.padding_token\n",
+ " cmask = trues(size(lmask))\n",
+ " Xt_ms = FF.MaskedState(FF.DiscreteState(P.k, Xt), cmask, lmask)\n",
+ "\n",
+ " ts_d = to_dev(ts)\n",
+ " Xt_ms_d = to_dev(Xt_ms)\n",
+ " Tmask_d = to_dev(transition_mask)\n",
+ " Emult_d = to_dev(edit_multiplier)\n",
+ " sched_d = to_dev(reshape(Float32.(scheduler_scaling), 1, 1, :))\n",
+ "\n",
+ " # 8) Forward + loss + update\n",
+ " loss, grad = Flux.withgradient(model) do m\n",
+ " M = m(ts_d, Xt_ms_d)\n",
+ " l = FF.edit_loss(P, M, Tmask_d, Emult_d, sched_d; eps=1f-8)\n",
+ " if isnan(l)\n",
+ " println(\"Maximum element of M: \", maximum(M))\n",
+ " end\n",
+ " l\n",
+ " end\n",
+ " Flux.update!(opt_state, model, grad[1])\n",
+ "\n",
+ " if step % print_every == 0\n",
+ " @info \"train\" epoch step loss=Float32(loss)\n",
+ " end\n",
+ " end\n",
+ " end\n",
+ "\n",
+ " return Functors.fmap(to_cpu, model)\n",
+ "end\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Init process and model\n",
+ "K = PM.K\n",
+ "P = FF.EditFlow(K; bos_token=0, gap_wise=false)\n",
+ "model = EditFlowModel(; d=128, num_heads=8, nlayers=4, rff_dim=128, cond_dim=128, K=K)\n",
+ "nothing"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.746237f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.981628f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.213884f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.454155f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.665428f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 1\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.873983f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.157003f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 15.275973f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.903381f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.729305f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.102013f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 2\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.672424f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.530746f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.67213f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.382526f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.963814f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.835972f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 3\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.291992f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.19426f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.382185f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.135967f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.92569f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.028893f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 4\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.427214f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 17.69117f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.73476f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.384754f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.658775f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.132454f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 5\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.998142f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.203682f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.36901f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.243134f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.106112f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.82871f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 6\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.493202f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.290234f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.923895f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.832842f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.057846f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.94542f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 7\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.881554f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.718155f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.733717f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.073797f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.92004f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.047007f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 8\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.872967f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.382488f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.645565f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.287525f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.113968f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.087315f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 9\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.874767f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.860031f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.602049f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.410063f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 10.562942f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.848387f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 10\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.861128f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.541365f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.236982f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.957115f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.865005f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.583748f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 11\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.02132f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.584347f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.580858f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.981087f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.591656f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.066517f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 12\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.051542f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.067421f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.05304f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.487747f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.222967f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.143532f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 13\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.575806f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.158926f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.09401f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.851517f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.892365f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.7897f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 14\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.985878f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.019676f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.797548f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.55872f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.278553f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.254448f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 15\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.536222f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.821463f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 17.80231f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.376482f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.044758f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.442654f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 16\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.176807f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.091465f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.013334f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.81593f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.212975f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.84259f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 17\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.185429f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.470398f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.427452f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.94579f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.695702f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.645878f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 18\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.073719f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.841595f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.278421f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.68238f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.269619f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.283346f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 19\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.181093f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.541328f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.628794f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.634392f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.7462f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.353523f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 20\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.927622f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.720219f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.47013f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.810509f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.401003f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.512375f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 21\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.377796f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.350807f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 16.468513f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.804567f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.310434f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.925941f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 22\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.39031f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.91434f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.262634f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.324049f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.413176f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 27.26462f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 23\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.746334f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.85251f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.560282f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.03707f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.268227f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.471123f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 24\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.593208f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.767986f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.076988f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.13642f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.121529f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.215782f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 25\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.73236f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.485447f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.659838f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.290493f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 16.489616f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.764778f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 26\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.014236f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.763737f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.692177f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.253918f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.51273f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.86855f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 27\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.306889f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.108227f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.949062f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.045507f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.165205f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 12.919155f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 28\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.903103f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.889954f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.677599f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.235676f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.818413f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.454956f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 29\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.443413f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.767849f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.12367f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.95783f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.690418f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.498676f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 30\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.116188f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.376179f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.445965f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.826906f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.523788f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 16.482994f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 31\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.550964f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.193125f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.838432f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.289452f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.098053f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.513762f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 32\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.862543f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 16.810226f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.037594f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.468763f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.604746f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.249472f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 33\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.916328f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.879818f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.453798f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.617702f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.713636f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.131275f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 34\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.763681f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.138496f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.24766f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.000917f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.266335f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.831928f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 35\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.104105f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.901894f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.866064f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.89682f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.663845f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.070297f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 36\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.728453f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.615274f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.564804f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.089449f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.273602f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.159435f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 37\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.562922f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.734241f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.008451f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 8.860302f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.15115f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.32642f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 38\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.513498f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.381474f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.2743f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.010727f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.264381f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.826624f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 39\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.921288f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.755466f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.364662f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.126223f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.64931f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.564432f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 40\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.728107f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 17.909348f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.832344f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.323364f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.952206f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.968285f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 41\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.83363f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.986597f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.239515f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.450031f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.893978f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.543922f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 42\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.674696f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.830986f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.515713f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.128778f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.751575f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.633709f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 43\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.873392f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.810955f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.402004f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.716564f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 17.452545f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 16.890793f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 44\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.448315f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.888472f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.899237f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.195805f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.420376f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.594948f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 45\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 9.004853f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.887007f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.23485f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.913727f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.218992f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.94302f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 46\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.745415f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.451485f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.83382f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.155079f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.894794f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.932127f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 47\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.041811f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.656693f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.531162f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.119312f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.319973f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.268059f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 48\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.691246f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.474157f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.733646f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.136124f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 17.320087f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.540567f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 49\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.147991f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.83776f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.327303f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.39455f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.208961f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.616371f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 50\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.594536f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 51\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.58604f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 51\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.868906f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 51\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.821358f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 51\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.95021f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 51\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.622738f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 51\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.146685f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 52\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.15935f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 52\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.340935f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 52\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.693542f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 52\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.80805f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 52\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 26.283953f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 52\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.714622f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 53\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.754047f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 53\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.48253f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 53\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.189365f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 53\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.135786f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 53\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.220694f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 53\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.33191f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 54\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.619081f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 54\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.133217f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 54\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.216085f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 54\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.81441f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 54\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.997604f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 54\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.05939f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 55\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 16.644253f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 55\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.239815f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 55\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.43597f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 55\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 16.8848f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 55\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.401718f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 55\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.64897f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 56\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.992f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 56\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.69675f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 56\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.861366f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 56\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.179195f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 56\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = -11.587956f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 56\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.98692f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 57\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.81665f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 57\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.926167f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 57\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.971962f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 57\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.27145f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 57\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.326494f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 57\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.14252f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 58\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.31263f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 58\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.074333f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 58\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.830984f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 58\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.307228f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 58\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.105434f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 58\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.807196f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 59\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.067299f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 59\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.049335f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 59\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.681822f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 59\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.253326f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 59\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 17.409986f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 59\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.683414f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 60\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.863966f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 60\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 15.980584f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 60\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.086948f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 60\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.897078f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 60\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.529032f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 60\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.82579f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 61\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.25418f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 61\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.34762f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 61\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.448723f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 61\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.228636f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 61\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.144558f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 61\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.490255f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 62\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.441963f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 62\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.559408f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 62\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.865923f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 62\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.954279f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 62\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.403667f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 62\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.830547f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 63\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.544434f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 63\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.088642f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 63\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 5.486371f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 63\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.702126f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 63\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.829082f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 63\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.889729f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 64\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.04778f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 64\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.33698f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 64\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.940506f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 64\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.096375f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 64\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.802752f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 64\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.215298f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 65\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.598557f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 65\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.455418f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 65\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.71409f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 65\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.750744f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 65\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.510859f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 65\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.624943f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 66\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.001049f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 66\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.153976f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 66\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.199299f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 66\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.778515f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 66\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.019203f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 66\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.27776f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 67\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.881886f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 67\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.737415f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 67\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.321026f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 67\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.270313f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 67\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.653442f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 67\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.653757f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 68\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.06898f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 68\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.069595f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 68\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.993654f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 68\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.809895f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 68\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.706173f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 68\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.573029f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 69\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.283886f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 69\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.783833f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 69\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.422552f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 69\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.811619f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 69\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.002556f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 69\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.116966f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 70\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.023243f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 70\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.249037f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 70\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.984207f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 70\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.499313f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 70\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.772282f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 70\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.921055f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 71\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.7816f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 71\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.670277f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 71\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.296196f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 71\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.030935f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 71\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.194506f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 71\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.43831f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 72\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.557142f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 72\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.490828f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 72\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.104092f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 72\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.674341f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 72\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.07388f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 72\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.306126f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 73\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.135044f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 73\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.159412f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 73\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.045418f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 73\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.40194f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 73\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.572552f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 73\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.981903f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 74\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.257917f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 74\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.122993f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 74\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.006748f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 74\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.172253f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 74\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.008356f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 74\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.84019f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 75\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.151068f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 75\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.485172f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 75\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.153769f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 75\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.290163f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 75\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.762228f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 75\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.199116f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 76\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 17.930504f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 76\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.04787f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 76\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.809868f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 76\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.353975f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 76\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.562157f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 76\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 16.483915f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 77\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.138283f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 77\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.523014f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 77\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.520844f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 77\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.04196f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 77\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.441517f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 77\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.367897f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 78\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.163624f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 78\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.393862f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 78\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.718964f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 78\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.644243f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 78\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.149078f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 78\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.814312f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 79\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.866508f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 79\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.337425f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 79\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.624027f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 79\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.402237f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 79\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.410057f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 79\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.08833f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 80\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.47953f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 80\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.978199f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 80\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.085361f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 80\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.211655f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 80\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.508362f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 80\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.466614f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 81\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.391834f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 81\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.903198f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 81\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.485249f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 81\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.64059f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 81\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.317387f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 81\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.682806f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 82\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.254333f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 82\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.734877f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 82\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.537487f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 82\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.094929f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 82\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.800623f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 82\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.080275f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 83\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.002201f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 83\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.30722f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 83\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.413658f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 83\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.382023f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 83\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.645979f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 83\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.672878f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 84\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.800962f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 84\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.22847f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 84\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.500309f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 84\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.74908f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 84\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.878939f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 84\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.335938f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 85\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.956377f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 85\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.555515f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 85\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.946405f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 85\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.589813f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 85\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.090248f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 85\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.336586f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 86\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.855642f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 86\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.779556f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 86\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.152008f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 86\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.799198f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 86\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.729807f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 86\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.73042f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 87\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.806095f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 87\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.405361f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 87\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.57449f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 87\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.7407f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 87\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.59734f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 87\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.25967f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 88\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.743744f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 88\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.98431f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 88\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 15.31344f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 88\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.085484f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 88\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.487297f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 88\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.491331f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 89\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 16.660719f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 89\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.529898f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 89\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.550985f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 89\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.375748f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 89\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.937206f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 89\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.631706f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 90\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 17.535595f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 90\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.669437f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 90\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.55685f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 90\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.808851f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 90\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.87554f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 90\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.389326f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 91\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.405817f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 91\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.464638f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 91\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.111252f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 91\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.999516f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 91\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.218391f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 91\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.187355f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 92\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.420967f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 92\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.060745f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 92\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.60073f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 92\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.225628f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 92\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.36546f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 92\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.678913f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 93\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.350622f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 93\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.95152f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 93\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.601427f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 93\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.351856f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 93\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.845188f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 93\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.619637f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 94\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.598852f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 94\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 24.265049f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 94\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 25.088186f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 94\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.131905f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 94\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.927309f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 94\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.709093f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 95\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.480736f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 95\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.990673f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 95\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.88835f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 95\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.45876f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 95\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.846493f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 95\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.63565f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 96\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.12495f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 96\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.763638f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 96\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.331306f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 96\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.594742f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 96\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.491268f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 96\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.579607f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 97\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.1447f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 97\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.514366f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 97\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 18.976524f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 97\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.168167f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 97\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.450222f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 97\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.13343f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 98\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.17472f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 98\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.017311f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 98\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.751623f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 98\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.171782f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 98\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 19.81949f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 98\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.225515f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 99\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.012215f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 99\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.367924f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 99\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.439997f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 99\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.901167f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 99\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.113953f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 99\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.226475f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 100\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 25\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 23.480293f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 100\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 50\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.56205f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 100\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 75\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 20.577469f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 100\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 100\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.884739f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 100\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 125\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 21.706923f0\n",
+ "\u001b[36m\u001b[1m┌ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mtrain\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m epoch = 100\n",
+ "\u001b[36m\u001b[1m│ \u001b[22m\u001b[39m step = 150\n",
+ "\u001b[36m\u001b[1m└ \u001b[22m\u001b[39m loss = 22.257725f0\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "EditFlowModel(\n",
+ " Embedding(22 => 128), \u001b[90m# 2_816 parameters\u001b[39m\n",
+ " Chain(\n",
+ " RandomFourierFeatures{Float32, Matrix{Float32}}(Float32[4.107619 -1.6246507 … -3.6645346 -1.3967112]),\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " [\n",
+ " TransformerBlock(\n",
+ " Attention(\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " identity,\n",
+ " identity,\n",
+ " Onion.var\"#32#34\"(),\n",
+ " 16,\n",
+ " 16,\n",
+ " 8,\n",
+ " 8,\n",
+ " ),\n",
+ " StarGLU(\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(512 => 128; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " NNlib.swish,\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.96080273, 0.93640083, 0.9547064, 0.8971493, 0.95765316, 0.92207366, 0.89724094, 0.9440924, 0.94302225, 0.94956416 … 0.94014513, 0.9212964, 0.91572565, 0.9039559, 0.9231686, 0.9042348, 0.9314332, 0.87426275, 0.8752597, 0.9407146], Float32[-0.025268404, 0.0020312557, -0.010115526, 0.020099802, 0.018506693, 0.0025694135, -0.023937318, -0.038941544, -0.038218282, -0.008356358 … 0.0045030406, 0.029052407, -0.039042093, -0.009993242, 0.003901428, -0.0070870365, -0.037610408, -0.06006574, 0.015338725, 0.011129025], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.9615473, 0.97570944, 0.9112915, 0.96853894, 0.9237012, 0.9523371, 0.9733101, 0.9436969, 1.0086424, 0.98759335 … 0.96384525, 0.98503447, 0.9836052, 0.95819885, 0.969784, 0.9607591, 0.9873663, 1.0246212, 0.97779596, 0.963771], Float32[-0.027013712, -0.0054144724, 0.0071041402, -0.015267112, -0.05662798, -0.00019226706, 0.017086789, 0.010009103, 0.004368342, -0.022684177 … 0.008213096, 0.01543913, 0.008588103, -0.042858012, 0.005013047, -0.0087100575, -0.00035417278, -0.0044492367, -3.3963931f-6, -0.0070771035], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " identity,\n",
+ " ),\n",
+ " TransformerBlock(\n",
+ " Attention(\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " identity,\n",
+ " identity,\n",
+ " Onion.var\"#32#34\"(),\n",
+ " 16,\n",
+ " 16,\n",
+ " 8,\n",
+ " 8,\n",
+ " ),\n",
+ " StarGLU(\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(512 => 128; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " NNlib.swish,\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.94601697, 0.97375804, 0.9406857, 0.953404, 0.95697165, 0.9183645, 0.93461883, 0.93530893, 0.98690313, 0.92145735 … 0.8612234, 0.87250346, 0.98907375, 0.956685, 0.9498322, 0.9437079, 0.9624967, 0.949929, 0.97197264, 0.97001827], Float32[0.0011167054, -0.014636964, 0.0022019444, 0.0121619, -0.013723163, 0.001547043, 0.011414896, -0.0012122085, -0.006493586, -0.021626603 … 0.069353715, -0.012018405, 0.004048702, 0.004974579, -0.017438088, -0.010104225, -0.009309289, 4.483607f-5, -0.012501754, -0.006304365], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.97332007, 1.0309724, 0.9687911, 0.97576725, 0.96835095, 0.9971229, 0.993208, 0.9710502, 1.003863, 0.9820828 … 0.982708, 0.92708766, 1.0036467, 0.9794132, 0.99849373, 0.9908135, 0.9964946, 1.0093178, 0.9900424, 0.9617081], Float32[-0.016477505, -0.014338043, 0.040039297, -0.029744757, -0.029461078, -0.041657545, 0.027084501, 0.041064046, -0.025039643, 0.0060120723 … 0.0095715625, -0.0138390735, 0.0026735286, -0.050670695, -0.024575308, 0.006731998, -0.007667666, -6.0379556f-5, -0.0033010722, -0.048479233], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " identity,\n",
+ " ),\n",
+ " TransformerBlock(\n",
+ " Attention(\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " identity,\n",
+ " identity,\n",
+ " Onion.var\"#32#34\"(),\n",
+ " 16,\n",
+ " 16,\n",
+ " 8,\n",
+ " 8,\n",
+ " ),\n",
+ " StarGLU(\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(512 => 128; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " NNlib.swish,\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.94413495, 0.9591206, 0.9815761, 0.9860674, 0.9643858, 0.99948543, 0.95805496, 0.9728332, 0.9892072, 0.93138975 … 0.92429256, 1.0070444, 0.9443377, 0.9681403, 0.9447193, 0.9323913, 0.9746358, 0.99652237, 0.96340334, 0.97654444], Float32[-0.03537166, -0.006217378, -0.007379122, 0.009719772, -0.0314247, 0.016313963, -0.0015389565, 0.021076221, 0.010470716, -0.02639406 … 0.0006755494, 0.005295955, 0.017049158, -0.0132954335, 0.005307746, 0.02653267, -0.008163272, 0.009826559, 0.030178566, -0.0014013725], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.93666166, 1.0321827, 0.9726321, 0.98780626, 0.9613221, 1.0248475, 1.0161513, 0.96915793, 0.9948018, 1.0429728 … 1.0270013, 1.0185184, 1.0062677, 0.9811149, 1.0302101, 1.0181782, 1.0179951, 1.0333631, 1.0274625, 0.9702701], Float32[-0.06427912, 0.002420664, 0.047289338, -0.034010448, -0.03299984, -0.013876393, 0.023457177, 0.020834371, 0.010680823, -0.032694057 … -0.003318202, -0.0250829, 0.027400794, -0.031808987, -0.024685763, -0.00258377, -0.011304101, -0.01021114, -0.0004895934, -0.020227717], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " identity,\n",
+ " ),\n",
+ " TransformerBlock(\n",
+ " Attention(\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " Dense(128 => 128; bias=false), \u001b[90m# 16_384 parameters\u001b[39m\n",
+ " identity,\n",
+ " identity,\n",
+ " Onion.var\"#32#34\"(),\n",
+ " 16,\n",
+ " 16,\n",
+ " 8,\n",
+ " 8,\n",
+ " ),\n",
+ " StarGLU(\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(512 => 128; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " Dense(128 => 512; bias=false), \u001b[90m# 65_536 parameters\u001b[39m\n",
+ " NNlib.swish,\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.98147184, 0.9223102, 1.0042982, 0.97599345, 0.98011535, 0.9964276, 0.9762427, 0.94932944, 0.96026486, 0.95611215 … 0.9575027, 0.9455124, 0.99811995, 0.9754665, 0.9862882, 0.9942666, 0.9694813, 0.96348906, 0.95470506, 0.9039463], Float32[-0.014831864, 9.283005f-5, -0.008477221, 0.040162712, 0.022272639, 0.0436828, -0.009014154, 0.055058725, 0.030263849, -0.040652655 … -0.010325852, -0.023909276, 0.009594226, 0.00861934, -0.0045753345, -0.015833346, 0.019944627, 0.011142825, 0.025711212, 0.026980491], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " AdaLN(\n",
+ " Onion.LayerNorm{Vector{Float32}, Vector{Float32}, Float32}(Float32[0.9566518, 1.0749155, 1.0178746, 1.0410086, 1.0265093, 1.0722593, 1.0385908, 1.0496945, 1.1038729, 1.003326 … 1.0357652, 1.005023, 1.0573806, 1.0052382, 0.98908836, 1.0178303, 1.110416, 1.0397507, 1.0142217, 1.0475482], Float32[-0.08760491, 0.051100586, 0.08073487, -0.080240734, -0.037350997, -0.064348176, 0.01896439, 0.012915793, 0.041853514, -0.02849257 … -0.012428334, -0.040537376, 0.026203565, -0.026402708, -0.039873, -0.0071864277, 0.023559058, -0.015315336, 0.05209827, -0.06641875], 1.0f-6), \u001b[90m# 256 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " Dense(128 => 128), \u001b[90m# 16_512 parameters\u001b[39m\n",
+ " ),\n",
+ " identity,\n",
+ " ),\n",
+ " ],\n",
+ " Dense(128 => 41; bias=false), \u001b[90m# 5_248 parameters\u001b[39m\n",
+ " RoPE{Matrix{Float32}}(Float32[1.0 0.5403023 … -0.87528455 -0.065975994; 1.0 0.95041525 … 0.9552474 0.8159282; … ; 1.0 0.9999995 … -0.57972294 -0.5789079; 1.0 0.99999994 … 0.2726629 0.27235872], Float32[0.0 0.84147096 … -0.48360822 -0.9978212; 0.0 0.3109836 … 0.29580808 0.5781532; … ; 0.0 0.0009999999 … -0.8148137 -0.8153929; 0.0 0.0003162278 … 0.9621096 0.9621958]),\n",
+ " 20,\n",
+ ") \u001b[90m # Total: 80 trainable arrays, \u001b[39m1_339_392 parameters,\n",
+ "\u001b[90m # plus 3 non-trainable, 65_600 parameters, summarysize \u001b[39m5.364 MiB."
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "model = train_editflow!(P, model; epochs=100, steps_per_epoch=150, batch_size=256, lr=1f-4)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Sampling and Levenshtein plot\n",
+ "using Random\n",
+ "n = 1000\n",
+ "# 100 model samples (final states → strings)\n",
+ "model_samples_any = sample_gen_n(P, model; n=n, ts=0f0:0.01f0:1f0, rng=Random.MersenneTwister(42))\n",
+ "model_final_states = map(final_state_from_gen, model_samples_any)\n",
+ "model_strings = [state_to_PM_string(P, s) for s in model_final_states]\n",
+ "\n",
+ "# Build training strings from PM parents (the data PM was built on)\n",
+ "train_states = [FF.DiscreteState(P.k, sample(PM; rng=Random.MersenneTwister(1000+i))) for i in 1:100]\n",
+ "train_strings = [state_to_PM_string(P, s) for s in train_states]\n",
+ "\n",
+ "# Independent validation strings sampled from PM\n",
+ "val_states = [FF.DiscreteState(P.k, sample(PM; rng=Random.MersenneTwister(1000+i+2*n))) for i in 1:n]\n",
+ "val_strings = [state_to_PM_string(P, s) for s in val_states]\n",
+ "#val_strings = [s for s in val_strings if !(s in train_strings)]\n",
+ "\n",
+ "# Plot normalized Levenshtein vs. training set (distinct val/train)\n",
+ "plt = plot_lev_dist(\"model_vs_true\", val_strings, model_strings, train_strings; title=\"Model vs True (normalized Levenshtein)\")\n",
+ "display(plt)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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lZVz5swRCASq258+fXpVVRWtsHnzZvopUmsol8tbt24tFAozMzNpiUQiWbBggeqA83i8iRMnVlRUMK127NhBCFm7dq3qZ5IQ0rt375KSEqZaTk5Or1691MZNW1u7rKyMVti0aRMh5Mcff/zoo49U6wwYMKC8vJzWmTJlSvXB37hxI322qqpq3rx5atFOnjy5srKSCePw4cOEkOXLlzMl9Hvj3LlzgYGBqptdsGBB9bGdPn06IeTy5ct1jP9bComwiTCJUCwWGxoa+vv7M09NmTKFx+MlJiZWT4TXr18XCAS6urobN26MiYkJDw+n/xlat25dUFDAVJs7dy4hpGvXrtevX09NTT1z5oyzszP90aeaCK9fvy4UCo2MjL7//vtHjx5FRESsWbNGW1vbzMwsLS2NqfbaRHj58mVCyNChQ9XKv/32W0JISEgIfUgP/y5atCgiIiI1NTU8PHzv3r2jRo2q54jVlggdHBzMzc2///7769evnzt3Li4uTlnvRBgREaGrq6urqxsSEnL//v3IyMjNmzfr6+vr6em9ePGijmDKysq0tLRsbW3VymmKcnR01NfXX7du3b17965evTpw4EBCyKBBg5hqCoViyJAhhBBfX99r164lJCQcPnyYnmtZt24dU40mQgcHBysrqx9++OHGjRtnzpxJTk6mvTg4OBgYGPzwww8PHjw4c+YM/bG/YsUKa2vrKVOmXLly5e7du5MmTSKE+Pj4qAY5cODAFStWXLp06cWLF+Hh4Rs2bDA2NhYKheHh4Uyd1ybC+Pj4y//0n//8R1dXl8/n37lzh9bZuXMnIcTW1va33357+vTpgwcP5s+fz+Px2rVrx3zjy2QyOtvlww8/fPz48cuXL7dv325oaEhH480T4fvvv0/H+cyZMzExMZcvX+7bty8hZPbs2bRCXl4efStlMplqw0uXLhFChg8fzpTQH3w9evQ4depUTEzMlStXaLaYPHkyU4cmQicnJ0tLyx07djx8+PDMmTMdO3YkhHz22WdMNfq+TJ48me6XP3369Pfffx8+fLhaInRycrKzs9u1a9ejR49OnDjh5uam+h8qKirq+++/px8t5l1ISUmhz44bN44Q0rNnTyba/v37E0KmTZvGhFFbInRycurSpcuxY8ciIiJ27txJ9+/pT0xVoaGh9CNXx/i/pZAImwiTCJVK5dSpU3k8XkJC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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "model_strings_bos = [\">\" * state_to_PM_string(P, s) for s in model_final_states]\n",
+ "plt = plot_lev_dist(\"model_vs_true\", val_strings, model_strings_bos, train_strings; title=\"Model vs True (normalized Levenshtein)\")\n",
+ "display(plt)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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740b9+7du7S0lOlr90x07tyZpukrV67U0SY0NNTCwuLhw4cymUx/um7cmw4zSMvgLVpTU5OVlWWwUULI5cuX/03lBmszLsbAuHHjHB0df/7558TExMuXL0dGRtZ9NrWeOnToMG7cuNzcXONhcAkJCYSQt956S38i019UfwpzatH4AILZmQafgDRNGx++sMrNzS0pKencubPBfYUafVOubt26hYWFXbhwIT09Xfd6Zm3p6uo6cuTI7du3M98Afvvtt9rWKZFIXn75ZYqivv/++/rUwPzL6n651t+/XFv99zDrv5jZ+tWrV+k6fz6I6WjGnMWteytc1xQ9dKABtFotc62CGclgICMjg8fjubu7q1QqmqbT0tJ4PJ6zszNrH0imm8nQoUPr2FwdvUY//vhjg8ZMAEdGRuoP8mPIZDJdN8thw4YRQtasWaObS1FUv379yJO9Rplrfj169NBfj66ng24TzPdlZniywUaVSqXuiTNngPU3ymDGLeg6wTOftj179lQoFHXsFvqfMRLMkfe2bdv0Z/31119r1669ePFi3WvQ7zWqk56ebmlp6erqypzF1T2pefPmkX++AzG0Wi2z0zw8PHQTmVu1vfzyywbbKi4u5vF4EolE/1+juz+t8ThCg8Wrq6t5PF5AQIBardZNvHjxInNks27dOt3E+vQaZTADUb744gtfX1/d8EH9LRq0Z3onjRw5so51xsfHW1lZ8fl81h7RTEckpvsJTdO6USvbt283bqxfADOO0KCBQUdclUrl7+/P4/FOnDhRx9p04wiNG/D5fIM9fOnSJWYPM4NBGW+//TYhxGCkI/1Pr1HWJ67benZ2tlAotLOz09/bycnJ6DVqAEHY3DEHcO3atautATOgjelFvXjxYsLWmZ5RU1NjZ2cnFArz8vJqW1uDglCr1TL9R8LDw3/++edr165dv359//797733nlgs1g1bvHv3rpWVlZWV1bfffpuUlHTlypVRo0Z5e3sbjCNUq9XM2c4JEyacPXv2+PHj77zzjlgsZq5w6H+gMwOEW7duvWnTpsuXL9+6deu3336bP3++m5ubbsRIPYNQrVYz9/jo2rXrgQMHEhMTL1y4sGbNmqioKIMFk5OTmQ8pR0fHmpoa/VkNHUdoMJ0Z6cXQBSEzSsTd3X3Xrl0pKSnnzp0bMmSIt7e3lZWVfhAqFAoXFxehUDh7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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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SEi4fPny8uXLzedqYQAA5gNBaBbWrVu3ZcsW5kihRCKhz/NLT0//448/6EZXV1exWMyEX/PmzW/evEkIkUqllbvb6M1HoVD88MMPxn4VAAANEYLQLLRt23bkyJFMEK5cufKdd97p3r372LFjBw0aRDd27ty5R48eTZo0oc//W7hw4eXLl4OCgrp27dq+fXvW2c6ZM+fkyZOdO3du375969atmXYLCwvzuQ4vAED94voxQj6PF/7Tmsd/7jL2gtLj7vN403Vb3n333XfffZd5+vPPP//888/04/fff3/cuHGFhYWNGjViEovP5//222/M+AEBAYmJiVlZWV5eXszu0JYtW+bn5zPjBAYGJiUlZWdne3p66t41ELesAgBgcD0It2/5b2JiokkW9daAAQMMH1skEolEourH4fP5jRs3rn4coVDo5+dn+HIBALiG60HYunXrJk2amGZZ5nMzFAAAYHA9CMeNGX3r1i2BQGDsBUmksrPnzr3xxhvGXpBRqVQquVxub29f34UAANQZrgehtKLiyFcL+rYLMvaC3vt2h1Qqrdx+9+7dbdu2xcbGikSiVq1aTZs2rV+/fsYuhvHgwQOFQtGrVy8Dx7969erKlSvv3r1r1KoAAEwJvUbr07FjxwYPHtyxY8eDBw/u2rWrV69eH374oSkLOHPmzNGjR025RAAAc8P1LcJ6JJfL582bt2nTpo8++ohu6dChQ1hYGDPCqVOn/vrrL0LIu+++S9/I8O+//y4oKJBKpWfPnm3SpMkXX3zh6OhICNFoND/99FN4eLiTk9OcOXNatWpFCDly5Iivr++dO3eio6O///77hISEEydOZGdnN2nSZMGCBb6+vgkJCVeuXJHL5Z9//nmTJk1mzZpFUdShQ4euX79uY2MzY8aMDh060JX89ttvf/31l4+PD32ZUwCA1wm2COtNVFRUQUGBbvIRQmxsbOgHmzZtWrdu3dixY0eMGDF9+vQrV64QQu7evTtnzpz4+Pjp06c/ffp03rx59MhhYWGXL1+eOnVqu3btQkNDMzIyCCGnT59+//33BQLBlClTrKysYmNje/fuPX/+fHt7+/79+ysUCldX16ZNmzZu3HjQoEFdunQhhMyfP//IkSPvv/9+r169hg8fHh8fTwjZu3fvihUr3n333Xbt2uE+UADw+sEWYb0Ri8Vubm7W1tb002XLlhUU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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "\n",
+ "pAA = plot_AA_dist(\"model_vs_true_AA\", val_strings, model_strings; title=\"AA frequency: Natural vs Generated\")\n",
+ "display(pAA)\n",
+ "\n",
+ "pLen = plot_len_dist(\"model_vs_true_len\", val_strings, model_strings; title=\"Length distribution: Natural vs Generated\")\n",
+ "display(pLen)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Natural 'A' frequency: 0.047142480905978404\n"
+ ]
+ }
+ ],
+ "source": [
+ "println(\"Natural 'A' frequency: \", (isdefined(Main, :val_strings) ? sum(count(==('A'), s) for s in val_strings) / sum(length.(val_strings)) : sum(count(==('A'), s) for s in val_strings) / sum(length.(val_strings))))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Natural 'A' frequency: 0.04109772423025435\n"
+ ]
+ }
+ ],
+ "source": [
+ "println(\"Natural 'A' frequency: \", (isdefined(Main, :model_strings) ? sum(count(==('A'), s) for s in model_strings) / sum(length.(model_strings)) : sum(count(==('A'), s) for s in model_strings) / sum(length.(model_strings))))"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Julia 1.11.6",
+ "language": "julia",
+ "name": "julia-1.11"
+ },
+ "language_info": {
+ "file_extension": ".jl",
+ "mimetype": "application/julia",
+ "name": "julia",
+ "version": "1.11.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/editflow_code/test/runtests.jl b/editflow_code/test/runtests.jl
new file mode 100644
index 0000000..98dc973
--- /dev/null
+++ b/editflow_code/test/runtests.jl
@@ -0,0 +1,271 @@
+using Pkg
+Pkg.activate(joinpath(@__DIR__, ".."))
+Pkg.instantiate()
+Pkg.develop(path=joinpath(@__DIR__, "..", ".."))
+using Flowfusion
+const FF = Flowfusion
+using Test
+
+@testset "EditFlow remaining_edits, transition mask, remove/pad, loss" begin
+
+ tokens = 21
+ pad = 22
+ lat = 23
+ bos = 0
+ P = Flowfusion.EditFlow(tokens; transform=identity, padding_token=pad, latent_token=lat, bos_token=bos=0)
+
+ # ─────────────────────────────────────────────────────────────────────
+ # remaining_edits: simple 1-column case
+ Zt = [0; 7; 23; 23; 4; 23; 22;;]
+ Xt = [0; 7; 4; 22;;]
+ Z1 = [0; 7; 20; 20; 4; 10; 22;;]
+ expected = zeros(Float32, 2*tokens+1, size(Xt)...)
+ expected[20,2,1] = 2
+ expected[10,3,1] = 1
+ got = FF.remaining_edits(P, Zt, Z1, Xt)
+
+ @test got == expected
+ # Two-column case with inserts/subs
+ Zt = [0 0; 7 23; 15 15; 15 15; 23 4; 2 2; 22 22;]
+ Xt = [0 0; 7 15; 15 15; 15 4; 2 2]
+ Z1 = [0 0; 7 7; 20 20; 20 20; 5 4; 10 10; 22 22;]
+ expected = zeros(Float32, 2*tokens+1, size(Xt)...)
+ expected[5, 4, 1] = 1
+ expected[tokens+10,5,1] = 1
+ expected[tokens+10,5,2] = 1
+ expected[tokens+20, 4, 1] = 1
+ expected[tokens+20, 3, 2] = 1
+ expected[tokens+20, 3, 1] = 1
+ expected[tokens+20, 2, 2] = 1
+ expected[7, 1, 2] = 1
+ got = FF.remaining_edits(P, Zt, Z1, Xt)
+ @test got == expected
+
+ # deletions case
+ Zt = [0 0; 7 7; 20 20; 20 20; 4 4; 19 19; 22 22;]
+ Xt = [0 0; 7 7; 20 20; 20 20; 4 4; 19 19; 22 22;]
+ Z1 = [0 0; 7 7; 23 23; 20 23; 4 4; 23 23; 22 22;]
+ expected = zeros(Float32, 2*tokens+1, size(Xt)...)
+ expected[2*tokens+1,3,1] = 1
+ expected[2*tokens+1,6,1] = 1
+ expected[2*tokens+1,3,2] = 1
+ expected[2*tokens+1,4,2] = 1
+ expected[2*tokens+1,6,2] = 1
+ got = FF.remaining_edits(P, Zt, Z1, Xt)
+ @test got == expected
+
+ # mixed inserts/subs case
+ Zt = [0 0; 7 7; 15 15; 15 15; 23 4; 2 2; 22 22;]
+ Xt = [0 0; 7 7; 15 15; 15 15; 2 4; 22 2;]
+ Z1 = [0 0; 7 7; 20 20; 20 20; 5 4; 10 10; 22 22;]
+ expected = zeros(Float32, 2*tokens+1, size(Xt)...)
+ expected[5, 4, 1] = 1
+ expected[tokens+20,3,1] = 1
+ expected[tokens+20,4,1] = 1
+ expected[tokens+10,5,1] = 1
+ expected[tokens+20,3,2] = 1
+ expected[tokens+20,4,2] = 1
+ expected[tokens+10,6,2] = 1
+ got = FF.remaining_edits(P, Zt, Z1, Xt)
+ @test got == expected
+
+ # ─────────────────────────────────────────────────────────────────────
+ # transition mask from Xt
+ Xt = [0 0; 7 7; 20 20; 20 20; 5 4; 10 22; 22 22;]
+ expected = ones(Float32, 2*tokens+1, size(Xt)...)
+ # sample 1 (no self-sub mask for BOS=0)
+ expected[tokens+7,2,1] = 0
+ expected[tokens+20,3,1] = 0
+ expected[tokens+20,4,1] = 0
+ expected[tokens+5,5,1] = 0
+ expected[tokens+10,6,1] = 0
+ expected[:,7,1] .= 0
+ expected[tokens+1:2*tokens+1,1,1] .= 0
+ # sample 2 (no self-sub mask for BOS=0)
+ expected[tokens+7,2,2] = 0
+ expected[tokens+20,3,2] = 0
+ expected[tokens+20,4,2] = 0
+ expected[tokens+4,5,2] = 0
+ expected[:,6:7,2] .= 0
+ expected[tokens+1:2*tokens+1,1,2] .= 0
+
+
+ got = FF.transition_mask_from_Xt(P, Xt)
+
+ # Display all indices in `got` where the value is zero
+ zero_indices = findall(x -> x == 0, got)
+ #@info "Indices in 'got' that are zero:" zero_indices
+ @test got == expected
+
+ # ─────────────────────────────────────────────────────────────────────
+ # loss equivalence under identity transform
+ edit_multiplier = [0; 2;; 1; 0;;; 1; 0;; 0; 1;;;] # (2,2,2)
+ transition_mask = [1; 0;; 1; 0;;; 1; 0;; 0; 1;;;] # (2,2,2)
+ M = [0.1; 0.2;; 0.3; 0.4;;; 0.5; 0.6;; 0.7; 0.8;;;] # (2,2,2)
+ t = [0.3; 0.7;;] # (1,2)
+ k(t)=t; dk(t)=1
+ scheduler_scaling = dk.(t) ./ (-k.(t) .+ 1)
+ # manual loss
+ l = (0.1+0.3+0.5+0.8 - (1/(1-0.3)*(2*log(0.2)+log(0.3)) + 1/(1-0.7)*(log(0.5)+log(0.8))))/2
+ got = Flowfusion.edit_loss(P, M, transition_mask, edit_multiplier, scheduler_scaling; op_mask=nothing, eps=0)
+ @test isapprox(got, l; atol=1e-7, rtol=1e-7)
+
+end
+
+
+@testset "EditFlow gap-wise inserts: remaining_edits, transition mask, loss" begin
+ tokens = 21
+ pad = 22
+ lat = 23
+ bos = 0
+ P = Flowfusion.EditFlow(tokens; transform=identity, padding_token=pad, latent_token=lat, bos_token=bos)
+
+ # ─────────────────────────────────────────────────────────────────────
+ # remaining_edits: simple 1-column case (gap-wise)
+ # Xt has L=4 rows → gaps = 1..4
+ Zt = [0; 7; 23; 23; 4; 23; 22;;]
+ Xt = [0; 7; 4; 22;;]
+ Z1 = [0; 7; 20; 20; 4; 10; 22;;]
+ expected = zeros(Float32, 2*tokens+1, size(Xt,1)+1, size(Xt,2)) # (2K+1, L+1=5? careful: size(Xt,1)=4 -> L+1=5 ; but real Lb=3 → valid gaps 1..4)
+ # Inserts are on gaps:
+ # - two '20' inserted between 7 and 4 -> gap 3
+ # - one '10' inserted after 4 -> gap 4
+ expected[20, 3, 1] = 2
+ expected[10, 4, 1] = 1
+ got = FF.remaining_edits_gapwise(P, Zt, Z1, Xt)
+ @test got == expected
+
+ # Two-column case with inserts/subs (gap-wise inserts)
+ Zt = [0 0; 7 23; 15 15; 15 15; 23 4; 2 2; 22 22;]
+ Xt = [0 0; 7 15; 15 15; 15 4; 2 2] # L=5 → gaps 1..6
+ Z1 = [0 0; 7 7; 20 20; 20 20; 5 4; 10 10; 22 22;]
+ expected = zeros(Float32, 2*tokens+1, size(Xt,1)+1, size(Xt,2)) # (2K+1, 6, 2)
+
+ # sample 1 (b=1):
+ # subs: 15→20 at sites 3 & 4, 2→10 at site 5
+ expected[tokens+20, 3, 1] = 1
+ expected[tokens+20, 4, 1] = 1
+ expected[tokens+10, 5, 1] = 1
+ # insert: LAT→5 occurs after site 4 (between 15 and 2) → gap 5
+ expected[5, 5, 1] = 1
+
+ # sample 2 (b=2):
+ # insert: LAT→7 occurs after site 1 (between BOS and first real) → gap 2
+ expected[7, 2, 2] = 1
+ # subs: 15→20 at sites 2 & 3, 2→10 at site 5
+ expected[tokens+20, 2, 2] = 1
+ expected[tokens+20, 3, 2] = 1
+ expected[tokens+10, 5, 2] = 1
+
+ got = FF.remaining_edits_gapwise(P, Zt, Z1, Xt)
+ @test got == expected
+
+ # deletions case (gap-wise array but deletions live on sites)
+ Zt = [0 0; 7 7; 20 20; 20 20; 4 4; 19 19; 22 22;]
+ Xt = [0 0; 7 7; 20 20; 20 20; 4 4; 19 19; 22 22;] # L=7 → gaps 1..8
+ Z1 = [0 0; 7 7; 23 23; 20 23; 4 4; 23 23; 22 22;]
+ expected = zeros(Float32, 2*tokens+1, size(Xt,1)+1, size(Xt,2))
+
+ # sample 1 deletions at sites 3 and 6
+ expected[2*tokens+1, 3, 1] = 1
+ expected[2*tokens+1, 6, 1] = 1
+ # sample 2 deletions at sites 3,4,6
+ expected[2*tokens+1, 3, 2] = 1
+ expected[2*tokens+1, 4, 2] = 1
+ expected[2*tokens+1, 6, 2] = 1
+
+ got = FF.remaining_edits_gapwise(P, Zt, Z1, Xt)
+ @test got == expected
+
+ # mixed inserts/subs case (gap-wise)
+ Zt = [0 0; 7 7; 15 15; 15 15; 23 4; 2 2; 22 22;]
+ Xt = [0 0; 7 7; 15 15; 15 15; 2 4; 22 2;] # L=6 → gaps 1..7
+ Z1 = [0 0; 7 7; 20 20; 20 20; 5 4; 10 10; 22 22;]
+ expected = zeros(Float32, 2*tokens+1, size(Xt,1)+1, size(Xt,2))
+
+ # sample 1: subs at sites 3,4 and 5; insert '5' at gap 5
+ expected[tokens+20, 3, 1] = 1
+ expected[tokens+20, 4, 1] = 1
+ expected[tokens+10, 5, 1] = 1
+ expected[5, 5, 1] = 1
+
+ # sample 2: subs at sites 3,4 and 6
+ expected[tokens+20, 3, 2] = 1
+ expected[tokens+20, 4, 2] = 1
+ expected[tokens+10, 6, 2] = 1
+
+ got = FF.remaining_edits_gapwise(P, Zt, Z1, Xt)
+ @test got == expected
+
+ # ─────────────────────────────────────────────────────────────────────
+ # transition mask from Xt (gap-wise)
+ Xt = [0 0; 7 7; 20 20; 20 20; 5 4; 10 22; 22 22;] # L=7 → gaps 1..8
+ expected = ones(Float32, 2*tokens+1, size(Xt,1)+1, size(Xt,2))
+
+ # Helper to apply rules programmatically (mirrors gap-wise mask fn)
+ function fill_expected_mask!(E, x::Vector{Int}, b::Int)
+ L = length(x)
+ Lb = count(!=(pad), x)
+
+ # sub/del never valid at last column (gap L+1)
+ E[(tokens+1):(2*tokens+1), L+1, b] .= 0
+
+ # pre-BOS insert forbidden
+ E[1:tokens, 1, b] .= 0
+
+ # padding sites off
+ if Lb < L
+ E[:, (Lb+1):L, b] .= 0
+ end
+ # inserts beyond gap (Lb+1) off
+ if (Lb+1) < (L+1)
+ E[1:tokens, (Lb+2):(L+1), b] .= 0
+ end
+
+ for i in 1:Lb
+ t = x[i]
+ if t == bos
+ # block all subs at BOS and delete BOS
+ E[(tokens+1):(2*tokens), i, b] .= 0
+ E[2*tokens+1, i, b] = 0
+ else
+ # self-sub off
+ E[tokens + t, i, b] = 0
+ end
+ end
+ return E
+ end
+
+ expected = fill_expected_mask!(expected, Xt[:,1], 1)
+ expected = fill_expected_mask!(expected, Xt[:,2], 2)
+
+ got = FF.transition_mask_from_Xt_gapwise(P, Xt)
+ @test got == expected
+
+ # ─────────────────────────────────────────────────────────────────────
+ # loss equivalence under identity transform — with L+1 axis
+ # Make tiny tensors of shape (C=2, L+1=3, B=2); third column is masked out.
+ edit_multiplier = reshape(Float32[
+ 0, 2, 0, 1, 0, 0, # batch 1 (cols 1..3)
+ 1, 0, 0, 0, 1, 0 # batch 2
+ ], (2, 3, 2))
+
+ transition_mask = reshape(Float32[
+ 1, 0, 0, 1, 0, 0,
+ 1, 0, 0, 0, 1, 0
+ ], (2, 3, 2))
+
+ M = reshape(Float32[
+ 0.1, 0.2, 0.0, 0.3, 0.4, 0.0,
+ 0.5, 0.6, 0.0, 0.7, 0.8, 0.0
+ ], (2, 3, 2))
+
+ t = reshape(Float32[0.3, 0.7], (1, 2)) # per-batch scheduler t
+ k(t)=t; dk(t)=1
+ scheduler_scaling = dk.(t) ./ (1 .- k.(t))
+
+ # Manual loss matches your earlier numbers (3rd col masked out)
+ l = (0.1+0.3+0.5+0.8 - (1/(1-0.3)*(2*log(0.2)+log(0.3)) + 1/(1-0.7)*(log(0.5)+log(0.8))))/2
+ got = Flowfusion.edit_loss(P, M, transition_mask, edit_multiplier, scheduler_scaling; op_mask=nothing, eps=1e-9)
+ @test isapprox(got, l; atol=1e-7, rtol=1e-7)
+end
diff --git a/src/Flowfusion.jl b/src/Flowfusion.jl
index 5dfc5b5..cdfe28c 100644
--- a/src/Flowfusion.jl
+++ b/src/Flowfusion.jl
@@ -19,7 +19,7 @@ Later:
module Flowfusion
-using ForwardBackward, OneHotArrays, Adapt, Manifolds, NNlib, LogExpFunctions, Distributions
+using ForwardBackward, OneHotArrays, Adapt, Manifolds, NNlib, LogExpFunctions, Distributions, Random
include("types.jl")
include("mask.jl")
@@ -32,6 +32,7 @@ include("batching.jl")
include("indel.jl")
include("dist_dfm.jl")
+include("editflows.jl")
export
#Processes not in ForwardBackward.jl
@@ -39,6 +40,7 @@ export
NoisyInterpolatingDiscreteFlow,
DoobMatchingFlow,
OUFlow,
+ EditFlow,
MaskedState,
Guide,
tangent_guide,
diff --git a/src/editflows.jl b/src/editflows.jl
new file mode 100644
index 0000000..9f1b395
--- /dev/null
+++ b/src/editflows.jl
@@ -0,0 +1,1161 @@
+@enum EditFlowImpl::UInt8 begin
+ GAPWISE
+ POSITIONWISE
+ POSITIONWISE_REPARAM
+end
+
+# Coerce user-provided selector to enum
+_coerce_impl(x::EditFlowImpl) = x
+_coerce_impl(x::Symbol) = _coerce_impl(String(x))
+_coerce_impl(x::AbstractString) = begin
+ s = lowercase(String(x))
+ if s == "gapwise"
+ return GAPWISE
+ elseif s == "positionwise"
+ return POSITIONWISE
+ elseif s == "positionwise_reparam"
+ return POSITIONWISE_REPARAM
+ else
+ error("Unknown EditFlow implementation: $x")
+ end
+end
+
+_resolve_impl(impl) = impl === nothing ? POSITIONWISE_REPARAM : _coerce_impl(impl)
+
+struct EditFlow <: DiscreteProcess
+ k::Int # alphabet size (tokens 1..k)
+ transform::Function # maps unconstrained logits to positive rates
+ κ::Function # scheduler on [0,1] → [0,1] for bridge keep-probability
+ dκ::Function # derivative of κ
+ padding_token::Int # padding token id used in X1
+ latent_token::Int # latent placeholder used in Z0 / Zt
+ bos_token::Int # beginning-of-sequence token id (optional, unused by default)
+ impl::EditFlowImpl # implementation selector
+end
+
+const EDITFLOW_DISPATCH_STRINGS = (
+ "gapwise",
+ "positionwise",
+ "positionwise_reparam",
+)
+
+EditFlow(k; transform = NNlib.softplus,
+ κ = identity,
+ dκ = t -> one(t),
+ padding_token::Int = k + 1,
+ latent_token::Int = k + 2,
+ bos_token::Int = 0,
+ impl = nothing, # accepts EditFlowImpl | Symbol | String | nothing
+ ) = begin
+ impl_enum = _resolve_impl(impl)
+ EditFlow(k, transform, κ, dκ, padding_token, latent_token, bos_token, impl_enum)
+end
+
+"""
+ EditFlow_cubic(k; transform=NNlib.softplus, padding_token=k+1, latent_token=k+2, bos_token=0)
+
+Convenience constructor that uses a cubic scheduler:
+- κ(t) = t^3
+- dκ(t) = 3t^2
+
+Compatible with both scalar and broadcasted usage (the codebase typically calls `P.κ.(ts)` and also `P.κ(ts[j])`).
+"""
+EditFlow_cubic(k; transform = NNlib.softplus,
+ padding_token::Int = k + 1,
+ latent_token::Int = k + 2,
+ bos_token::Int = 0,
+ impl = nothing,
+ ) = begin
+ κ_cubic(t) = t^3
+ dκ_cubic(t) = 3 * (t^2)
+ impl_enum = _resolve_impl(impl)
+ EditFlow(k, transform, κ_cubic, dκ_cubic, padding_token, latent_token, bos_token, impl_enum)
+end
+
+
+EditFlow_alpha(k, alpha::Float32; transform = NNlib.softplus,
+ padding_token::Int = k + 1,
+ latent_token::Int = k + 2,
+ bos_token::Int = 0,
+ impl = nothing,
+ ) = begin
+ κ_alpha(t) = t^alpha
+ dκ_alpha(t) = alpha * (t^(alpha-1))
+ impl_enum = _resolve_impl(impl)
+ EditFlow(k, transform, κ_alpha, dκ_alpha, padding_token, latent_token, bos_token, impl_enum)
+end
+
+"""
+ EditFlow_constant(k; C=0.5, eps=1e-3, transform=NNlib.softplus,
+ padding_token=k+1, latent_token=k+2, bos_token=0)
+
+Create an `EditFlow` whose scheduler is constant in time:
+ κ(t) = C (clamped to (eps, 1-eps) for numerical stability)
+ dκ(t) = 0
+
+The definitions are broadcasting-friendly and work for scalars and arrays on CPU/GPU.
+"""
+EditFlow_constant(k; C=0.5, eps=1e-3, transform = NNlib.softplus,
+ padding_token::Int = k + 1,
+ latent_token::Int = k + 2,
+ bos_token::Int = 0,
+ impl = nothing,
+ ) = begin
+ Cc = clamp(float(C), float(eps), 1.0 - float(eps))
+ # Broadcast-friendly closures (scalar or array, CPU/GPU)
+ κ_const = t -> Cc .+ zero.(t)
+ dκ_const = t -> zero.(t)
+ impl_enum = _resolve_impl(impl)
+ EditFlow(k, transform, κ_const, dκ_const, padding_token, latent_token, bos_token, impl_enum)
+end
+
+
+# Random padding of latent tokens to align the lengths of the sequences pairs (z0, z1)
+# And afterwards batch the sequences with padding tokens into a single matrix (Z0, Z1)
+function align_and_batch(P::EditFlow,
+ x0s::Vector{<:DiscreteState},
+ x1s::Vector{<:DiscreteState};
+ rng=Random.default_rng())
+ @assert length(x0s) == length(x1s)
+ B = length(x0s)
+ ltok = P.latent_token
+ pad = P.padding_token
+
+ z0s = Vector{Vector{Int}}(undef, B)
+ z1s = Vector{Vector{Int}}(undef, B)
+
+ @inbounds for b in 1:B
+ v0 = collect(tensor(x0s[b]))
+ v1 = collect(tensor(x1s[b]))
+ if length(v0) < length(v1)
+ z0 = Vector{Int}(v0)
+ d = length(v1) - length(v0)
+ for _ in 1:d
+ pos = rand(rng, 0:length(z0))
+ insert!(z0, pos + 1, ltok)
+ end
+ z1 = Vector{Int}(v1)
+ elseif length(v1) < length(v0)
+ z1 = Vector{Int}(v1)
+ d = length(v0) - length(v1)
+ for _ in 1:d
+ pos = rand(rng, 0:length(z1))
+ insert!(z1, pos + 1, ltok)
+ end
+ z0 = Vector{Int}(v0)
+ else
+ z0 = Vector{Int}(v0)
+ z1 = Vector{Int}(v1)
+ end
+ z0s[b] = z0
+ z1s[b] = z1
+ end
+
+ maxlen = maximum(length.(z0s))
+ Z0 = fill(Int(pad), maxlen, B)
+ Z1 = fill(Int(pad), maxlen, B)
+ @inbounds for b in 1:B
+ lb = length(z0s[b])
+ Z0[1:lb, b] .= z0s[b]
+ Z1[1:lb, b] .= z1s[b]
+ end
+
+ return Z0, Z1
+end
+
+function interpolate_Z_elementwise(P::EditFlow,
+ Z0::AbstractMatrix{<:Integer},
+ Z1::AbstractMatrix{<:Integer},
+ ts::AbstractVector)
+ @assert size(Z0) == size(Z1)
+ L, B = size(Z1)
+ @assert length(ts) == B
+ pad = P.padding_token
+
+ Zt = similar(Z1)
+ @inbounds for j in 1:B
+ keep = clamp(P.κ(ts[j]), 0f0, 1f0)
+ for i in 1:L
+ z1 = Z1[i, j]
+ if z1 == pad
+ Zt[i, j] = pad
+ else
+ Zt[i, j] = (rand(Float32) < keep) ? z1 : Z0[i, j]
+ end
+ end
+ end
+
+ ltok = P.latent_token
+ filtered_cols = [filter(x -> !(x in (ltok, pad)), col) for col in eachcol(Zt)]
+ Xt= hcat(map(col -> vcat(col, fill(pad, L - length(col))), filtered_cols)...)
+
+ return Zt, Xt
+end
+
+function transition_mask_from_Xt(P::EditFlow, Xt::AbstractMatrix{<:Integer})
+ if P.impl == GAPWISE
+ return transition_mask_from_Xt_gapwise(P, Xt)
+ elseif P.impl == POSITIONWISE
+ return transition_mask_from_Xt_positionwise(P, Xt)
+ elseif P.impl == POSITIONWISE_REPARAM
+ return transition_mask_from_Xt_positionwise_reparam(P, Xt)
+ else
+ error("Unknown EditFlow implementation: $(P.impl)")
+ end
+end
+
+function transition_mask_from_Xt_positionwise(P::EditFlow, Xt::AbstractMatrix{<:Integer})
+ tokens = P.k
+ pad = P.padding_token
+ xt_len, B = size(Xt)
+ T = ones(Float32, 2*tokens + 1, xt_len, B)
+ for c in 1:B
+ for i in 1:xt_len
+ x = Xt[i, c]
+ @assert x != P.latent_token
+ if x == pad
+ T[:, i, c] .= 0
+ elseif x == P.bos_token
+ @assert i == 1 #should only be BOS at position 1
+ T[tokens+1:2*tokens+1, i, c] .= 0
+ else
+ # forbid sub-to-current-token only for valid tokens 1..K
+ if 1 <= x <= tokens
+ T[tokens + x, i, c] = 0
+ end
+ end
+ end
+ end
+ return T
+end
+# Drop-in replacement (renames ok): now returns (2K+1, L+1, B)
+function transition_mask_from_Xt_gapwise(P::EditFlow, Xt::AbstractMatrix{<:Integer})
+ K = P.k
+ PAD = P.padding_token
+ BOS = P.bos_token
+
+ L, B = size(Xt)
+ M = ones(Float32, 2K+1, L+1, B)
+
+ for b in 1:B
+ x = Xt[:,b]
+ # real length (incl. BOS), sites 1..L_b; gaps 1..L_b+1
+ Lb = count(t -> t != PAD, x)
+
+ # 1) mask padding columns for sites/gaps beyond sequence
+ # - inserts valid only on gaps 1..Lb+1
+ if Lb < L
+ M[1:K, (Lb+2):(L+1), b] .= 0f0 # extra gaps off
+ M[(K+1):(2K+1), (Lb+1):(L+1), b] .= 0f0 # sub/del beyond Lb off
+ else
+ # only the last pad gap (L+1) exists; keep it on for inserts, off for sub/del below
+ nothing
+ end
+ # sub/del never valid at the last gap column
+ M[(K+1):(2K+1), L+1, b] .= 0f0
+
+ # 2) per-site constraints
+ for i in 1:Lb
+ t = x[i]
+ # no self-sub, and typically no subs at BOS (policy)
+ if t == BOS
+ M[(K+1):(2K), i, b] .= 0f0 # block all subs at BOS
+ M[(2K+1), i, b] = 0f0 # block delete BOS
+ else
+ M[K + t, i, b] = 0f0 # block self-sub to current t
+ end
+ end
+ # 3) (policy) no pre-BOS insert (gap 1)
+ M[1:K, 1, b] .= 0f0
+ end
+ return M
+end
+
+function transition_mask_from_Xt_positionwise_reparam(P::EditFlow, Xt::AbstractMatrix{<:Integer})
+ tokens = P.k
+ pad = P.padding_token
+ bos = P.bos_token
+ xt_len, B = size(Xt)
+ ins_q_mask = ones(Float32, tokens, xt_len, B)
+ sub_q_mask = ones(Float32, tokens, xt_len, B)
+ ins_lambda_mask = ones(Float32, 1, xt_len, B)
+ sub_lambda_mask = ones(Float32, 1, xt_len, B)
+ del_lambda_mask = ones(Float32, 1, xt_len, B)
+ for b in 1:B
+ x = Xt[:,b]
+ Lb = count(t -> t != pad, x)
+ # Mask the padding
+ ins_q_mask[:, (Lb+1):xt_len, b] .= 0
+ sub_q_mask[:, (Lb+1):xt_len, b] .= 0
+ ins_lambda_mask[:, (Lb+1):xt_len, b] .= 0
+ sub_lambda_mask[:, (Lb+1):xt_len, b] .= 0
+ del_lambda_mask[:, (Lb+1):xt_len, b] .= 0
+ #Mask the BOS for sub and del
+ # forbid sub/del at BOS iff BOS present at i=1
+ if Lb >= 1 && x[1] == bos
+ sub_q_mask[:, 1, b] .= 0
+ sub_lambda_mask[:, 1, b] .= 0
+ del_lambda_mask[:, 1, b] .= 0
+ end
+ # sub_q_mask[:, 1, b] .= 0
+ # sub_lambda_mask[:, 1, b] .= 0
+ # del_lambda_mask[:, 1, b] .= 0
+ #Mask the self-substitutions
+ for i in 2:Lb
+ t = x[i]
+ if 1 <= t <= tokens
+ sub_q_mask[t, i, b] = 0
+ else
+ throw(ArgumentError("Invalid token: $t"))
+ end
+ end
+ end
+ return (ins_q_mask, sub_q_mask, ins_lambda_mask, sub_lambda_mask, del_lambda_mask)
+end
+
+function remaining_edits(P::EditFlow, Zt::Matrix{Int}, Z1::Matrix{Int}, Xt::Matrix{Int}, dense=false)
+ if P.impl == GAPWISE
+ return remaining_edits_gapwise(P, Zt, Z1, Xt)
+ elseif P.impl == POSITIONWISE
+ return remaining_edits_positionwise(P, Zt, Z1, Xt)
+ elseif P.impl == POSITIONWISE_REPARAM
+ return remaining_edits_positionwise_reparam(P, Zt, Z1, Xt)
+ else
+ error("Unknown EditFlow implementation: $(P.impl)")
+ end
+end
+
+# Compute the remaining edits for the EditFlow as a Matrix
+function remaining_edits_positionwise(P::EditFlow, Zt::Matrix{Int}, Z1::Matrix{Int}, Xt::Matrix{Int}, dense=false)
+ padding_token = P.padding_token
+ latent_token = P.latent_token
+ tokens = P.k
+ (_, batch_size) = size(Z1)
+
+ #filtered_cols = [filter(x -> x != latent_token, col) for col in eachcol(Zt)]
+ #batch_length = maximum(length, filtered_cols)
+ batch_length = size(Xt, 1)
+ pos = cumsum((Zt .!= padding_token) .& (Zt .!= latent_token), dims=1)
+
+ #Insert
+ #inserts = Z1.*(Zt .== latent_token)
+ inserts = Z1 .* Int64.((Zt .== latent_token) .& (1 .≤ Z1 .≤ tokens))
+ insert_edits = zeros(Float32, (tokens, batch_length, batch_size))
+ insert_indices = findall(!iszero, inserts)
+ insert_cols_to_update = pos[insert_indices]
+ insert_rows_to_update = inserts[insert_indices]
+ insert_samples_to_update = [idx[2] for idx in insert_indices]
+ for i in 1:length(insert_rows_to_update)
+ insert_edits[insert_rows_to_update[i], insert_cols_to_update[i], insert_samples_to_update[i]] += 1
+ end
+ dense_inserts = (insert_rows_to_update, insert_cols_to_update, insert_samples_to_update)
+
+ #Substitution
+ a = Zt .!= latent_token
+ b = Z1 .!= latent_token
+ c = Z1 .!= Zt
+ subs = Z1.*(a .& b .& c)
+
+ sub_edits = zeros(Float32, (tokens, batch_length, batch_size))
+ sub_indices = findall(!iszero, subs)
+ sub_cols_to_update = pos[sub_indices]
+ sub_rows_to_update = subs[sub_indices]
+ sub_samples_to_update = [idx[2] for idx in sub_indices]
+ for i in 1:length(sub_rows_to_update)
+ sub_edits[sub_rows_to_update[i], sub_cols_to_update[i], sub_samples_to_update[i]] = 1
+ end
+ dense_subs = (sub_rows_to_update .+ tokens, sub_cols_to_update, sub_samples_to_update)
+
+ #Del
+ dels = (Z1 .== latent_token) .& (Zt .!= latent_token)
+ del_edits = zeros(Float32, (1, batch_length, batch_size))
+ del_indices = findall(!iszero, dels)
+ del_cols_to_update = pos[del_indices]
+ del_samples_to_update = [idx[2] for idx in del_indices]
+ for i in 1:length(del_cols_to_update)
+ del_edits[1, del_cols_to_update[i], del_samples_to_update[i]] = 1
+ end
+ dense_dels = ((2*tokens+1).*ones(Int64, length(del_cols_to_update)), del_cols_to_update, del_samples_to_update)
+
+ if dense == true
+ return (dense_inserts, dense_subs, dense_dels)
+ else
+ return vcat(insert_edits, sub_edits, del_edits)
+ end
+
+end
+
+# Drop-in replacement (renames ok): now returns (2K+1, L+1, B)
+function remaining_edits_gapwise(P::EditFlow, Zt::AbstractMatrix{<:Integer}, Z1::AbstractMatrix{<:Integer}, Xt::AbstractMatrix{<:Integer})
+ K = P.k
+ PAD = P.padding_token
+ LAT = P.latent_token
+
+ L, B = size(Xt)
+ ins = zeros(Float32, K, L+1, B) # gaps
+ sub = zeros(Float32, K, L, B) # sites
+ del = zeros(Float32, 1, L, B) # sites
+
+ for b in 1:B
+ Ztb = Zt[:,b]; Z1b = Z1[:,b]
+ # real (site) tokens in Zt (BOS counts as real; PAD/LAT do not)
+ real = (Ztb .!= LAT) .& (Ztb .!= PAD)
+ sites_before = cumsum(real) # length(Ztb)
+ for r in 1:length(Ztb)
+ zt = Ztb[r]; z1 = Z1b[r]
+ # insert: LAT -> real
+ if zt == LAT && (z1 != LAT && z1 != PAD)
+ g = sites_before[r] + 1 # gap index in 1..L+1
+ if 1 <= g <= L+1
+ ins[z1, g, b] += 1
+ end
+ # delete: real -> LAT
+ elseif (zt != LAT && zt != PAD) && (z1 == LAT)
+ s = sites_before[r] # site index in 1..L
+ if 1 <= s <= L
+ del[1, s, b] += 1
+ end
+ # substitute: real -> real, different
+ elseif (zt != LAT && zt != PAD) && (z1 != LAT && z1 != PAD) && (zt != z1)
+ s = sites_before[r]
+ if 1 <= s <= L
+ sub[z1, s, b] += 1
+ end
+ end
+ end
+ end
+
+ # pad sub/del with a zero column at gap L+1 so we can vcat on channel axis
+ sub_pad = hcat(sub, zeros(Float32, size(sub,1), 1, size(sub,3)))
+ del_pad = hcat(del, zeros(Float32, size(del,1), 1, size(del,3)))
+ return vcat(ins, sub_pad, del_pad) # (2K+1, L+1, B)
+end
+
+function remaining_edits_positionwise_reparam(P::EditFlow, Zt::AbstractMatrix{<:Integer}, Z1::AbstractMatrix{<:Integer}, Xt::AbstractMatrix{<:Integer}, dense=false)
+ padding_token = P.padding_token
+ latent_token = P.latent_token
+ tokens = P.k
+ (_, batch_size) = size(Z1)
+
+ #filtered_cols = [filter(x -> x != latent_token, col) for col in eachcol(Zt)]
+ #batch_length = maximum(length, filtered_cols)
+ batch_length = size(Xt, 1)
+ pos = cumsum((Zt .!= padding_token) .& (Zt .!= latent_token), dims=1)
+
+ #Insert
+ #inserts = Z1.*(Zt .== latent_token)
+ inserts = Z1 .* Int64.((Zt .== latent_token) .& (1 .≤ Z1 .≤ tokens))
+ insert_edits = zeros(Float32, (tokens, batch_length, batch_size))
+ insert_indices = findall(!iszero, inserts)
+ insert_cols_to_update = pos[insert_indices]
+ insert_rows_to_update = inserts[insert_indices]
+ insert_samples_to_update = [idx[2] for idx in insert_indices]
+ for i in 1:length(insert_rows_to_update)
+ insert_edits[insert_rows_to_update[i], insert_cols_to_update[i], insert_samples_to_update[i]] += 1
+ end
+ dense_inserts = (insert_rows_to_update, insert_cols_to_update, insert_samples_to_update)
+
+ #Substitution
+ a = Zt .!= latent_token
+ b = Z1 .!= latent_token
+ c = Z1 .!= Zt
+ subs = Z1.*(a .& b .& c)
+ sub_edits = zeros(Float32, (tokens, batch_length, batch_size))
+ sub_indices = findall(!iszero, subs)
+ sub_cols_to_update = pos[sub_indices]
+ sub_rows_to_update = subs[sub_indices]
+ sub_samples_to_update = [idx[2] for idx in sub_indices]
+ for i in 1:length(sub_rows_to_update)
+ sub_edits[sub_rows_to_update[i], sub_cols_to_update[i], sub_samples_to_update[i]] = 1
+ end
+ dense_subs = (sub_rows_to_update .+ tokens, sub_cols_to_update, sub_samples_to_update)
+
+ #Del
+ #tmp = Z1 .== latent_token
+ dels = (Z1 .== latent_token) .& (Zt .!= latent_token)
+
+ #@assert tmp == dels "Assertion failed: tmp != dels"
+
+ del_edits = zeros(Float32, (1, batch_length, batch_size))
+ del_indices = findall(!iszero, dels)
+ del_cols_to_update = pos[del_indices]
+ del_samples_to_update = [idx[2] for idx in del_indices]
+ for i in 1:length(del_cols_to_update)
+ del_edits[1, del_cols_to_update[i], del_samples_to_update[i]] = 1
+ end
+ dense_dels = ((2*tokens+1).*ones(Int64, length(del_cols_to_update)), del_cols_to_update, del_samples_to_update)
+
+ if dense == true
+ return (dense_inserts, dense_subs, dense_dels)
+ else
+ return (insert_edits, sub_edits, del_edits)
+ end
+end
+
+
+function step(P::EditFlow,
+ Xt::DiscreteState{<:AbstractArray{<:Signed}},
+ hat,
+ s1::Real, s2::Real)
+ if P.impl == GAPWISE
+ return step_gapwise(P, hat, Xt, s1, s2)
+ elseif P.impl == POSITIONWISE
+ return step_positionwise(P, Xt, hat, s1, s2)
+ elseif P.impl == POSITIONWISE_REPARAM
+ return step_positionwise_reparam(P, hat, Xt, s1, s2)
+ else
+ error("Unknown EditFlow implementation: $(P.impl)")
+ end
+end
+
+@inline function pick_index(w::AbstractVector{<:Real})::Int
+ # treat negatives as zero; assert we have some mass
+ cs = cumsum(max.(w, zero(eltype(w))))
+ s = cs[end]
+ @assert isfinite(s) && s > 0 "pick_index: all weights ≤ 0 or non-finite"
+ u = rand() * s
+ return searchsortedfirst(cs, u) # 1..length(w)
+end
+
+
+function step_positionwise(P::EditFlow,
+ Xt::DiscreteState{<:AbstractArray{<:Signed}},
+ hat,
+ s1::Real, s2::Real)
+
+ @assert ndims(Xt.state) == 1 "EditFlow.step only supports 1D DiscreteState"
+
+ # Rates
+ pins, psub, pdel = part_output(P, P.transform(hat)) # (K,n+1,B), (K,n,B), (1,n,B)
+ ins = Array(pins[:, :, 1]) # (K, n+1) or (K, n)
+ sub = Array(psub[:, :, 1])
+ del = vec(Array(pdel[1, :, 1])) # (n,) <-- fixed
+
+ K, n = size(sub, 1), size(sub, 2)
+ @assert size(ins, 1) == K
+ @assert length(del) == n
+
+ # Ensure gaps shape (K, n+1)
+ ins_gaps = if size(ins, 2) == n + 1
+ ins
+ elseif size(ins, 2) == n
+ tmp = similar(ins, K, n + 1)
+ @inbounds for s in 0:n
+ pos = clamp(s, 1, n)
+ @views tmp[:, s + 1] .= ins[:, pos]
+ end
+ tmp
+ else
+ error("EditFlow.step: bad ins size $(size(ins))")
+ end
+
+ dt = float(s2 - s1)
+ x = collect(tensor(Xt)) # Vector{Int}
+
+ # Forbid self-substitutions
+ if n > 0
+ current_mask = zeros(eltype(sub), size(sub))
+ @inbounds for i in 1:n
+ tok = x[i]
+ if 1 ≤ tok ≤ K
+ current_mask[tok, i] = 1
+ end
+ end
+ sub .*= (1 .- current_mask)
+ end
+
+ # Optionally forbid editing BOS explicitly
+ if n > 0 && x[1] == P.bos_token
+ sub[:, 1] .= 0
+ del[1] = 0
+ end
+
+ # ---- site events (delete/sub) ----
+ to_delete = falses(n)
+ sub_to = zeros(Int, n)
+ @inbounds for i in 1:n
+ r_del = del[i]
+ r_sub_total = sum(@view sub[:, i])
+ r_tot = r_del + r_sub_total
+ if r_tot > 0 && rand() < (1 - exp(-dt * r_tot))
+ u = rand() * r_tot
+ if u < r_del
+ to_delete[i] = true
+ elseif r_sub_total > 0
+ sub_to[i] = pick_index(@view sub[:, i])
+ end
+ end
+ end
+
+ # ---- gap insertions (≤1 per gap) ----
+ ins_tok = fill(0, n + 1)
+ start_gap = (n > 0 && x[1] == P.bos_token) ? 1 : 0
+ @inbounds for s in start_gap:n
+ r_ins_total = sum(@view ins_gaps[:, s + 1])
+ #println("r_ins_total", ins_gaps[:, s + 1])
+ if r_ins_total > 0 && rand() < (1 - exp(-dt * r_ins_total))
+ ins_tok[s + 1] = pick_index(@view ins_gaps[:, s + 1])
+ end
+ end
+
+ # ---- build new sequence ----
+ result = Int[]
+ if ins_tok[1] != 0; push!(result, ins_tok[1]); end
+ @inbounds for i in 1:n
+ if !to_delete[i]
+ a = (sub_to[i] == 0) ? x[i] : sub_to[i]
+ push!(result, a)
+ end
+ if ins_tok[i + 1] != 0
+ push!(result, ins_tok[i + 1])
+ end
+ end
+ return DiscreteState(Xt.K, result)
+end
+
+function part_output(P::EditFlow, M::AbstractArray)
+ K = P.k
+ ins = M[1:K,:,:]
+ sub = M[K+1:2K,:,:]
+ del = M[2K+1:2K+1,:,:]
+ return ins, sub, del
+end
+
+# Utility: pick_index over nonnegative weights (1D)
+@inline function _pick_index1d!(rng::AbstractRNG, cs::AbstractVector{<:Real})::Int
+ s = cs[end]
+ @assert isfinite(s) && s > 0 "pick_index: total mass ≤ 0 or non-finite"
+ u = rand(rng) * s
+ return searchsortedfirst(cs, u)
+end
+
+# One CTMC Euler step over a single DiscreteState, using gap-wise insertions.
+function step_gapwise(
+ P::EditFlow,
+ hat, # your EditFlowModel (returns (2K+1, L+1, 1) logits)
+ Xt::DiscreteState{<:AbstractVector{<:Signed}},
+ t1::Real, t2::Real; # times, with dt = t2 - t1 > 0
+ rng::AbstractRNG = Random.default_rng(),
+ transform::Function = P.transform,
+)
+ @assert t2 > t1
+ x = collect(tensor(Xt)) # Vector{Int}
+ K = P.k
+ n = length(x)
+
+ # Build masked state for the model
+ lmask = trues(n) # all real positions valid
+ cmask = trues(n)
+ Xt_ms = MaskedState(DiscreteState(K, reshape(x, :, 1)), reshape(cmask, :, 1), reshape(lmask, :, 1))
+
+ # Model forward (gap-wise head)
+ R = transform(hat) # positive rates
+ ins = Array(R[1:K, :, 1]) # (K, n+1)
+ sub = Array(R[K+1:2K, 1:n, 1]) # (K, n)
+ del = vec(Array(R[2K+1, 1:n, 1])) # (n,)
+
+ # Enforce CTMC constraints: no self-sub, protect BOS
+ if n > 0 && x[1] == P.bos_token
+ sub[:, 1] .= 0
+ del[1] = 0
+ # also disallow pre-BOS insert (gap 1)
+ ins[:, 1] .= 0
+ end
+ # forbid self-substitutions
+ for i in 1:n
+ tok = x[i]
+ if 1 <= tok <= K
+ sub[tok, i] = 0
+ else
+ sub[:, i] .= 0 # non-vocab token → block subs at site i
+ end
+ end
+
+ dt = Float64(t2 - t1)
+
+ # -------- sample site events (delete or substitute) --------
+ to_delete = falses(n)
+ sub_to = zeros(Int, n)
+ for i in 1:n
+ r_del = max(del[i], 0.0)
+ r_sub_total = sum(@view sub[:, i])
+ r_tot = r_del + r_sub_total
+ if r_tot > 0 && rand(rng) < (1 - exp(-dt * r_tot))
+ u = rand(rng) * r_tot
+ if u < r_del
+ to_delete[i] = true
+ elseif r_sub_total > 0
+ # draw new token from sub[:, i]
+ cs = cumsum(@view sub[:, i])
+ sub_to[i] = _pick_index1d!(rng, cs)
+ end
+ end
+ end
+
+ # -------- sample gap insertions (≤1 per gap) --------
+ ins_tok = fill(0, n + 1)
+ for g in 1:(n + 1)
+ r_ins_total = sum(@view ins[:, g])
+ if r_ins_total > 0 && rand(rng) < (1 - exp(-dt * r_ins_total))
+ cs = cumsum(@view ins[:, g])
+ ins_tok[g] = _pick_index1d!(rng, cs)
+ end
+ end
+
+ # -------- build new sequence --------
+ result = Int[]
+ if ins_tok[1] != 0; push!(result, ins_tok[1]); end
+ for i in 1:n
+ if !to_delete[i]
+ a = (sub_to[i] == 0) ? x[i] : sub_to[i]
+ push!(result, a)
+ end
+ if ins_tok[i + 1] != 0
+ push!(result, ins_tok[i + 1])
+ end
+ end
+
+ return DiscreteState(Xt.K, result)
+end
+
+# Convenience: multi-step simulate from t=0→1 with a schedule of times `ts` (sorted)
+function rollout_gapwise(P::EditFlow, model, x0::DiscreteState, ts::AbstractVector; rng=Random.default_rng())
+ @assert issorted(ts) && first(ts) >= 0 && last(ts) <= 1
+ x = x0
+ for k in 1:length(ts)-1
+ x_tilde = collect(tensor(x)) # Vector{Int}
+ K = P.k
+ n = length(x_tilde)
+ # Build masked state for the model
+ lmask = trues(n) # all real positions valid
+ cmask = trues(n)
+ Xt_ms = MaskedState(DiscreteState(K, reshape(x_tilde, :, 1)), reshape(cmask, :, 1), reshape(lmask, :, 1))
+
+ hat = model([Float32(ts[k])], Xt_ms) # (2K+1, n+1, 1) logits
+ x = step_gapwise(P, hat, x, ts[k], ts[k+1]; rng=rng)
+ end
+ return x
+end
+
+# --- helper: robust slice for (K,L,1)/(K,L) -> (K,L) and (1,L,1)/(1,L)/L -> Vector ---
+@inline _KL(A) = ndims(A) == 3 ? Array(@view A[:, :, 1]) :
+ ndims(A) == 2 ? Array(A) :
+ error("Expected (K,L,1) or (K,L), got size $(size(A))")
+
+@inline _L(A) = ndims(A) == 3 ? vec(Array(@view A[1, :, 1])) :
+ ndims(A) == 2 ? vec(Array(@view A[1, :])) :
+ ndims(A) == 1 ? vec(Array(A)) :
+ error("Expected (1,L,1) or (1,L) or (L,), got size $(size(A))")
+
+"""
+One CTMC Euler step for POSITIONWISE_REPARAM.
+
+`hat` is a tuple (ins_q_logits, sub_q_logits, ins_lambda, sub_lambda, del_lambda)
+for the current sequence, with shapes (K,L,1)/(K,L) for logits and (1,L,1)/(1,L)/L for lambdas.
+Insertions are defined per *site* here: gap g=2..L+1 uses site g-1; gap 1 (pre-BOS) is blocked.
+"""
+function step_positionwise_reparam(
+ P::EditFlow,
+ hat, # (ins_q_logits, sub_q_logits, ins_λ, sub_λ, del_λ)
+ Xt::DiscreteState{<:AbstractVector{<:Signed}},
+ t1::Real, t2::Real;
+ rng::AbstractRNG = Random.default_rng(),
+)
+ @assert t2 > t1
+ dt = Float64(t2 - t1)
+
+ # unpack + shapes -> arrays on CPU (OK for sampling)
+ ins_q_logits, sub_q_logits, ins_λ_raw, sub_λ_raw, del_λ_raw = hat
+ ins_q = NNlib.softmax(_KL(ins_q_logits); dims=1) # (K,L)
+ sub_q = NNlib.softmax(_KL(sub_q_logits); dims=1) # (K,L)
+ ins_λ = P.transform(_L(ins_λ_raw)) # (L,)
+ sub_λ = P.transform(_L(sub_λ_raw)) # (L,)
+ del_λ = P.transform(_L(del_λ_raw)) # (L,)
+
+ x = collect(tensor(Xt)) # Vector{Int}
+ K = P.k
+ L = length(x)
+
+ # guard: empty sequence quick path
+ if L == 0
+ # Only allow a single "after last" insertion; reuse last-site rule -> none here; return as-is
+ return Xt
+ end
+
+ # --- forbid BOS edits and pre-BOS insert policy ---
+ if x[1] == P.bos_token
+ sub_q[:, 1] .= 0
+ sub_λ[1] = 0
+ del_λ[1] = 0
+ end
+
+ # --- forbid self-substitutions (zero prob, no renorm needed) ---
+ @inbounds for i in 1:L
+ tok = x[i]
+ if 1 <= tok <= K
+ sub_q[tok, i] = 0
+ else
+ # Non-vocab token at site i → block substitutions at this site
+ sub_q[:, i] .= 0
+ sub_λ[i] = 0
+ end
+ end
+
+ # -------- site events (delete or substitute) --------
+ to_delete = falses(L)
+ sub_to = zeros(Int, L)
+ @inbounds for i in 1:L
+ r_del = max(del_λ[i], 0.0)
+ r_sub_total = max(sub_λ[i], 0.0) * sum(@view sub_q[:, i])
+ r_tot = r_del + r_sub_total
+ if r_tot > 0 && rand(rng) < (1 - exp(-dt * r_tot))
+ u = rand(rng) * r_tot
+ if u < r_del
+ to_delete[i] = true
+ elseif r_sub_total > 0
+ # sample token ∝ sub_q[:, i]
+ cs = cumsum(@view sub_q[:, i])
+ sub_to[i] = _pick_index1d!(rng, cs)
+ end
+ end
+ end
+
+ # -------- gap insertions (≤1 per gap) --------
+ # gap g in 1..L+1; g==1 (pre-BOS) is blocked; use site (g-1) rates otherwise,
+ # and for g==L+1 reuse site L.
+ ins_tok = fill(0, L + 1)
+ @inbounds for g in 2:(L+1)
+ src = min(g - 1, L) # site index providing insertion rates for this gap
+ r_vec = (@view ins_q[:, src]) .* ins_λ[src]
+ r_tot = sum(r_vec)
+ if r_tot > 0 && rand(rng) < (1 - exp(-dt * r_tot))
+ cs = cumsum(r_vec)
+ ins_tok[g] = _pick_index1d!(rng, cs)
+ end
+ end
+ # explicitly block pre-BOS insert
+ ins_tok[1] = 0
+
+ # -------- build new sequence --------
+ result = Int[]
+ if ins_tok[1] != 0; push!(result, ins_tok[1]); end
+ @inbounds for i in 1:L
+ if !to_delete[i]
+ a = (sub_to[i] == 0) ? x[i] : sub_to[i]
+ push!(result, a)
+ end
+ if ins_tok[i + 1] != 0
+ push!(result, ins_tok[i + 1])
+ end
+ end
+
+ return DiscreteState(Xt.K, result)
+end
+
+
+#=
+@inline _KL(A) = ndims(A) == 3 ? Array(@view A[:, :, 1]) :
+ ndims(A) == 2 ? Array(A) :
+ error("Expected (K,L,1) or (K,L), got size $(size(A))")
+
+@inline _L(A) = ndims(A) == 3 ? vec(Array(@view A[1, :, 1])) :
+ ndims(A) == 2 ? vec(Array(@view A[1, :])) :
+ ndims(A) == 1 ? vec(Array(A)) :
+ error("Expected (1,L,1) or (1,L) or (L,), got size $(size(A))")
+
+function step_positionwise_reparam(
+ P::EditFlow,
+ hat, # (ins_q_logits, sub_q_logits, ins_λ, sub_λ, del_λ)
+ Xt::DiscreteState{<:AbstractVector{<:Signed}},
+ t1::Real, t2::Real;
+ rng::AbstractRNG = Random.default_rng(),
+)
+ @assert t2 > t1
+ dt = Float64(t2 - t1)
+
+ # unpack → arrays
+ ins_q_logits, sub_q_logits, ins_λ_raw, sub_λ_raw, del_λ_raw = hat
+ ins_q = NNlib.softmax(_KL(ins_q_logits); dims=1) # (K,L)
+ sub_q = NNlib.softmax(_KL(sub_q_logits); dims=1) # (K,L)
+ ins_λ = P.transform(_L(ins_λ_raw)) # (L,)
+ sub_λ = P.transform(_L(sub_λ_raw)) # (L,)
+ del_λ = P.transform(_L(del_λ_raw)) # (L,)
+
+ x = collect(tensor(Xt))
+ K = P.k
+ L = length(x)
+ if L == 0
+ return Xt
+ end
+
+ # --- κ-scaling to encourage growth over time ---
+ κt = clamp(float(P.κ(t2)), 0.0, 1.0)
+ ins_λ .*= κt
+ del_λ .*= (1 - κt)
+ # (sub_λ unchanged; keep neutral)
+
+ # --- BOS policy + small insert floor at first site (gap 2) ---
+ if x[1] == P.bos_token
+ sub_q[:, 1] .= 0
+ sub_λ[1] = 0
+ del_λ[1] = 0
+ λmin = eltype(ins_λ)(1e-3)
+ ins_λ[1] = max(ins_λ[1], λmin)
+ end
+
+ # --- forbid self-substitutions / non-vocab guards ---
+ @inbounds for i in 1:L
+ tok = x[i]
+ if 1 <= tok <= K
+ sub_q[tok, i] = 0
+ else
+ sub_q[:, i] .= 0
+ sub_λ[i] = 0
+ end
+ end
+
+ # -------- site events (delete or substitute) --------
+ to_delete = falses(L)
+ sub_to = zeros(Int, L)
+ @inbounds for i in 1:L
+ r_del = max(del_λ[i], 0.0)
+ r_sub_total = max(sub_λ[i], 0.0) * sum(@view sub_q[:, i])
+ r_tot = r_del + r_sub_total
+ if r_tot > 0 && rand(rng) < (1 - exp(-dt * r_tot))
+ u = rand(rng) * r_tot
+ if u < r_del
+ to_delete[i] = true
+ elseif r_sub_total > 0
+ cs = cumsum(@view sub_q[:, i])
+ sub_to[i] = _pick_index1d!(rng, cs)
+ end
+ end
+ end
+
+ # -------- gap insertions (≤1 per gap) --------
+ # gap g=1..L+1 ; g==1 (pre-BOS) blocked; use site (g-1), with L reused for g==L+1
+ ins_tok = fill(0, L + 1)
+ @inbounds for g in 2:(L+1)
+ src = min(g - 1, L)
+ r_vec = (@view ins_q[:, src]) .* ins_λ[src]
+ r_tot = sum(r_vec)
+ if r_tot > 0 && rand(rng) < (1 - exp(-dt * r_tot))
+ cs = cumsum(r_vec)
+ ins_tok[g] = _pick_index1d!(rng, cs)
+ end
+ end
+ ins_tok[1] = 0 # block pre-BOS insert
+
+ # -------- build new sequence --------
+ result = Int[]
+ if ins_tok[1] != 0; push!(result, ins_tok[1]); end
+ @inbounds for i in 1:L
+ if !to_delete[i]
+ a = (sub_to[i] == 0) ? x[i] : sub_to[i]
+ push!(result, a)
+ end
+ if ins_tok[i + 1] != 0
+ push!(result, ins_tok[i + 1])
+ end
+ end
+
+ # -------- BOS-only guard (rare fallback) --------
+ if length(result) == 1 && result[1] == P.bos_token
+ r_vec = (@view ins_q[:, 1]) .* ins_λ[1] # use first site’s insertion rates
+ if sum(r_vec) > 0
+ cs = cumsum(r_vec)
+ push!(result, _pick_index1d!(rng, cs))
+ end
+ end
+
+ return DiscreteState(Xt.K, result)
+end
+
+=#
+
+
+#=
+function edit_loss(P::EditFlow,
+ M::AbstractArray,
+ transition_mask::AbstractArray,
+ edit_multiplier::AbstractArray,
+ scheduler_scaling;
+ op_mask=nothing,
+ eps=1e-8)
+ R = P.transform(M)
+ OM = isnothing(op_mask) ? one(eltype(R)) .* ones(eltype(R), size(R)) : op_mask
+ term1 = sum(transition_mask .* (OM .* R); dims=(1,2))
+ scl = reshape(scheduler_scaling, 1, 1, :)
+ term2 = sum(scl .* edit_multiplier .* log.(R .+ eps); dims=(1,2))
+ return mean(term1 .- term2)
+end
+=#
+
+
+function edit_loss(P::EditFlow, M, transition_mask, edit_multiplier, scheduler_scaling; op_mask=nothing, eps=1e-8)
+ if P.impl == GAPWISE
+ return edit_loss_gapwise(P, M, transition_mask, edit_multiplier, scheduler_scaling; op_mask=op_mask, eps=eps)
+ elseif P.impl == POSITIONWISE
+ return edit_loss_positionwise(P, M, transition_mask, edit_multiplier, scheduler_scaling; op_mask=op_mask, eps=eps)
+ elseif P.impl == POSITIONWISE_REPARAM
+ return edit_loss_positionwise_reparam(P, M, transition_mask, edit_multiplier, scheduler_scaling; eps=eps)
+ end
+end
+
+"""
+ edit_loss(P::EditFlow, M, transition_mask, edit_multiplier, scheduler_scaling; op_mask=nothing, eps=1e-8)
+
+Loss matching the reference: mean(sum(transition_mask .* (op_mask .* R)) - sum(scheduler_scaling .* edit_multiplier .* log R)),
+where R = transform(M).
+Shapes:
+- M, transition_mask, edit_multiplier, op_mask: (2K+1, n, B)
+- scheduler_scaling: (1, B) or (B,) broadcastable to (1,1,B)
+"""
+function edit_loss_positionwise(P::EditFlow,
+ M, transition_mask, edit_multiplier, scheduler_scaling;
+ op_mask=nothing, eps=1e-8)
+
+ R = P.transform(M) # must be >= 0
+ # (A) Optional op mask to apply symmetrically
+ OM = isnothing(op_mask) ? one(eltype(R)) : op_mask
+
+ # (B) Sum of valid outgoing rates
+ term1 = sum(transition_mask .* (OM .* R); dims=(1,2))
+
+ # (C) Logs only of positive rates (avoid NaN/Inf)
+ R_logsafe = max.(R, eltype(R)(eps)) # clamp BEFORE log
+ logR = log.(R_logsafe)
+
+ scl = reshape(scheduler_scaling, 1, 1, :) # (1,1,B)
+ term2 = sum(scl .* (edit_multiplier .* OM) .* logR; dims=(1,2))
+
+ return mean(term1 .- term2)
+end
+
+
+function edit_loss_gapwise(P::EditFlow,
+ M, transition_mask, edit_multiplier, scheduler_scaling;
+ op_mask=nothing, eps=1f-8)
+
+ # 1) transform -> positiva satser
+ R = P.transform(M)
+
+ # 2) kapa hastigheter för att undvika Inf/NaN i både term1 och log-delen
+ # (justera RMAX vid behov, 1e3–1e4 funkar ofta bra)
+ RMAX = 1f3
+ R = clamp.(R, eps, RMAX)
+
+ # 3) valfri op-mask
+ OM = isnothing(op_mask) ? one(eltype(R)) : op_mask
+ mask = transition_mask .* OM
+
+ # 4) regularizer (sum av giltiga satser)
+ # -> per-batch summering: 1×1×B
+ term1 = sum(mask .* R; dims=(1,2))
+
+ # 5) data-del (log) – log säkert, redan kapat ovan
+ logR = log.(R)
+ scl = reshape(scheduler_scaling, 1, 1, :)
+ term2 = sum(scl .* (edit_multiplier .* OM) .* logR; dims=(1,2))
+
+ # 6) normalisera med "antal aktiva positioner" för stabil skala
+ active = sum(mask; dims=(1,2))
+ loss_per_batch = (term1 .- term2) ./ (active .+ 1f-8)
+
+ return mean(loss_per_batch)
+end
+
+
+#=
+function edit_loss_positionwise_reparam(P::EditFlow,
+ M, transition_mask, edit_multiplier, scheduler_scaling; eps=1e-8)
+ (ins_q_mask, sub_q_mask, ins_lambda_mask, sub_lambda_mask, del_lambda_mask) = transition_mask
+ (ins_q, sub_q, ins_lambda, sub_lambda, del_lambda) = M
+ # pre-softmax mask (safe -Inf with Float32 works; on some accelerators prefer -1e9f0)
+ #ins_q = NNlib.softmax(ins_q_logits .+ ifelse.(ins_q_mask .> 0, 0f0, negInf), dims=1)
+ #sub_q = NNlib.softmax(sub_q_logits .+ ifelse.(sub_q_mask .> 0, 0f0, negInf), dims=1)
+ # ins_q = NNlib.softmax(ins_q, dims=1)
+ # sub_q = NNlib.softmax(sub_q, dims=1)
+
+ # probs
+ ins_q = NNlib.softmax(ins_q; dims=1); ins_q .*= ins_q_mask
+ sub_q = NNlib.softmax(sub_q; dims=1); sub_q .*= sub_q_mask
+
+ ins_lambda = P.transform(ins_lambda); ndims(ins_lambda)==2 && (ins_lambda = reshape(ins_lambda, 1, size(ins_lambda,1), size(ins_lambda,2)))
+ sub_lambda = P.transform(sub_lambda); ndims(sub_lambda)==2 && (sub_lambda = reshape(sub_lambda, 1, size(sub_lambda,1), size(sub_lambda,2)))
+ del_lambda = P.transform(del_lambda); ndims(del_lambda)==2 && (del_lambda = reshape(del_lambda, 1, size(del_lambda,1), size(del_lambda,2)))
+
+ # regularizer (sum of *allowed* mass)
+ sum_ins_q = sum(ins_q; dims=1)
+ sum_sub_q = sum(sub_q; dims=1)
+ loss_term_1 = sum(ins_lambda .* ins_lambda_mask .* sum_ins_q .+
+ sub_lambda .* sub_lambda_mask .* sum_sub_q .+
+ del_lambda .* del_lambda_mask; dims=(1,2))
+
+
+ #loss_term_1 = sum(ins_lambda.* ins_lambda_mask + sub_lambda.* sub_lambda_mask + del_lambda.* del_lambda_mask, dims=(1,2))
+ scl = reshape(scheduler_scaling, 1, 1, :) # (1,1,B)
+
+ # ins_lambda = reshape(ins_lambda, 1, size(ins_lambda)...)
+ # sub_lambda = reshape(sub_lambda, 1, size(sub_lambda)...)
+ # del_lambda = reshape(del_lambda, 1, size(del_lambda)...)
+
+ ins_rate_log = log.(max.(ins_lambda .* ins_q, eltype(ins_lambda)(eps)))
+ sub_rate_log = log.(max.(sub_lambda .* sub_q, eltype(sub_lambda)(eps)))
+ del_rate_log = log.(max.(del_lambda, eltype(del_lambda)(eps)))
+
+ (ins_q_edits, sub_q_edits, del_lambda_edits) = edit_multiplier
+ loss_term_2 = sum(scl .* (ins_q_edits .* ins_rate_log), dims=(1,2))
+ + sum(scl .* (sub_q_edits .* sub_rate_log), dims=(1,2))
+ + sum(scl .* (del_lambda_edits .* del_rate_log), dims=(1,2))
+ return mean(loss_term_1 .- loss_term_2)
+end
+=#
+
+function edit_loss_positionwise_reparam(P::EditFlow,
+ M, transition_mask, edit_multiplier, scheduler_scaling; eps=1e-8)
+
+ (ins_q_mask, sub_q_mask, ins_lambda_mask, sub_lambda_mask, del_lambda_mask) = transition_mask
+ (ins_q_logits, sub_q_logits, ins_lambda, sub_lambda, del_lambda) = M
+
+ # q: post-softmax + mask (K,L,B)
+ ins_q = NNlib.softmax(ins_q_logits; dims=1) .* ins_q_mask
+ sub_q = NNlib.softmax(sub_q_logits; dims=1) .* sub_q_mask
+
+ # λ: transform -> (1,L,B)
+ ins_lambda = P.transform(ins_lambda); ndims(ins_lambda)==2 && (ins_lambda = reshape(ins_lambda, 1, size(ins_lambda,1), size(ins_lambda,2)))
+ sub_lambda = P.transform(sub_lambda); ndims(sub_lambda)==2 && (sub_lambda = reshape(sub_lambda, 1, size(sub_lambda,1), size(sub_lambda,2)))
+ del_lambda = P.transform(del_lambda); ndims(del_lambda)==2 && (del_lambda = reshape(del_lambda, 1, size(del_lambda,1), size(del_lambda,2)))
+
+ # term 1: sum of allowed exit rates (1,B)
+ sum_ins_q = sum(ins_q; dims=1) # (1,L,B)
+ sum_sub_q = sum(sub_q; dims=1) # (1,L,B)
+ loss_term_1 = sum(ins_lambda .* ins_lambda_mask .* sum_ins_q .+
+ sub_lambda .* sub_lambda_mask .* sum_sub_q .+
+ del_lambda .* del_lambda_mask; dims=(1,2))
+
+
+
+ # term 2: data term (1,B)
+ scl = reshape(scheduler_scaling, 1, 1, :)
+ (ins_q_edits, sub_q_edits, del_lambda_edits) = edit_multiplier
+ ins_rate_log = log.(max.(ins_lambda .* ins_q, eltype(ins_lambda)(eps)))
+ sub_rate_log = log.(max.(sub_lambda .* sub_q, eltype(sub_lambda)(eps)))
+ del_rate_log = log.(max.(del_lambda, eltype(del_lambda)(eps)))
+
+ loss_term_2 = sum(scl .* (ins_q_edits .* ins_rate_log); dims=(1,2)) +
+ sum(scl .* (sub_q_edits .* sub_rate_log); dims=(1,2)) +
+ sum(scl .* (del_lambda_edits .* del_rate_log); dims=(1,2))
+
+ return mean(loss_term_1 .- loss_term_2)
+end
+
+"""
+getlmask(P::EditFlow, Xt::AbstractMatrix{<:Integer})
+
+Build lmask of shape (xt_length, B) from padded Xt.
+"""
+function getlmask(P::EditFlow, Xt::AbstractMatrix{<:Integer})
+ padding_token = P.padding_token
+ return Xt .!= padding_token
+end
diff --git a/src/types.jl b/src/types.jl
index e3c30b1..e6a2126 100644
--- a/src/types.jl
+++ b/src/types.jl
@@ -52,6 +52,9 @@ UState = Union{State,MaskedState, Guide}
#This is for all Flow types where the mixture probabilities are directly defined, and the gen is done via probability velocities.
abstract type ConvexInterpolatingDiscreteFlow <: DiscreteProcess end #https://arxiv.org/pdf/2407.15595
+# Edit-based discrete processes (insert/substitute/delete)
+abstract type DiscreteIndelProcess <: DiscreteProcess end
+
struct InterpolatingDiscreteFlow <: ConvexInterpolatingDiscreteFlow
κ::Function
κ̇::Function