From 4932e8a45c05cc1529cf06aee704f36123ced843 Mon Sep 17 00:00:00 2001
From: "Daniel.Frisinghelli" <daniel.frisinghelli@eurac.edu>
Date: Thu, 27 Aug 2020 15:11:06 +0200
Subject: [PATCH] Ignore build files.

---
 docs/_build/doctrees/environment.pickle       |  Bin 377724 -> 132755 bytes
 docs/_build/doctrees/modules.doctree          |  Bin 6322 -> 0 bytes
 .../modules/pysegcnn.core.cli.doctree         |  Bin 6040 -> 0 bytes
 .../modules/pysegcnn.core.constants.doctree   |  Bin 12941 -> 0 bytes
 .../modules/pysegcnn.core.dataset.doctree     |  Bin 17598 -> 0 bytes
 docs/_build/doctrees/readme.doctree           |  Bin 3164 -> 0 bytes
 docs/_build/doctrees/source/api.doctree       |  Bin 28089 -> 32223 bytes
 docs/_build/doctrees/source/core.doctree      |  Bin 1950390 -> 0 bytes
 ...segcnn.core.dataset.Cloud95Dataset.doctree |  Bin 50588 -> 42912 bytes
 ...pysegcnn.core.dataset.ImageDataset.doctree |  Bin 50673 -> 43136 bytes
 ...ysegcnn.core.dataset.SparcsDataset.doctree |  Bin 49897 -> 42872 bytes
 .../pysegcnn.core.layers.Block.doctree        |  Bin 104055 -> 64670 bytes
 .../pysegcnn.core.layers.Conv2dSame.doctree   |  Bin 109971 -> 64676 bytes
 ...gcnn.core.layers.ConvBnReluMaxPool.doctree |  Bin 110358 -> 63988 bytes
 ...nn.core.layers.ConvBnReluMaxUnpool.doctree |  Bin 110901 -> 64568 bytes
 ...cnn.core.layers.ConvBnReluUpsample.doctree |  Bin 110588 -> 64414 bytes
 .../pysegcnn.core.layers.Decoder.doctree      |  Bin 106188 -> 71425 bytes
 .../pysegcnn.core.layers.DecoderBlock.doctree |  Bin 108113 -> 63031 bytes
 .../pysegcnn.core.layers.Encoder.doctree      |  Bin 104202 -> 72148 bytes
 .../pysegcnn.core.layers.EncoderBlock.doctree |  Bin 107793 -> 62871 bytes
 .../generated/pysegcnn.core.layers.doctree    |  Bin 18137 -> 0 bytes
 .../pysegcnn.core.models.Network.doctree      |  Bin 106918 -> 59230 bytes
 .../pysegcnn.core.models.UNet.doctree         |  Bin 115976 -> 77210 bytes
 .../generated/pysegcnn.core.models.doctree    |  Bin 11560 -> 0 bytes
 docs/_build/doctrees/source/install.doctree   |  Bin 16065 -> 0 bytes
 docs/_build/doctrees/source/main.doctree      |  Bin 13640 -> 0 bytes
 docs/_build/doctrees/source/modules.doctree   |  Bin 2650 -> 0 bytes
 .../doctrees/source/preprocessing.doctree     |  Bin 6209 -> 0 bytes
 docs/_build/doctrees/source/readme.doctree    |  Bin 2425 -> 0 bytes
 docs/_build/html/_modules/core/cli.html       |  264 -
 docs/_build/html/_modules/core/constants.html |  314 -
 docs/_build/html/_modules/core/dataset.html   | 1594 ----
 docs/_build/html/_modules/core/graphics.html  |  592 --
 docs/_build/html/_modules/core/layers.html    |  954 ---
 docs/_build/html/_modules/core/logging.html   |  282 -
 docs/_build/html/_modules/core/models.html    |  532 --
 docs/_build/html/_modules/core/predict.html   |  504 --
 docs/_build/html/_modules/core/split.html     |  885 ---
 docs/_build/html/_modules/core/trainer.html   | 1760 -----
 .../_build/html/_modules/core/transforms.html |  647 --
 docs/_build/html/_modules/core/utils.html     | 1481 ----
 docs/_build/html/_modules/index.html          |   15 +-
 .../html/_modules/pysegcnn/core/dataset.html  |  443 +-
 .../html/_modules/pysegcnn/core/layers.html   |  441 +-
 .../html/_modules/pysegcnn/core/models.html   |   76 +-
 docs/_build/html/_sources/modules.rst.txt     |   10 -
 .../modules/pysegcnn.core.cli.rst.txt         |   29 -
 .../modules/pysegcnn.core.constants.rst.txt   |   34 -
 .../modules/pysegcnn.core.dataset.rst.txt     |   36 -
 docs/_build/html/_sources/readme.rst.txt      |    4 -
 docs/_build/html/_sources/source/api.rst.txt  |   37 +-
 docs/_build/html/_sources/source/core.rst.txt |  109 -
 ...segcnn.core.dataset.Cloud95Dataset.rst.txt |    2 +-
 ...pysegcnn.core.dataset.ImageDataset.rst.txt |    2 +-
 ...ysegcnn.core.dataset.SparcsDataset.rst.txt |    2 +-
 .../pysegcnn.core.layers.Block.rst.txt        |    2 +-
 .../pysegcnn.core.layers.Conv2dSame.rst.txt   |    2 +-
 ...gcnn.core.layers.ConvBnReluMaxPool.rst.txt |    2 +-
 ...nn.core.layers.ConvBnReluMaxUnpool.rst.txt |    2 +-
 ...cnn.core.layers.ConvBnReluUpsample.rst.txt |    2 +-
 .../pysegcnn.core.layers.Decoder.rst.txt      |    2 +-
 .../pysegcnn.core.layers.DecoderBlock.rst.txt |    2 +-
 .../pysegcnn.core.layers.Encoder.rst.txt      |    2 +-
 .../pysegcnn.core.layers.EncoderBlock.rst.txt |    2 +-
 .../generated/pysegcnn.core.layers.rst.txt    |   43 -
 .../pysegcnn.core.models.Network.rst.txt      |    2 +-
 .../pysegcnn.core.models.UNet.rst.txt         |    2 +-
 .../generated/pysegcnn.core.models.rst.txt    |   33 -
 .../html/_sources/source/install.rst.txt      |   77 -
 docs/_build/html/_sources/source/main.rst.txt |   37 -
 .../html/_sources/source/modules.rst.txt      |    9 -
 .../_sources/source/preprocessing.rst.txt     |   21 -
 .../html/_sources/source/readme.rst.txt       |    4 -
 docs/_build/html/_static/alabaster.css        |  701 --
 docs/_build/html/_static/custom.css           |    1 -
 docs/_build/html/genindex.html                |   17 +
 docs/_build/html/modules.html                 |  131 -
 .../html/modules/pysegcnn.core.cli.html       |  137 -
 .../html/modules/pysegcnn.core.constants.html |  152 -
 .../html/modules/pysegcnn.core.dataset.html   |  161 -
 docs/_build/html/objects.inv                  |  Bin 755 -> 817 bytes
 docs/_build/html/py-modindex.html             |  227 -
 docs/_build/html/readme.html                  |  209 -
 docs/_build/html/searchindex.js               |    2 +-
 docs/_build/html/source/api.html              |   38 +-
 docs/_build/html/source/core.html             | 6848 -----------------
 .../pysegcnn.core.dataset.Cloud95Dataset.html |  114 +-
 .../pysegcnn.core.dataset.ImageDataset.html   |  127 +-
 .../pysegcnn.core.dataset.SparcsDataset.html  |  120 +-
 .../generated/pysegcnn.core.layers.Block.html |  202 +-
 .../pysegcnn.core.layers.Conv2dSame.html      |  191 +-
 ...ysegcnn.core.layers.ConvBnReluMaxPool.html |  195 +-
 ...egcnn.core.layers.ConvBnReluMaxUnpool.html |  193 +-
 ...segcnn.core.layers.ConvBnReluUpsample.html |  194 +-
 .../pysegcnn.core.layers.Decoder.html         |  208 +-
 .../pysegcnn.core.layers.DecoderBlock.html    |  191 +-
 .../pysegcnn.core.layers.Encoder.html         |  214 +-
 .../pysegcnn.core.layers.EncoderBlock.html    |  191 +-
 .../generated/pysegcnn.core.layers.html       |  283 -
 .../pysegcnn.core.models.Network.html         |  178 +-
 .../generated/pysegcnn.core.models.UNet.html  |  225 +-
 .../generated/pysegcnn.core.models.html       |  256 -
 docs/_build/html/source/install.html          |  278 -
 docs/_build/html/source/installation.html     |    4 +
 docs/_build/html/source/main.html             |  300 -
 docs/_build/html/source/modules.html          |  300 -
 docs/_build/html/source/preprocessing.html    |  247 -
 docs/_build/html/source/readme.html           |  210 -
 docs/_build/html/source/requirements.html     |    1 +
 docs/conf.py                                  |   12 +-
 docs/source/api.rst                           |   37 +-
 .../pysegcnn.core.dataset.Cloud95Dataset.rst  |    2 +-
 .../pysegcnn.core.dataset.ImageDataset.rst    |    2 +-
 .../pysegcnn.core.dataset.SparcsDataset.rst   |    2 +-
 .../generated/pysegcnn.core.layers.Block.rst  |    2 +-
 .../pysegcnn.core.layers.Conv2dSame.rst       |    2 +-
 ...pysegcnn.core.layers.ConvBnReluMaxPool.rst |    2 +-
 ...segcnn.core.layers.ConvBnReluMaxUnpool.rst |    2 +-
 ...ysegcnn.core.layers.ConvBnReluUpsample.rst |    2 +-
 .../pysegcnn.core.layers.Decoder.rst          |    2 +-
 .../pysegcnn.core.layers.DecoderBlock.rst     |    2 +-
 .../pysegcnn.core.layers.Encoder.rst          |    2 +-
 .../pysegcnn.core.layers.EncoderBlock.rst     |    2 +-
 .../pysegcnn.core.models.Network.rst          |    2 +-
 .../generated/pysegcnn.core.models.UNet.rst   |    2 +-
 125 files changed, 1235 insertions(+), 23183 deletions(-)
 delete mode 100644 docs/_build/doctrees/modules.doctree
 delete mode 100644 docs/_build/doctrees/modules/pysegcnn.core.cli.doctree
 delete mode 100644 docs/_build/doctrees/modules/pysegcnn.core.constants.doctree
 delete mode 100644 docs/_build/doctrees/modules/pysegcnn.core.dataset.doctree
 delete mode 100644 docs/_build/doctrees/readme.doctree
 delete mode 100644 docs/_build/doctrees/source/core.doctree
 delete mode 100644 docs/_build/doctrees/source/generated/pysegcnn.core.layers.doctree
 delete mode 100644 docs/_build/doctrees/source/generated/pysegcnn.core.models.doctree
 delete mode 100644 docs/_build/doctrees/source/install.doctree
 delete mode 100644 docs/_build/doctrees/source/main.doctree
 delete mode 100644 docs/_build/doctrees/source/modules.doctree
 delete mode 100644 docs/_build/doctrees/source/preprocessing.doctree
 delete mode 100644 docs/_build/doctrees/source/readme.doctree
 delete mode 100644 docs/_build/html/_modules/core/cli.html
 delete mode 100644 docs/_build/html/_modules/core/constants.html
 delete mode 100644 docs/_build/html/_modules/core/dataset.html
 delete mode 100644 docs/_build/html/_modules/core/graphics.html
 delete mode 100644 docs/_build/html/_modules/core/layers.html
 delete mode 100644 docs/_build/html/_modules/core/logging.html
 delete mode 100644 docs/_build/html/_modules/core/models.html
 delete mode 100644 docs/_build/html/_modules/core/predict.html
 delete mode 100644 docs/_build/html/_modules/core/split.html
 delete mode 100644 docs/_build/html/_modules/core/trainer.html
 delete mode 100644 docs/_build/html/_modules/core/transforms.html
 delete mode 100644 docs/_build/html/_modules/core/utils.html
 delete mode 100644 docs/_build/html/_sources/modules.rst.txt
 delete mode 100644 docs/_build/html/_sources/modules/pysegcnn.core.cli.rst.txt
 delete mode 100644 docs/_build/html/_sources/modules/pysegcnn.core.constants.rst.txt
 delete mode 100644 docs/_build/html/_sources/modules/pysegcnn.core.dataset.rst.txt
 delete mode 100644 docs/_build/html/_sources/readme.rst.txt
 delete mode 100644 docs/_build/html/_sources/source/core.rst.txt
 delete mode 100644 docs/_build/html/_sources/source/generated/pysegcnn.core.layers.rst.txt
 delete mode 100644 docs/_build/html/_sources/source/generated/pysegcnn.core.models.rst.txt
 delete mode 100644 docs/_build/html/_sources/source/install.rst.txt
 delete mode 100644 docs/_build/html/_sources/source/main.rst.txt
 delete mode 100644 docs/_build/html/_sources/source/modules.rst.txt
 delete mode 100644 docs/_build/html/_sources/source/preprocessing.rst.txt
 delete mode 100644 docs/_build/html/_sources/source/readme.rst.txt
 delete mode 100644 docs/_build/html/_static/alabaster.css
 delete mode 100644 docs/_build/html/_static/custom.css
 delete mode 100644 docs/_build/html/modules.html
 delete mode 100644 docs/_build/html/modules/pysegcnn.core.cli.html
 delete mode 100644 docs/_build/html/modules/pysegcnn.core.constants.html
 delete mode 100644 docs/_build/html/modules/pysegcnn.core.dataset.html
 delete mode 100644 docs/_build/html/py-modindex.html
 delete mode 100644 docs/_build/html/readme.html
 delete mode 100644 docs/_build/html/source/core.html
 delete mode 100644 docs/_build/html/source/generated/pysegcnn.core.layers.html
 delete mode 100644 docs/_build/html/source/generated/pysegcnn.core.models.html
 delete mode 100644 docs/_build/html/source/install.html
 delete mode 100644 docs/_build/html/source/main.html
 delete mode 100644 docs/_build/html/source/modules.html
 delete mode 100644 docs/_build/html/source/preprocessing.html
 delete mode 100644 docs/_build/html/source/readme.html

diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle
index b5d2a32cc7b84de76609c5e82123a94be3160a1f..8177ee83cc892e37ca93cbc2fa2760d075755b87 100644
GIT binary patch
literal 132755
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
GHU9;f-=JIo

literal 377724
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
Q$fi@_>E!8jy3_ps0d6<Gwg3PC

diff --git a/docs/_build/doctrees/modules.doctree b/docs/_build/doctrees/modules.doctree
deleted file mode 100644
index f4b5ab1c6821b4bd1146fc514f26bd0e9cf83af2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6322
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

diff --git a/docs/_build/doctrees/modules/pysegcnn.core.cli.doctree b/docs/_build/doctrees/modules/pysegcnn.core.cli.doctree
deleted file mode 100644
index e81222aa7975321050fa44856af1818779d651f1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6040
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
TK{h$K?CQRnwIDs{<9_>p55((w

diff --git a/docs/_build/doctrees/modules/pysegcnn.core.constants.doctree b/docs/_build/doctrees/modules/pysegcnn.core.constants.doctree
deleted file mode 100644
index f7ef0115fbb77442bba1a7026cb3ebc36d90736a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 12941
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
D<F7ja

diff --git a/docs/_build/doctrees/modules/pysegcnn.core.dataset.doctree b/docs/_build/doctrees/modules/pysegcnn.core.dataset.doctree
deleted file mode 100644
index 750417c49169527f3062f7259bc39aa8fe1e65a0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17598
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
C4I+&I

diff --git a/docs/_build/doctrees/readme.doctree b/docs/_build/doctrees/readme.doctree
deleted file mode 100644
index a30cca3727e1fd6192fd34b4fad6b7aefd97bf08..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3164
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

diff --git a/docs/_build/doctrees/source/api.doctree b/docs/_build/doctrees/source/api.doctree
index ddc9fbb6751ea5f248a723f91a03c3bcea5d78fe..e95d50af9bdf74e2cc1ed8fe7def65694ec5bfc3 100644
GIT binary patch
delta 6876
zcmcIpdvH|c73bb;cJD3;5Xc4zdE6wB7un5&JP09yNO*~aM+ihQZZ?~n++8=jaqlh|
zEJo{yVO$Y83yiPPX;JEkt;kH(c4|i)tWpI!bZQ;N%4qGwvD!cCI7OxBeBa)?*-dC2
z+rseOyXQOioZol8^E=;zm);fra9K#d({$*!drqY1TFPgxQ36WH>ybTvx27ptOttjJ
z)U0T#99CL-1Pzu;^XItbK2Jmo2Z!YWci62dVR;#}S=+%TWeWMEF~cp#?up$M+Y>8S
z)1yozxZwsVe|GoOU!IYsSIkJZIl(|m&p~U&%oGtcTTkc)9C1)Fw>lq3lHVJPrf8qE
z+xnyob$Nx3u$w@ybj!&I<iVidAKc{)49RX;3%dgY?$Cfd;0-CBa4<A#)54*MCmabW
zPCaJK&W8WOjuAB9uY_sS)EwVw=*(_N&sB5O<8XibQnPwo71T61;aDs#Zh(Sqg}uEt
z{No8CiukylU2&+Zf*pK%Y_@B0miPqYphAhkta69Ks=TpZQ$jo4VQ(;iU88<QpH~fj
zZogId2pl=<#E%4UZJ!GVa_Zpyri|H>oxyuKvej@6!rZ(@vxtMBbh=Itwa*Y`MGLNi
z8t%%>5vIe6yk(*!Lanm^X52Jiw2P3{a4oEBo(X%3C0k;U&~{CS&;SoE$`MT>{C#O@
zW*NCHUoT+%1Ts(|ej`9l<ASm87zJZ~o4;!uoh+MYGCug430{t`iGzKQCYpn-XJCbI
zpr)u0Mw(3Uc#}oEEZ_)=VZ{~;PDD-7V)2pyd$u%-7X>)ss+i6bLM`>ZC%|W0Ho!=0
z5uDGGN)qvjCqc~ZdjVbb#yWkw5WwD;8)~<fi#`#}EQC9^T5JhZkX15g(aa%U7#w<G
zNbpJT(rX4Bo88(rt7}B@cn2p}lF1#3G~dr-5fx!$b`{htH;wHh3Ff$3s+M6~7DoCf
z5H*(SgQs(FSdoJxO2DB7BO#9>dxzaai6nN)D<h$h5(xW8tK_h%BzSGpM%*5yKNt!q
z@^Hi-_G%;W#GDdU4o1R`;GhGQ9sR-Emg@ZeU%Q9>a~cF0s<LyfkMck~Oo6C3mtlVF
z6XCx0R!NTs<9z)R;(Yq^#Cd2h&V_b+!92NtR9+hyQWZ@umDjpQ@mXG1Q(IpFF8f>J
zOCmUP*3!eZ{W>_6vm^Uma+S==ccFG}z3>6!+{Fav{>nL5bWNX#o{3@a@TC2UOz@=r
z9cS1D5gAr2EQ7pxg?WUiZ%RmgE@+w8Bxa;RcwU=ehZ<+0Eout5hn1KwKMmfSw|8bn
z+O%m=DWqsY|4wBf2CaoP0g_=NjOk@0dd=0$>r-W)(*1-*<thpoc+5j*;f--r(W~hl
zh?c40@QAjwx_Z~HUC!Zw5wFt|9ImdbX{vM7*EQEwH{##==9;EhL|v%ffre=mzS1;s
z%efSR+M<GkO-tgD6|CsBQp7N#*dYIT5w0w1gooz$+I#Wilv(RdgXwwoVt*R6=d}nf
zg3U^$KaG{j%Xw~n+IFO2VXPH;n2+u>nkx7rf48_l4MGJS!V&t^n1{#H;Dds#mi=+G
zEroTY7cAT@Jj+~I<;_MX4Fx+1^XCmx#)(8;+^73W8IS%G3mPS5ZBd>0Q;}7)=cyD`
zX6gx#HSL6mHEko57LVF4BbvQfyS_?;s;v(3Z@31svL#)gq)%zt8R=Klxm0WC;o3h-
zi<hM->X^|tp^y~_3n5&x*P3TSTRFa5lU|u-%_T{qGSz`#DFF9^BCCU|E=s7DC#yEV
zuNU~NEnKac)auPmXuRCSD6VTWiZ?bQ#S6rqLnmjK9u@?JmSC~R#7K+}BJuO(>+HM9
zSTc!sn_yN&r7#A+X_x~aR8<Jy!#9=@!akVQuoAwg*e;@Z<gsuYc9ms3LPj`^Be1!t
zQV2nHV+s7Ja-H-n2m1_MYBWCj5$T8_Q&NfsO_-wl>}MzAIctK)s;Y$x2A=Z<o{J36
zxZ@@r&zlU-X9+xSFg&j@Ja;%Fl90}(<H|%lUokwdO@XHozN~iJi|L!>7!{{Opr%nM
zgG;M;j27S<XH9K7V@+SJM+YTiUs=XVvciLukAmWZ>m@Naol&T_?ry1@1M9-BQn-0h
zt^V<*3A%dD(|V5a`pM!)>^mo8+nElo`X$2c_#wx38@_RD_Yk&Yy6G^=%QB86aNVl=
z3J|WRrKdTjV<=9-baaAV3MMKu?>BkuXC~u1lMdUKGzsVMV~*=heB-#@;W1m+JfLHH
z9s9~MK1pCZt@}L1VkUIJiPB0qP<GAq#J<^(*-@6*9DL1(ahaLil*o-QCzwnbhW?YP
z3$g{P3mmP<h6lEk37c8=opWVm>U_frv&lpi=H$c6@`U0RGcPgA;?LIjvn~EyZl=;B
zIN_Dmg>cSg!A+BtVynHaHMLAMurhJHZKL%@w1cGYF&h=7n<R;f(g7XI?-vKnaAA3e
z5JWd6aK7F|g7y`~^iWoG2;ZM5zp&zaB;VX#Z(fb2yUnbg=w?|xSyD?|hLa1f-7bj7
z&8&>zgUZOuYv#Zm>n*UTqt$+vkR(&(tQq!n)FORfS<R>YJR3Oe#V?u}ReY;%7STM_
zlQ*%iG}HGPnc-Y{18Ub)im#br#p+Q>u&|+DL9OljCtv9b`kWCvUNy4?@8vby?Zxy>
zGNfV)RIaTR%Ph3ui3=>o;h@$M2b2TV8!b@3u08HWlr8K?u#$|$Nlc$rh`AO-whSt+
zYqfTBbX}ynka3ugO5DU$1>9!25*zY3#BVw&dQ0s)C&S!nfxeA7@ZtI#@pcaNHUp|~
z4?Nei1%in9&Q%srHZ9YUhB?wB38c4jqyY;nHZ7ay!Y?;0wLZ<!9-D;rC`TKZ8tn%A
znaN1c5Yj5~97p+P0_8gf$}3$G3~p-CQNGSmev&|Wnxj0Wqugx$nj^f-RgWfe;!BS3
zR4PI}1BkVloXA??X_j`x+b3Dt5pVUpM&2GZpZsh~iICeO#W@>)w#J`r65A#?C4HNa
z{4pHbdP^!%I~Y-&-HWX~Xaw1`O)`kuMUn(jyWqk0CP^1Enl;xE&4k_1wry3t=JyV%
zc-)YOg9CUXQU>ruGU8W;@eIOG*}*}%+tG;^C*FX(X>@Ba<Wbo=ACVYA@!{Hj#D0Xl
zCNtoO1k-z}#78B@fQKZ50Z-vbdma%H25r+1Ni6GMBm+F_50Ywy_<+Q6>Ej#Pt!MZs
zUnf<b_3@8S8>;%e5Hq6^V`kNkHQAp`#`Ou@yQ5P4oWuGw0qdU<Bj)f;+jMAu;m|Uy
z2DFd4zYiI-o~7;bw+UY#i(j8>LIn9Sy&UhZN~f>^hkFaMr|fvScdnRcg|~ZK#D!K0
zsIe1vSYg@C)h&6575DAarmYw75Rw(mNOEedS1EGLAhb#$#GP^GaAGRvk&_A$$D0yg
z{U^}?Q-HR{A&G5`1C+;=nR><{0fr^EHE!w~vS|p9w#H#A%lSd8p7X1d^eNuBHCCq^
zhbZ&)-oP!Iak|xi8Us?zIEFDYSDJ0Z*MvECG<QLc`^@Zx7#BL=9K=NHV@mK`|9r^o
ze{lA(30)q&>!sN*PY@64;`wmc<C)!nL(z?SjjkDoole<xJzl_R?yzGCINgn7e*M?-
zTf+{`<5dD4#id0?MuMTRYXpz~u8`t)hm`@BCm3k0Dft#!{OD*L9IS?m2{(zlaF$~U
zN(=F7s|f!ch~5qL?wbD#C_Nm077m=mcp1W(1Y;&QP=LC|u)cT$ir-PU)F$H}{d}s$
z<xWL&JH3H$^)98qS{GIido>Mj{xn14s7r~2P1nVq#3fL&ltMAaW6}KG{py1a{=31h
zrom2iydSGb9`}Dbm$TYx%y*W`?ob>m-Jm$=0%gKr?Yt8&SXg)bf@NX~_*&CuC6YJ9
zlXv<+PwFz$1=>J|P<Qgh0k0_L+fJ4Y9ZXwdM@qP(S8>uC^Hs5a$>R@31{}=|F%%sk
z5v=g!+wsS<tUo>C2q<Cd#5#7xmp}F;6|R3!la0G)UlwhlA5$Op?Zsod?`}G)UsB)q
zWl*1$n$Jn~Q);&0qV3yA%_b~dz75p;nL7SR&0%VQnjcW}I5j_}<{4^!M$HS@jQL)p
z*H@{zK+Sn-KA`3zHj${6E`GwJBly1#cwF}p+)f6yQ+;flq3l#IjWd9q3|uDz*2zG1
zGC-XS%s2xw&OnSa0ORO;Y}&MO=6IYr9gnE<$PEQVUBsg?pgyd|cqopm@2kJ(aiA*&
z9tS$}^El9<fyaTiAv_LL5P2N#r$MneJVb9S4o_ClD+R)Lf*KZwU(g$i!x?&`IQZVS
zo(%hoggND^H9A8Z)xyfKYgo}VtYYw1#{BEB4%03mD_Xr4V-@ma)t1BV&=Bq)ij5*w
zEPFLM5Dd#9Wl+J}PLDD$;Vi{U`F%EA>KB-DeB(A+=9;7Fer2cPkF6J?CYps<)U>X1
z^~PA#%<oZSYFX5T-jvvSKQhy|*M^hU@4MFqSvzvq8>ng~qe>KvZvpEm9o7#StcFRj
Sd{3a`DL@4ipcFVXyx?D!D{adF

delta 4536
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
MKD(5_>xa_+2PJrDng9R*

diff --git a/docs/_build/doctrees/source/core.doctree b/docs/_build/doctrees/source/core.doctree
deleted file mode 100644
index 4284a31b29f3c1dcf035cddd700c98f325eec1d3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1950390
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%0A%gfAzto(P2k$f>2
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

diff --git a/docs/_build/doctrees/source/generated/pysegcnn.core.dataset.Cloud95Dataset.doctree b/docs/_build/doctrees/source/generated/pysegcnn.core.dataset.Cloud95Dataset.doctree
index 0d580be980e1cdecbb3dd9284ecf7a3905bc9ab3..5ef86132fb7c28b8990bc6e08b74291855adb746 100644
GIT binary patch
literal 42912
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

literal 50588
zcmeHw4Uinib>89U4tEFO0Fn|C=>U2_QRITe?LnkzkuX7p1}R$v3G>&2h(-41cIR$p
zu(z|CnFS7_7=g0o5YEIdTWgt?ZCbV!MRFo0VjMd^N{NoFC~_jFWJPjRuEYtIvaHyt
zIF3|yT#72+>+YH9-tC>~y#;Zg%B&*xX6E(l*YCaly8HFt#qB@+lb@Mj|0R2(j_bA8
zt9G;54w_EXOQxGaqr2v`<KFvwho0#@-K!)sp?y9Ix?#iVB@>`%xL&InI_=(>UNT4I
zvDb>KBK?lYX~bU8&XT*6?v%UZOt0e3B$Kfhw;btHa%1O0<g7N@?P?<koodsL?Z}C%
z$6G<SdDk8H@y8yeNAm5DJL@EuVXF7_nEVjnx@4+jL*lsSUgK_Yw<S}eJSUUwEwAnL
zPIi~=WY&)3&|B`t&;ylwo7aq}j5``FJBsiUe^0jUHU8Ihv)joZmhHyb&{-jxZn7h`
zSLsvF-Q&)?yC_F@fAWswM{D<YL%UJC?Z|CMYO7vcOAB9v7NZ)MskZ90ozRY*X7;&A
zH`OpgsScdj+Ff=hl1Z=Kbk-#WbKSewqdcw!CEkGlZ^ZvM;r|Mi4N3_;R-y{D;<Z;{
zpJY+hzg1xxu)MaFO00-<$kZb4)XBJKcimgu!?|Kkx(A?s2)`W;*cgz#f-iIQr5<_E
zYTOMK2YQbxY9$PUxZd=_!&WzP>dSV!867))=CB1Hb->|W&asn0+c|7??B=nz+N}tG
zuEzBaOz(v4V>ef-w;WoHYqe_Zt=xRrih?js$s)&T9y<a~q1}#Ff^dx(A7Z{qGVWnA
z+U<4_+kF)vnd186e!MSx%pG(J>Ue<r30H?b++;KBYptVE$ENBy-3gt@3C}q_QtA(Y
z%YDMzoW{|bGsN3cBi5+S)zUiGxp0)+5bn@kwSpDBsRwGNu-z_RdcX+zeF`1!WU?>K
zO!1g%s)}KsRn?p^Q;mDdeFy2`bgl>Y$<(`Mn1ub}&8hB_iq-#G6=!WUan9<*xt56o
zRD!<XdMyvtSW;VXh5a~lV_wxVxn!B9Q<=DyCX(H(45*g%ezo?I?o09)swyu5cokPq
zwzPY;3{hmzzYPuka6hF?lv@575Izksc`t9e;D5Vh7!aj=Hv2l0eN8Pdy-_9o<$?V5
zaz4+n?3zq9L5I*h2xU!fIhJOJztn7A?9V3I5)5Yak5Nv_XeOER+N=eWd}r%vfIGFA
z`x5$7<^Smc{;=YT-EGD7b9SrisCgyVMcqyZAXtyq>@a?3H=xGx64~T8xd@J8Ju{ok
zsbD;4mF#<3j+y+8TAcsfUmRC0K<YhTfwDf4nY}>&e>}kOUk$h;X`dMW>x|)cYE)8T
z`GYFw{~ciaI||zpMI*P3D0(Jq<py-T4WCkh+24x1{<T{sCI&>-s@9)lq(<8HEgf5}
zf>XA+jwe}joyshpRH>^v_M<3T<hl`EziwzZVnFw^IcZuP`ITCx@7I+{Z;9h0SmFsC
zTfHR&+uRa!YBwn@L;q{F91UHDBiV+_u@T$M=KZ(<V{E5yX%YB?D)_r~g6j>iK7s*$
zOvhGl0KqmlfI(GwPRD*Eb@N;|qV6f)Ro18)UFclZ^q{Kx6FQ;ws{Z&0s{WLYtzOlF
zZLaDqM^b_Dmn!Y&b!<mcG0$xyD&DP(LIyNFn}1HlmtU#n_(NSe^jd#;1g(EV$5yX(
z!8X@=Q5VMFx>eIQjih&;pRwM{37<lbK#aWd5y$qR-MS!k`@~p$BH7h(+D(kI>gxy@
z3=(8&5DCzGKFwnTeVsY~W{oD2-RC^#d;`&(1#}G04%!hNH~&UWLb>mj?0{tPg$@ld
zQ+7QBf}E9Rux5MhUa~EUo4sTw-Z<->me=s&-X%s5+u^Dc_mb=DYeBQya-zj_1h`1U
z%|$WXL?{JmJ-|VbOfkNVUUCO7=3*8C$<nH$$G$-uI(hyLC=m+wU1bH^4spX?vfYi>
zS~O_(53q!(_4w#pGWhq}12K~+Ua(&B+O%YfbSN1c?)TiOWO}9BYVlA|KwZ)AbN7>f
zoY(??c?*pq*<gVWo*O|smg8=6;0ztP&|VGgjw`uKa{M?2rYyuFtk`v|C8m~zyY5)3
zTSCj$@&#+@p}@6$3_{wTb(8g&4cPUp3dNufE!Fuzyn>+uhP*Pf9P0+YK+S)Xl*YnZ
zB6>5!Z0{h(hOmS*7TGBYl_Jq}DyNi3{tn!|QX?{z`tJlCbDnPK^^*JDIPOG87Z(v(
zbGys1$=c#$7)N)*hl0hs?pWZt-rHWde;s;`5Tjg(gN57g6d%%9Bl*NC^9fc;j9i^4
zXq`h_bz%#wwJ+HvD_1Il`d*_X-v!%j$Z(+0E~&0wKiqgy)<skh<QX%4CPi%g3#4o-
z)v+C}d*`Y_xVmUBM~k-|Ir66Jkvre~J$JGyC8^JU3dw}xwp1mN@t{$WRPp*Em1LG0
zcp;E_#X?&rwnD^rP^P@5Vze#LP4e)!SF2V%_2{Fs7XC|>G@c`}A$%IRMbw=_;;7sJ
zbfFsMoe1bMGx_g=%%reiB-sy~n3js+?)RU^+hmrIn^jlt*#3v`HgnGVs8GXQPc7z9
zUr<Z1Z!N>2g@~ch0)dcJp4aCTKq^inkP1{v34cm0;p|`u{f~o$dEQJiyW%;mX1y=S
zCe2H*?-Fk1pG4CB0N3opY2+?StE&7;?O^>I61FeSCAYR@s^0<)3h|rt!`lcXL3~H#
zzZ^6*U5S}w=Q0`?Cmvq387g$$i=DNB;`wKgS!VL1X>`x3AO?KMT3E0iN25Y-EyU9?
zs}qD5C~h9RRvfSfCyg944X`+U3mJuWs}2r9dsWI&3IK}G)R2gv|Me1Ou|7xCaT?x=
z*XTV<y89Z}-B(#kih5a<9BE+6d0%{*N%pWAsCwr7vWSyQ5PK;#CptJ`AD3^Jh(@w}
zt523Khx(XgQchYgUwpqc>}$nX`I)aJ=4pgV<R;tzdguNBYM_Dt!Zq;wjMV=F{G>j{
zYnAGDr?UvGRUuckPDAgQuL(LdiDI{yBi?JVPneXTehwKQ<C~VnW_QRL!K2E&RfIAv
zFS1UbK?_6kj{YA>A|z6LS2&{dCQ~JIn#0?QtF8a%U@SXeg(c8BAphk5KUtKiB`Q_s
zaF~h29DpjqJtZPY9w%jfI_HAAaGDxgUH+y1{>TP$-znKn5<_{N$pcjl)Q_wj+WL`w
zee*_rB2#d(VHQIEk!#Nz4fHu$?fFO+7q=>2JGL+q;M1E*^&u#ssZW~KqY6ZcqN??_
z6$_J<B7tK!Tq|l|?wKl2(>v!iohD{{QM;mdb}@NA%Tf`G$hA9;RmrlJCRYy)R6`O+
zUlFtPDdG+b^7}thqPKyHc#$R0Rz&_ut%#FLC}&m=x8Wi8T!sW6C=o!ahFR9z$rw4G
zgg?V|bP`N0k)ARUG&2bP$2K6tY>uOnB=Xx#9$i(;%A&1`+1Klf{Y%QZj8aG=S1i?1
z273A&^dvJ-rx*LXU81?BvdD>`jrw8hm8}yw5WV7AY4mE;+&^vLb0Y!PsqaQm5Hn9!
zWjP31xp%Tw{_U;<bV4j6uz*A8NYWw=23TIZ(~T`}&0a-2|CkfA567&>!!DL@cns8L
z+1JPdQZZC>&N+y_F(8Y)<(5N{kQDpaIuMRjEEOBj1NLT-AEDlP4}DzQLO>>pZJ;W>
zrbQ8Kf|L;OT}~KOt+%3rGZ$e@fP$_wix3y$1)YG!_pDV!AKEBF*abtL6~I-^<%V{^
z^1s1q*~?C=I!m=l>c_BIFD-(WOyT{n65|b^<{z^JTGZs9`s*UuFvl!<%IiAA%`MxD
zdr%T?W|_<Alvfe?Exb9S9_T(~U$mH&eZ6%AXUhwfjFe2sso=^?vO|oK<dMgYr6oAU
zQl?AIgzOujN|{qJtQ{n3t|mDVZ2M+wWA#Q-!iHIBB=T>7r0Mt|*}b%s^$K!r4DA<u
z&t=ldi&qO4ynONJ1sc43@fV8mAg>xPTrJX@BH5r{8Z}0LRDx#&CL=XQ$$!e{;aSk5
zuRXfg3Y}Ffp=((*XW&E>GN#69&5qGmrp83UcZ7(jkwB|~riTWvRqNhXYc`FYV3DPT
z)reNqU6x;AO=T8%p|&e>?6BdY5u&L63U$<HS$@Pi7k8kWozBR!b&J~8LSA7YM!xc^
z%%2!=*HE*HB31)!$0?RT+jj6zYTHpd^lX<1AhjG>)^Zz>6(^D30)R5=ftDltqHQ^{
zukMv{3kh+rT%JNha-*R_^sc3))L(Oi9u~{{@r?j9X<E)7PIZuV>x!y|q$~sC(o)VX
zE#;LhFX!+I^Gkg~8#T|GlHNE_vtPdW9AA_?!4@UIeDP=HX%uUKK1Bk)gc(r4eO}h6
z5!^muPy<JU+jUxLQ`+-)5jhT8!K&A=Tj;>EG=#O0z1Cr2izgxnv#Na7(_16Nqy_A=
z6pS8F#_-N_>9U{CmXv=00zb_XXd#e)QXz0^skHn2l@bvo5X>@{;ch4hX4C^9n0?WL
zVD_~xcb{Jgi{+xf;#r}BP`O5~ATJqMXS53P9IcyTfxNz+2n`7_e~+~n@OGzJwNM8z
ztVC!IOD|&96-g)jS;P*}aj%UY!(ke-diaFi$Sid}uzEKJi<ogpYf<QQLM+v2c*`ER
zT^OiDN3{Kk?IcMWy5kR-(O4g1*W`$Oh-sEUTY>l|wE~q!?XE8oK&n1j)<)GQqaLU}
z*%xi~$-Z9Pbc1H5N;Y2>R6x?q$Q5wXz`i3@z*Ds3F<&{CPDrV%d{~vM-rHTJO>)v?
z2Mb|6NHbUn5EUdrOr4@i4T`|uPeFH@o5f3MeV&!Bf5M0X5v(Zo+6~n5bl(xG{y8UP
zqY)9%PbXqo>?p<tq*k^@1@R^<gy{qX7=k(oy;ToWYgQL~zr<c9d=*S);{fZoC=SQM
zU@X8TlSx^7adj4x2-(*Nu?5;|MeE)eC}lZi=oHahU2`DFHDt0*(n*Rm@~g~=8Qwfn
z;tm51_CqXz7H{|`6>kit>l!5@NQfh4u9>dW<$qwQz^k&*(R=|>-brQ(JGTL8m3h2O
z|B3P%^*Jlu077P8v<R7fola{~E_0H<6FJC;q1x)Q>*@p0m7HC1|6a^0P-)~uaJAPB
zt^QI$3y5?jS3+nQx#aax8oA^z^Ng4me5_B%;*yELqNZg3=v9VVxf+sJo#>a}3qE<7
zyx{J!nt&Wo#^a;WkI|U-0cfEp>_zyk^eBqCeg&&NAj+5VQ^xf_a#C9URkYQM1o#vu
z{UjsxU&2osKSzCL3tm1Wy-RjH>R``wJ6oofJ!i^hFz}}aMHg$-{wMiLwnokWl9U^l
zKw06#Uk%+QNF}O)1N8K50}+ItNQBF*r=46+7F+c$0;I}2RbQ{0DmSXo*FKP%>noYe
zmrVF?7|<=+5J8~IQ!SB4S-iisb75fZezxM@e*&2*OZi2Hc?U`?w!ft$Psz478;}ay
zlDbB+ZE+?17u>nhWxVeGY{mLi*j)~>hEQ6}yW=5reFGf(ARHij&Xnz+fp~D%)AS>)
zfG=(~-@y~*La;@+Seknm+W@dPwy}=W4(p8oYbUY1O_Hgk{v_KOeX_T9>Zvz9{nTww
zr@w3^w%4C;a_)+p3vl$!M~>cYcjF-Hu3_Wwg?n&B1rB*g_KEXGaE?b+`rJ#dk)G<%
zhH^^Csn@`Uv-oehi<3v{A`)0(tCbGT&OR37@C`QJ;0ppV%&|qd5WOw>8=(-a0I<W*
zzEGXT96cKk)mi$e0uJ9td>IE?gU8l5@n~Z@WXc9uvltuI*+e}{$oEX}=ae>G3!V<B
zkRv6Eu;(BMDYpmdPzpP??i33c#jtExIxO6xRBxlz56UtwO#*Ba!KoLlV0Ev_HH1Hq
z9P5=M$9fC|jVN8`)ueeUEPW0mtC9(I2=ZdK3n3v4QKJf#oQ}vK7TH^?KWo0YAwts7
zv0))vM^^Eg>qzw|UStufR7c!|e1yr4EU`e0)NxR!y&2Hc`eCa{Pz(;oX+{l^<8_L7
zVHI-2tv=3(cwCB|E7RvOqSDZUeVU`|4Adt&jb;aG+lZBI8cEK3&Diaom?d<3me;TM
z;itRoU&4>t77uOquy#M=^yC01RwV6`Z<2dk7@XG@XcG1e2bYN}&2jSh(O}s>x};Pk
z>uz<_n7TVNb9M|*RY`NtQq8Jy537k&P?Y8>dD~^nh@r7E4dwq6QanH7V7DSx-mQlZ
z%=`b8Sw;otO0u18yh~U!IMunZ0FCsV{-t4JsPhR82bnb6z2@JSwwq#)oc|J%N;~Pc
zQ8wz9xo6qu^LE&#-E%mBMQkneA17YZcp<iu1xkZ_+vw(E%>iq-_ithwKpWruk28&;
zBeQeDn&2KZA+3^6b}EjQ(igY#tP8o{{}Nd9?REaIme`Fd-A9Rh-v4`y)c+WM)at9&
zoa$%|P1=VTHCf)(_!BPP|6t;&J}i4+*3H^<%YMy3Qbp&*M*S6D{tq#({)h3Snx|4~
zvPU=usV%-C+Np^+-06|-#AVDygLT*J$gpls6{-*Ht^;BJK(pe13VJhxx;>iovZED1
z-2o&uhdTcYkcnZO|GW6h4g4>XkhdGbTAvEY`>zgM+sV`iT$>_XQy^`MAdQ@7-se=s
zjxW$`5ex;IO_!KPLbFLmT3R&@8FzY9AR8e?j$v=5GR*t;8OYB|z1gkPy#|sB4C9(E
zHs$yjCi+qNz{3!~@&rZLb(~{YPP_r`8q7LNX6OAgX~@)vS8EzokAhd8CcPnEok!BK
z@yh6Qf@-eXtEdm=Fx8b|6{jk8aDi2qz))b-a*0_atg188QmlHT(KtKBDMRWUqdr8k
z&->3C$bEHS)Xy16Dlm#`xY&f36{C2ZV+0i82@El6!`w9(^%*j|gi)M#A4Yvvqv}yG
z>eHI^h8Xn)B)x(dC5nIb^rt?>R9A*koT}Kt1x9@p3<XAgvcxPBM*VX}T8dG51g#{j
zm%@~Jf*h&-l1eb||Am3{R|isk(?C*zR9w%+h8!QM?$7%>Y)h<J<cr#HA}>Ozw~WbI
zgHYc!ogvh8DncJV9R$fZW4;5L^oIC!E0T_lPYXt4zO3+94?4Y$DXt8iI90Jz3v@aL
zh60`Tl^8`rr|TGLDLTEuVEP~hCL`J$lO89z=lw?wWWG8u=?4uY6_~`eTWr4ZG3iN;
z9O~qaVGl}8#PNwuztk}AQy8vNQ*JOj4QO2;f8gD!IW><y=z2<Hhf%s#=QZgKq3eA}
zIyQ8fg{%5haP<IK#MB1>+mnak;WJ9yYELbj;}PyO@AGuUbwWVe&mao{X`K>dNszY2
zNJ}B@)`!ifG*f6BDNPP>FHkw={eNgshN}bOK4u`PfH<!0VsnlUagPd!%cqddI$rrq
zG>0~tnXJ)#v>w_-G%HVK3Tv5M_wbdp>TKf|$^K%bnDg#~voC3MJ_?+DL6hDP&i(*N
z$A&YrXqHs`s|U(H&s3K}8TrTr`N$xYDeg1x^K`|&FQDvyBMSj#zg=P|3CcdpNK2vY
z4G(AjH*{%53SmaHIdo0WFzA}XPyaAMb}o|n>VU3o29gTs;@T}X-}un=AcwAeVT&QA
z<Ow)*VTDT}Xyx=9$UxH%TOi8|(8_uDf!3l%+oOQit(x?*UlmLl-i4%B2(+Z)Up=68
zGgBQvYliw?@D2s8W~k>STxQ<qw8fq-fa(O;3ZS~N#5fXA9b}}XK(+X&*=nw(C5XPX
zBsLDBj5ix5%-z#G33_HrTzq9G1P)bULZrZn>%7);_H1>KXP_Xl42b7|lE|mn`ai=L
zm-3G$=GpAo%`*li7U;@dqPS4wqwB*QU9*LMhS-<Ub8KBlpO7sV)FbS@V`rkl*AGIK
z0$*n`arzwW=QZjc1zw-iq&I}uk09yT@LDyB&gG@QdeF7UG?#V>*U=wj{-Izj8{I0d
zGw<_s#a=Iv_MagOfwVtaVkZe{f1Ht)BCVCKdR<xqkkZQ6C3)$q1g+C4W$t@P{tn>y
zd7h&Jj+2aS3XNO(f$_@*<q^QhxkJ(0Nk~Zs{+#EpoP9c{mL?Tsmt4l27X$0B8_4u6
zj>nlyI<V#+jVyeQ7ALXO`u*QF$Xx&@w{UR=3UC&aK2Ji-`+SY@aMENuEobiGB1m-Q
zf0(Dah@bvme=^g;(ad~_y?O=JB+d$0#nlcw#OZTvxx(M#oZhA3Bm<GSfX!d$<kCh5
zu0y)vk*&C1Q|=bU1#R;O4_aceIW{5Vl)iR%t#bi45n2ZirfyM4lZ|zlm)tr#SY(}`
zhd>9dN`gL5zH{Kj4?xldb)DhxRowFRneJW5o%K4-U5M-T$|0*_0-Y8v|HFP0T%c(-
z50di7-4fDGno=pm=9YWZ0#w}N>5JsqzD3<B%Sw8z&lSEovz19Uor;p0J%6Fv_$1lR
zXzxvWFCea9^dHDlCG9J+38tEthuxC-?yRJnbi3nwGXe4gn^+GfzYwwS!_bQxeMeW%
z1}~ez&5gdTBb6?pO^x&nXwNX(SK$6e|7o2RdVw!+Ax!QI^#6{It^SrH!8W_zhuzL7
zdXNJbHTplRV?5F=M?AmbEk>c<FW()F{)@Vj=r#Ys2%3LM$5yX-!8X@?*?o=v@93D1
zq<x;}2DQKOiyObD6I`$Cua2PXZ|d0Ul`Yuj$~L&IZre^xt38ssd9E8&_bYXG<9=PS
z^v3w>jMVHF&0BPA^~Mlvb7S;h(kSq!|FzoS-l@xQB=c}NHfWx)u5WxqC%fJT4~<}h
zx{j^h27+yF1A_{&rei;n#(AzA)cA&PaQso7+<I-lcLZ(sbZqt77Ho5E7u?|Z%R06r
zX_@D?K`md-OC0~Dt|)rN|HcT4|D2AkUh#r$uK2=B9Dh&8cqG;H{6<lIIW6vSl*S2u
z4XqyAxb9z%!C~5a#yAtxD#~V8{wlu^T09TGx$!SF#rNNYOq3xxhVpdJw*O5HwLGZJ
z<9z<z;31#&;NL?pF2g;I$zK~XaO|mbJXr{E-v6^QvH4|;{(}&alJTn;B?I)|#^~P<
zgJk!gWjBI7MnxQQ86!K*0vpVJ2sHjRyI4ka4WqCv+mQPGWM+27n|}&qs+}w9CeVA{
zh5^2ZNC~b}iJaC-)xw1Yj^#S7PKEZXSLo%TL+p4`yV1b$(J}4XUv1ksg+<(if?(OW
zY_j&*zX@f6i`+;*Mq^^qG>>3z!Z?^+sdrGwiY@cEK=rA<FLx;DcCvQCwQFh2N`!(^
zso)#8k$?wIyr%3JlDETKp!?K+GOt3kOT`+t|5B;i$yB;a`~hT^?7-e|e&6a84+-Jo
z)ut0Q*gOAWM$!)0Q3<_E1PjNQu|)t&oN3}eiRfFV&Ft(F(Z$Q2bKiM_$~o^pMnA^B
zGjNuPdn<Ic8^-jd>;(d*_ZOyj7G`xe2Cd)4Kje;s$CUWTkJj!-<!RLDj=&mjQmm!%
zv>IZAQH|deTT4$$Y-XR8yI8Azm=#9x(cA9O9Zlk2kc2-)hNS~X(g;o#96K#V$E16Y
z4qMe~^$gCc=tqaYI<w@j&Md*aNdK87{(B^E6a9%F8F*FM=!qio*(4z<_vJa8L~!~=
zjhq|Vn;-H?*|droPW-0ieBPI0*0nnBQ>dNB3^0xst<~8XKzN{wL~3l)1|Cp5YiIOx
z!(!V;%6DWjSg=}MF8CbbDPMUrEQI|*W)<~JhfyYmKcGpk^a#^CwFgfn`7n~^9mb^O
zRFWZE^+%kpAdnZE^sg+kv;N&rF=e6Gbvv!JA)lEbpP4v~Sz-9h1os&{kk3popTWb+
z7e6v_Mwu_Zoz~=x>~ixy&tL5k$i~WhWd5&1R59cD6D205RAR<4VWg#V%6t1;r*xua
z@I&55_&iB8@BcdkX+*Db6D<614Wv_aRcs6~J9~+%btB;RopH+2pONi3kQJV?^bL*r
zM?tec)ufjzh&sYlhPU5F(y`HO%=45s!QuaeX$+8Nc!m<EFZOy~ef_<=GYI;6iCrWJ
z`a?!q3PGbDh9tai)MPn)-AtvK_uq)0qOo8O!O13A^9BRy1blHl7aMYX`1+1GH|aq#
zJx8zNbCXVL)ISP*J)lW%2w$g=bZq!C+lV&&+@wwL__s2Z0lx~*O5#+-&Mr{P2Sd?u
zI$mN93AO$PBP~U(5l%i54mU!I9IKw8GR*t$F_3@rx?1lxkWOF~*KV=-#>c8x<@rb-
zAyac~8h$>~M>VP*1(!aoNpFZtFCyvKxMa4YOn*MoCScNsn7Ya^iBlCjwZNp`0z-jG
zzffWd36nm^NJ}xv@RTFrWQNo^7X3cSKJS0UK<>@MqAwdrC$NZXwb*Qz6^k}}QV|6i
z^r0&0thNnv*MzGk=2R@wo`bX%MExD;QLyOSC8jDE;_X7#R}hN^&q3M*Ec#2Pt}-m*
zRK-p$u;_X+GGEI6=Ow0)u;?3%v=ocXk1`T)WS$^Lq&uht^ZxA`N0b}2%^k@dF_2Cm
z64!09@y17_SJin(Pm+m6;5<9>C-VTzlg#@yje<wPp;MalvilU^&<c`{jYDRE^Q`dX
z&6^iEf1D|+423vVu_Fr<S_eacLXVUfLPDXFjI<PmjLt0*?qx)qd7l3hB=@}kcMW9T
zyx!1{8AvCvhikOhWaDGcch<Q^zeYYF!byFH`ecs6AnMmOb{GYsUeu&Fgs7L0bZm$+
z3n%rdU~_@$1*S3p)re;q@pQ%YKtR{;A`1as|DeP`5_El(k(NT&Naqp>CmbnF=Ar)A
zsT}kE*9^+Ac~JJ>4WtuL#x-1Q!ttT()qQ@^+@1`&q`Q6k_SfzO(KsW#U7GZUu=RQ*
z9UHdHqD}hqi#B0|H_g<QLYDcNMLb=xzYEAZj4T9XO_mr(f~>8Kv=p+8&LK*BTPEil
z<q&n8<evBMHIRApAnG0i=>$Y^jTW11e299ro>SzKwM8ggI;bae2iB+ZHQFAfPqm^+
zZwO8?l3pQjl8V2%{i$W9E`XE4*+iVS*t-QF{V3Q9K&qD*L;|E5BP|7_tMzQ6pX1^y
z$8Q*%P4r;{1&Jd#cn+|Z?zjv7(ZoEPvGU<LgHj3<<!(@1knvIU)q5V%m!L|4qeIUl
z`aO-hM}g5VYSJ6R=zl}fv0-$K^N2Q~i}xRxw$d)1`58n!U9qPNMEyU=LLlnDFR_h;
zsGnn`rHFbN&mfxK%T}Q)AXst+(KRfIx<p#`H7bt)K+YYC9(o3m$bZ~3h;B5H>05kL
zP$rWOl=(*^3;S4Dmv-U}au;C9EnJ*|0+z+3;tV3b17J9*?hK+pvxd+=!1nP;XMp$z
z@y5Ra|BzY5p+jdiNo5a6H*gIeI>ePWunkL2O!@HrTkc!<<|p?_w%1cFo_{yCJ19H1
z{F4xiz4m_)e<hRricbF#dc6h{`H$i+d6SmAE4_6(=bhY`?q^zP1fjD)1Hj0M7aFag
z+q~-z@rVt)H=OB_*g3tr!D)d0CeT;T(AiDytUK>+6J?`4T3h>v_p&~cDZZtu=iW+b
zw<L4eycps}*}8atGTD{BX?bm@cQToVz%lMtj&Of7Hf43Od_JnKgh3m3_%^XE^oQ(L
z*NO70YWJK>X2gcAAVm5Zl+uY}T(yjcojjX5c%Q{1_WXClhEwl`Ej;axg9cXVH_p=6
zsK?g5C)ciEC4W1J9qG%7Ey?c4X~Z~0s=mGwglj##nTz7k>)>*2cKB2Te)If|({kuI
zs;GY6i`_c2BjiPPB0<ZJBKBez&gTt6-2CjEb6PlKE17leR`xiVT;r_c*e4Vv?nWum
zWHQ-wmb<IqH%B+TLQ$YV7k>?JW@7AZbErhUXOlUv-RZ`4r`-sepz0+v-FRi;&IN26
z?Iruwk98*ugRt)64(XN?Ldhg*Bkm=8f^MvGnPgmg$$`EveJuRv;Iqjb=bOurrrxi9
z=u4dJr7}cNlnWKLP^Mn8yJfdmySS|y8gJrxtAj(ut_vObd9&VhI&cnT<1xifHG=jE
ziV2N)%{qcJE8aQ|w@T*dK5!g4pT0`Adhn>-O`Hveo3w@3L9y(G2ZsyWHcme~ne1V2
zpxt&v=FeYsBB$F7>g#LdPkWv9PJo-T<&?}z8gc!c7kSvRMZB;}B%+(8Q4k^Jj<hzo
zw<fz#m<axF$6n9|`EEg0U%@t#sE0Z`*Ks;^l*vIo!fo21*+p-bQPY`YCzcz>o#^P|
z;`#IE(YL`_VC`xUt}Zs6bBmyi7JJy&j1<I?Qs8#%HE218R;TfP;f+VW8)}&gR~miU
z(3?D){b@FFfHUH%o)fRIY}|OQg)C-p8XT$syViO-IRJ-Rt7mm96CW4TlX)*C`<OId
zJHn;hC^`I=bku|+?+oqp*&{06-snO*w%6;fx9Z|-ITvoaolc+YCA%VA3m@0t*+un@
zkn%eA%pdEmpkWIQ9%#5WY6|Sjs}(Fp;8REHv$)p#5<DPi#9j>b@aldEP7*Y{_6kg$
z*8gh>5u)z0O1IZpTXt|)d3*tRxsDTq+iL-*_Sw3#W_zu=-E4-q0-edX&1s+O(GB*~
z90^eM;6>Pv>%p&M+*luC%9h#u8e{~oh=GRC4UW=_dQbO~Yn8WcdktLi8r)XWhYIcl
zC-7gm>kjyi@1YxEC$C=%T-$fx&YpD>F12@@re{@XPwXKgdWML)Y|h$iGLAcl9sj%H
zN7Nd1=$~H&q5t>kpWmQ=ehvS0lNq9=9mbTBQ=ep%&oZiKyRJp=i2<6h?{)9v9DXU~
z;J-kB(Vl#^XTO{5mc53Fv%BE|6iE{(DStyXJEh|qlizSU)E)TF+H%m!9FdW}rtf7&
zJ)>}(Npoe1u2uL0q{En6h1d4;5?>~gS>R41=n|^nzHS_=*n*8w2DEcKj*Iv2hsxg9
ndz9)pT|-faK_fsO&oF}@<@L_&HS?a?CLy8#4{D{m%hmr6SWj%$

diff --git a/docs/_build/doctrees/source/generated/pysegcnn.core.dataset.ImageDataset.doctree b/docs/_build/doctrees/source/generated/pysegcnn.core.dataset.ImageDataset.doctree
index d3d8263e389faa1a9785e2f986c1a8c8b6867056..419113a28a9c3ab7364d1f88fa99c703ebdd275f 100644
GIT binary patch
literal 43136
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

literal 50673
zcmeHw4Uinib>0EE-^JlTQWPR-0eA>W<U#}%Af-eWOpu{S(foxN36fyppuM@>xtkg6
z?JQ?zfjiN(Az6wEYvQu4wJgPotdbc!aoLQlxJngUR&3fz>_k><DL>AS5*HLQuGr<s
zWhGT|xs-gbyJx0*w|9PSkB37NR)Kpn)BXDOd#}Ile%<~0%H&VJ^rZ>*U$j5y+D>P^
zZnjz-uVn@OXtw1wduvuF?0>X>^aK58`n71zH!lZX&u?1&XaXskw$pC;R;PcVA1zSw
z&}j#Ck$)zznxW%$lI-@BJ#Eii=-2GIXexBVwk3Uvj&wHyYqi<w)SI4f)mvt023A;q
zWX)W)9^?;w%8ksEXRUSOs!*N}_Zjaf{1wr3*95m=-@e)2W$%fmMP1HBlWnJC_0RN{
z&8T9Aq3<mBLdbyXyvJz;RKJ;K+YAD{#NSgLbB+Hs+v;`Ghh?*Q(YID8O)r`W%~kr;
zxA)ssd!9<P4@U2K;MC&VdcN6Qy!+(cCl^<pa51j<A|x0ra-J4ft&ZiJq18%0kCsc_
z4^XE=kL~U)+Y`~0(`i}jl4!Zq?Zc>zZ9srW@b7i_cRT*osAdp}@38vRAQPvv3e7~v
zWyu>gR(r$g7%{gBJ4cJ@!k#`8_RXIC2K!hlk~8)p2p)`2!t9zueAn=0fxa{X2l5Pi
zzG5~{%WT$s&kGwZ$3JHD0;{oXc3Q#d^B0a8uuBX1-*25h<8`cKM%Qeee#mSG_;WRE
zbfI#~@0`A)R)53M)vz8qD|Z|-0?!ZQM1f_sPM-uF-|Pe{p1($9k1~5C{`NEe%udG(
z%>k2-rn%&}?H))TQ?s0gC?4h3!9`(?R@L14TKiPcHK_s4c6}?b{7Y7!1o|+jJSc3e
z**vvqjj*v;eT&q}7UNdd-8e<Y2Q%ob8s3Ut$pdXsXl<U?9k4;R9z%sa6&;9+QY@t&
z3u4q~RWKKd3C2EWe;-NVd@2R|y|G=*F%AdWo0knIW=egjva(i=m5Vx7Zegqdg&-@K
zT-!mzl|;6-t@fLkFK=E6S29PlF-KfN6VX0a12o0Ppg;$b9*EKxsvxfdW)%~Uc6Iuu
z3`wNQABOyXXfUOmDAxH0knkA*$Om~R1<RY48^5UKv&q-F<ZG;T>5a<iXNJnx^Z6-;
zUpFVB@w$ZFo-a#s*Xg)8{G}H2xxr$hUEXj(pG7^Xpt)$;>9GDvvYg%L0p`>@9*F2q
zmHuxH(T5gS%w9WeTr%4|OD!vUMbPVZ0e+2O&Gf^kdLDI!S4k(o$yu-z?G@9>f(pUI
zT1mdg^_WZFsMY!UV0CP@0<rb{dkE{76SZf^|4)Vp{`!zPlJtq-3kktV>Pli}`Gd;m
zw};4nMIoCbXq2`YLC+<9+mMX+;8V;n`&;4Hy=B+L#1P9`(YgyPX(8#lhK{UOz%kiW
z##5}5j(HYOD%W)#`7(kQrEW&ne{ICzVMy|oG+|sB`ITCu@72{vuZIUp=;2*DvU)uT
zvZ)^C<)Kkr1NEg^ho-KuQd;3WY(^`UbmTUqh)MbuSAajLjDNq5alP=@O9=l*bY%6y
z7i3f67ia_@*O4zJZeHqU#68Ui#~M*%(42~z9#m2PvW{uJsDG)1sQ;;stX|ZDY%1zq
zCu4^3m&)z$>ByE6F)wX1BHpLWJBB1(Nk7Nz%dgaWyrip#Uh3CMNc~$nvU;ftvZ>Uw
z1~2aJ-I`vhl-zlFh2@@~@M(+%#9S+#WlVaV_J%az6SMA#XufN8T9{Wg*5Mi$PLPN}
zWWc!jJof<%4CCB8G?Iw+U2?3;O?YgMV@P;$SdSR8xv$e?lt*pR3^)rnx-_Yb$@Ssv
zu~u5%n(1`<(Vie|^`pIbW36}FPSXkdS6PD4^jEF0A02M2d97aC3Qokcz7sUTJRv5S
zaG4;l132)aX-2o%kKV|uc_MLjBze^tqcTy$;LbgQ`k-3hl~=7vFzffDNjqF?(<IqF
z#4^UZ<Fjo^-QQyl`9`LBwffO3<9aE)p<Zly-?yiu*_B?q%^f}-4ME>(A0+E|Y!|HM
zKAJnSNdliPH@!|Md)8#v7zS{@x$2u;TQZiY_ExyV4DL&S1HxFt=-mmraIyJj+i=KB
zW{|Lx`E~IO2|l<>T(Iw>ALg#gb4ZX-7b*3@Xq%i4kL`x$zfUmOTXrwt&typc(jy()
z@|}>p7%RTFW-MV6*0k%~FUiF7Aa^A$8KGw^L!jOo?Ah#u^c>oj@#Mx?%2EkJIFC%f
zRW}~$`S{?k!JNshM6{g_eQsI-`ASBYQL#GaGTH<qj9Dk8rZQ}h-WZYZanEd7{*usi
zt4AK03XITdlk>^x;E}7ihN<37gY`}OEX_9vZf!ubm`v_xp4bL8ZTLpvSdwOyuNhsp
zxTAU1C<&*m0NASTI!YdzTu5F>vZPDI9cL14<v{f4)+s6FW=pARMCx9aEpiJb_>oOW
z@Nl*XN>a&7nOoCCdRr0p9Ggp3Yc4!d$_=xaPi>;UhqBvEf^<<%LQQR@eqz9Zo`Rs;
zCJR3F*d+3&7==bwS#hj(t1;m3<2^oG4q@M=rk8#aSqHssl_z5-Vi3z#ewEaeiSoA!
zi1Igy^{V?t`r#cH+H1=Cve(j#ZswxB%jos2aCFt?sL~B5wAO~Ir-JvX*wtv%;D|nI
z96xTH1z6Hs11^2^be_LKuKUm?Tp%D7ql*|2u~5)PLFf=0px|{@r4l7?r0|oCa8J4~
z<p_%ngQ(|qR-9)4S<?Q0<+A%DmXlm?Ms2{D`6m?{rk23vQmj1;vHXEd-_GGg!px-T
zT}KCqBwwbCYgayMjQUzDEbGLyqT+dASj2}ss3_2$s_xedNZ>yb;i~(GEUEjS@Dq;*
zcq3A+?0n+=HELv;#(BscD@0zG7H-Tov%C8Z_DOWt$ta7hCz0)eMx7a_aHASdV4S}o
z%+P&NVj+@z%fjxYH;E`&E4^b+b{FY>3xs8Rdo9bLwKx7rwYTXds#RieSo6f{gUZ5N
za#)ZoPAdF-N(H8Wz7K8a%Fng;$2U>>UP*Tn8_Mg1ABbwGeI)hJwvXiNn>T9{iGZU`
zlMwuuZaqc;d6sKEKbQFAjhcf&GbSQ@K~-r!1SPcC8jp7=Q&2Y^SuwCcDl%AR(>8)8
zR=KJ1w46&$%W7d@jn)-B)x$D<h2<g=fo*mzqm~pcE$1E`YKFv)z9A<0W5gY`z~KI1
zj@*VC;?pdHwjuIQYD1h_LOqjqxCalZ<uWAr@f-%EW|$N`Ny<p+MEn`1qvK$DiR6^9
zpjo|epW6fvl@v!MPUN=<Kf0!v)J5AAldp%f?Mo^-FQwo{Zdj_O3drfVAt#xDy0j^~
zSq8KwXM!{u$BdV^O{75dvKOV1YoYFby@1V?0<3dyf?E=+UPf)%^V+F(vR?i@wuM2Y
zPaQgN2;)ZD7Q)7rPN&-oxl^TXyweKVhttMczXun9!zS?+=5h%PAQeM3>yick9|N+$
z!KB|<-e9B>)Zs{#I%)uW6_iJ)ciF*^)`TyDxfNJx<S;bY;w&NH`z_ytBLWSanFu2S
z6tt}hoNU+y()E~!(OC7pUI$h1dmzY*0=TNB9O-y$+<e4no6A<aUZK_`jbqq~n-)QH
zmJk1Xj`D_3^Cgx+i<<n?U|S>|rkF)fX<KKw`BynCNG&iaTt=s~iO6qZ%}MH^;Y0F8
zi&@FnJ4+Z_TB)d1Ho>QYD|69|m=eizp_!#67{yW|OU+{N;mI<vc92qYF)76#h~8{$
zuH8sN*fa?ZNA4kT8qW`+eM?J8`%I-Va$IoN7RlsuI|U1_UHPOygKJm*UN#=2P2>5U
z!hKOB8@9_rozXW6fJv#&DEh;67Xb5d4D?6$8@{!QZF_Bl)-9|cz=V`Kr!_OgSQ%)q
z;yXM-)JdS%K-WW)*Lvmtb~|yEU_++?KeG|^mSgV;y}}O8#Lq%~S74cNccT-+q5@n^
z<gI4q5$TlOp<%Yz53tDgN@{xxd4GeL`O2>ndt$)-9<;11@9<FH@lKXO+jsC!YTuDN
z^>lI=ka~`!Xt|F_suRg?0YFLWp`Ii8qU|}7ul9DCg@m}<SEi7V+-ax~J-@UR+iQx@
zqg;1aHv`ZlX}NqD)opB8m(?^RVHHT6Tg!!|rL?i7^&H(`J~_a2_N+s6&zhRPZm4Bn
zyYg|q4SIq#?rT>*QI{%f45g2eAb|pI^Rh$>!R?a;T3|W2U8lW1xg&oYj$*IvtvXG!
zjR8E%Ls%P_SQ#X@#k&FvE4ze`*haoah)J8}D{M7!&<Qwt@SMBx=!Km64?*A;Sq3cx
z@=q!RPA}ySpZ|3Z3laz>h0Aa^5(JafLm-%Z(Sl&|wIL6mUk;6>tiS9<0Su^Kr5nhv
z70^z(2J&&*xy2lL10xZd65^x-c7MRyEv$i~4PaUc*Blnhu~beoM!t^DJ$CWR^f8*U
zI{1XqNQDL;*f|`6M5weP-|G6<EYftA9Z=gCLX?x*@x&x?61(pBL!vY`hM1WuIfmH7
zGH4qR|D-mcT(8}$a~P1CPf~QD=98ozYCg#qZSzUKUb*fHO;i<Ke_qf4NiwAy;6wra
zmTG|KXwzl7cQ0O$Qg<4$CRe||w@OFxq{R;A!g`!mu;3ud$buFsHmlT)w~^DGmSXWz
z+97DfJFqZg!2BV={+T9Pd3@FhP5+YRv)PDP5sTMdneQmXp(ji`Vmt`go*It;L!|b6
zXVt;dn$g2KGjV<jUqy~e=wSyL`Qexwj5)aEWKz*iSg&9aA^94>w?L=6Xy+XRrKBW@
z8?4o}hMZg@7V9LL#7HB*N{pD{&Eq-dFw|i`%ra>4hJRA=roeLD`*K*25JxIpvs|Yu
z|Iku~RVA*YYDS`T+{gs>)F!x9*6|YgN6Kro=cIN+2$_7*B4qM)Hf~8N&r$kLlprI9
zs;e!R)sI6~a&g(?d$DnfY9nWYsl9q+^Oq``kw{l_#f65MOWGc#nM?XIEr?mca|29f
z*G$Y@G&TE2HyCQAVu)@y*0<gYKEFj)aL-s>Knf`1(b34K(46;ekV2N*i||_+QDjs7
zx7Z&7R=$RxJgR@dlhSUltYc=xz!!MZf5MWwzmA{Se~$J{$NAkCq<7KGJ1m^h?j*a?
zlIKL&3<mzBK-I;Tv_B?WNw%c9UzJMZ94I?{_^Xj86sbmR$8y#Eb^#WIoQQ=jmeXD?
zCxh*~7Y<V8ohq+er}LF6<aINW7ME8vm2R1EUppjQ^dTaF%Fodpew5<_ySp1hrw5WV
z2kyI2sB)M<6qpX6#D@RZ=aebw_DF%GLboKYQo7A<gr7%k&<Nx0pY}l!-vGyU{ob;V
zErZeq>zOAo^z{&6LKr~uoCw=J2lhbk-Sks<PySh+DP<zwnfexX2;rvC#I{Y-Z!|q@
zmBdy?iKm?Q6HT)8(M^lzp1$jur|*6y{$&R&T7%_A;Woq~IQ8a}r|vO(p%?VlaAbMo
zUIfEHNQvlxh-rdoA$93<Ke}0ZYCslBB$9IvLxUCkx7<T?lZNmE*4SR9qm{}#Lj?I?
zvkkr-5R)8JI14e>qQ9|pg7tsX_sxxZ1uOJxUCf3WEPqe~g|`x2MuB$Vu^mp_*BDQj
zlIc|iGouDure_%iVwfGn>L4-;j+oO5k(g!iqai$T{7xklSRHsbiGxf+Nwvt$!}E-w
zhb>+bHI`i3^(8h)KqmAhWd+AuVsSK_7MCmj09)A7j6)KP4&NBoqJ=GNjrJi&tcbyF
zgfkaGjc8He4$6|eO|`IW!B=Y;EASW5Di%4cJbYz`C_u=!OlXw~s5z~5CJnLegXqRp
z<!a}1QWj9fKw{($y#`M1kQ~>K87%^DP<VjW;NWXsr;_*%_p>Y!_hexg_0*u1iDm{=
z2x-?wcc=x@w(uFW&yvk^7FjMkt<dg2Rv|q6A>Jad;0LE=K7=2&_a50%BDzmP>Agdg
zSe3MU!in!azIRz$p(!ZTAKpi<bl}lDPI=4jsU@ZP8TY93%-EbBk-`Jjl^pjjEgFm5
zx)w#G7NvWOzITg?Vc4xKTDi}Y(0Me5eF{_QBmnxax}RlQQD;E4Xp$Wij98~R-Q742
zY4okZjbvhC^otq_a?<3qo%>+i%Zf97?yn)Mbn<Tx6{8;UdzO8^Z2BEK?S~jK;xL?h
zmT1l5g*g1?Dc$$UvZ`WT2kYYxUbp^&j_JAofJqZWp1l*s1h<_DX+M3mS23wLefD^O
zACGf?AEfzVK=<$G=!_cM&r<TL`)QWceGWfrvsGJ6y<Ddhk2cC?O9v(YjkEV6V^6hT
z+4_<J*>%?IwE}!963<rYr+Dpuno)Is20yBDYPkw~JI5Y%Y)}Z})GQq2^!WD3mX)DF
zxcQj`;TBYu1|V($2?r;mHTPE`vtj^O(d3s+ECb+Pg{;K^&iyiYV#wzH9{#dD_bbHY
zT?N2wKmcU*I|0q6ndpFK(}ZRUkWCYik=ayTo+{hm1%|x=1O<le$x(}hVG}HAZj(4#
zcvu|6SBV@ca@|jLsJizR;Gfs}`u0fo6yQ@J7ngIkBF9HAF=|RDCWTNdO`e5V_jANb
z6PKo~L8=u}I3J5i)2RWJvNd8ZgHkO`{(>mwBkR~Gb-VydrDEMN<E<qowmgL5sj>}Q
zAk>FIP$1NW9F<52^<I`V7opygIc?6Gf5(V5289&Cewyl7bw5#{emeodK30HFfnZz@
z*^1s$1QXtkB6CY>Jv@0q1luHS4TAj!DO^G@PI&;qUeJiS41#@8lfNK>eHmG|4Z%d^
zcgh&+SDD!I5R9kFHf(`l{}}`Yf_*+mB@%-D3QL-cV1F|c!3sG3VjvrzP>N^&lWJUb
z|Dr%`cLJV$vjCq0&$w2y)jmF+J&=x?*rD6PXa-+x7M7hJi>?O8UNf8E*erunFff2(
z2a#l)+2X4-`3s`h?Z`Sdirrao97c-TF{7|snb7hujHk*rW`SYf4T1v0Zq8ANgkcLT
zX)cBx7Z_G-xgiFulDSfJdOOvn>ON7R9y<Y@9xcG9KqoHmY=w@GPUkp^sEa;@=5=Zo
zj#O;fW)Z7JnJzCi=cWqNz*k6?z=vTAY6$}%c1fdyGD9(6lfNK{T|w5dL9B?&Yd`=y
zWjNMhq63uePaXKM7RC3qe=%7X5{6WDdA{tnAi(V>P=o-ti#dvtz|Ce!bHT0p<me^P
z7|Jr!q`>tLiO;J0^96X^3BdJS0X_wAaam?7Ykc5(QUF)Fz+7Ztm9A2Az@l}^MOv%Y
z1D5c3rMZfMRl?J~d>^j5`uG*nyqGVhlm|fS_cih^15#hs<Sz(P{{dOY2B{(*FRAi7
z1)zS1i7f^wvW^L|j$wdO45#YyeAzZH0P0UsgaD{7<tRx4s25n$T!6ak$;9>wZn%hH
zYZEzBFxxZ7z-$+O2B!zI(NTSN0+@ZLtlYB|J3g2_%E2t%`cepI(&QY>umdI&#?thq
z$!o@2HPX3&v6S)vjJ-i)5oKWPc1?cSqB52j--N8&0%KC;cM6OhVPXS}&CxgucA)^+
z9F4Gqu~c22Hrv7lbUg&J0=m8{M==s~9b`#!q3gsuu<<L|i#B?n*U}PLUs@7}5K+fF
z3T8}Avv?Ma(9U!Al~WZ6(88FA!4sE|t*7MK-l0|j0f|jQyad!_mwc2P4@v1ov~ztI
zLeCYbt{5M3d&sWR_>g*rLu#@gun^=WsX3soV`#|s5b9y|zA=l?fa=E}MggjG2{Qwh
z^>K};%V26>lfNLQeg;{`#?)g4oN#H~cM7Eb7?WB&GF->7kXeQTtZeG47){mX`LeBD
z!0WG|2m!BuCr3vTy#5GFnhUQ+ya{$`3Ft{1VVC5cuo9lm#wk;~i_&+%q~GNwDu_76
z$i{fMYY+{;TA)4x4LNlPdXkuwc;L@z`AQ(~1+_LYBlB_{Q(6q6Uo60rIJuYbBqOwY
z2?P>$3TgN$+PTE89B}_xfzkzFat&t}pa5oe(oYZ*RhMr$9-TCrq}|PZ+**lI`w#Fu
zPvd8BfFI4Z5z3kGpH}bBnnJLFRoqT7Bf{4)kNO6u)YDLsK}g&l=LS5vbW(!LkglX;
z8?e`uD^PK}T=llw46zd(r<f7u4}0;u8@N8vxb3#sEHcw1(;8+acT|R}tYh@`NC&A(
zjEZ364};U=>ITHoo4Vz@KJB+ef1}aBl>%X-Q9EkX@?q1!t%W$Qg4;feEOf-QaXH4B
zFuC?qs)0BebFa#L&3+($5q(J6-yIXI#SwwF^_tIi!qsfdNUZMkg{s>}NoR!)?ZlTE
z;?_v_p(Iz--iFgN^|UtZO3&|4>UmwRqx@h}d>ZA6jabqf90xv(ylK)kb!}_-jvQPy
z>0Zz!mF}mA74!jWgDmaKaN(r8q2of&aE~)l<bp%@hjnE2moo{n$*n}}I!Q5N9J*Q3
z{Yf3+QkOIF@<#U(nR4H{OC{asbv4mT{ufF}{tG&?ddUm2spRu6m~{Vzj(92Q^D;Ln
z{mtJr`3)W8dSU;U62ks-9a+7w1=&>C1uoh9-#YT8#LY|Hq_|(6%O+p7S2O(3tKwFc
zwAiJex9iC2RUycxs!;Eh6xgG_RJ++X=?W{Q7|z2c6*Ja-lTYY)*USHr67oN<BdeFc
zAe+j+KvQsZ<V#7Mm%2%bZ~Dr~59;{VOZx{(Nc+chWcAV(WK(HpTsiqE9obS+=A~^?
z%3FEs<mYu&(F^_`mk|7ybY%5{7i3exXWlybH67tnqUYt65q*AITs$ew4%~C-kl0Cg
z_b?7*#^YwpDzR#!oOR`|(z~n0^XRK4zon_Zdlw2(Cg7O3)0N=vpKDUfQ`pp_=iW1T
z3iV!ku>}`PMz7RP75nM}PU7sVx__3(G`~I4eH;u@Hhy=cB>utcBi;L<j-eYQ-FH$2
zN8BFCLSNvd*}IX(-8at)qI)BSX4#q42S~~6_DJ^}lBrs*spmlNeFT$v2VN1}y%JdM
zmAZl33vl0{)$Z2lsCtcF9zDupnVQWeVoirg2p@`xkS*fc6gbAlC6n~d?h(`p24c`p
zp?NS#TCCu1_uQA=EO|(9inH>!L-4V*x7z7*f^@w+`rvHrof1x;m@8ODoftgy*sXaH
zOWp%pf#hTBNo)#!Efr_jF-)adN7L~U@rO`YG=qcT{Bqc7?*73ou`MfTvUl#|EJ?>>
zF%tS$2@*~-RSQ>@2!G<f3x2jlnn{=wF}O>fQ_J~VRL`pWcKRu7IYVJj>^mW=eNd()
z6)({5@H73IZCvON-udc!Nb7d-KQhMQh$i*}rxxFarqf)!`{dmx7gwEdG4`A-!V4HI
z@@s7u<DiPI<g;>hY+b=CKL}6V{nvF-Ox#dn{Ty8aNwG;{pH1QlJ1_adqzjUc8TESo
z0zy;_BE$a=Z^AYZvnU<$T5udxqQVXe(jM&^3lBo^taw-w0#*@k#i7U(ES~=V>)}n@
z_e&NkMjt;o^s2Vm;3IMvlMdiuYr>caN`F_w=VlJ{cllCn+$;+%2FHo{S}^&v7aO>$
zVevdxg%P!MvB3`H;DPQaS!|F!;sNb>@q&K6Se)31>6T=IIkVNBgndF^z6EELi~D0t
zBWh1pX0iAuH2IaWV|-osZ~&7}BWpUejB)~)j5yz4Y9WI<1aY!|J9_~(4*XFjD2&eD
zNLy~mS|-R^CeCA}7}heutpyKcEfdUI@Nn(Q&rMuV){x&wn{!GVTh-;|t78XQQR&Fd
z{Tx^otB@bbQ7`2ZtB}vKq`B+Nxbs>a<Hn0H!ynSo#P1SERrjA4;6{u-w_U%#U4S=5
zQrW5y>$M-|Lfs6c-S}ac{*1KF;VUx?(>FDuFN0x!s>v@m4RsDGM@Dr25?RN_u(1Lz
zZM&iWF_RX6tYDBOo<7^!#Rix8eF^Zqn4=R3c&@RexxiC4T9UB5ve{D5dM(wa>fVN*
zthr(eywSGn@^As(1ZZ(7XRC31(7NFRD?Lm~=a`ipSm{xX=*xiCLz?^rLF+8CjtyEx
zPMM7kthDWx{#GU~pjKuuC7vqV$OTrdfS?#8-It>Z39Ig5NprEPL}(;oY$bA}2=xrr
z0XGa6;Qx9JtJVwfCJ>6tHd}e)Bh(ESK<P82WR6Iq11LSG5px+d`m`p0K{R?ES;t1B
zBFD+}0hG2Ki9X3hm4`$;Rkkq;B>D{y6iD=m95qNt^f8t+7m3CQc_fT(3<@by{X42-
z)%`aG>UX`6>Z=8K6G+8npRL?2MXF5(Ga^@m-c==qdfOyzjl1fvNXZgXX#*vFM<eDk
zNcESR`~{I}c3~TlYB*5Rwj<U5Vxr1JDxNCam<3Y31_BgF^%ps6kdW$|ENL!MjUUrU
z*xvYrQrx<WYFu?s;Af}K0gn~nP2d*SM7FBO$E_PCAkw=@xg4)X1w=Zh5pEf@I;+WF
z5UrMxb?k9f5%+o$3yRw8^>VL2$pn>$RXkO;0Sl}OK~P}T6FEwdu<B8kG#9H%hBFdI
zRx($LLLZ^JRNbou>T$hBPk*}rZvut5jI)(EJ_`Nc6Zq(}q<!I%8i@Oom<X1AtM2DC
zIw%8H&uj7*1gkF~>)2pb#3eN#fa?iazre%=$SN7^i08|;e*t1&K@kGPem+Mz5{Ny=
zlIDU~W*{SBaG7Zm>vLZuKCA9G3h;Qn0P2ql@FoC?%P(6&;{()<8{nw2KLI4^TA+c`
zxARCeIAksZMzfmy1;OY5vW^W#MLbga07u(C&zoeTih-zjP$Ql%+s*|L)lh^0qFp(P
zk$~ts#eirNp@{@MZ6aq1TK7?%s_y9m^|@Z4b*cbw0<^fSvz0kMXx)f`j9R2;;g*tO
z`6PzG#!f35Ntc1EWljEqaMeZDZGkJP^4D|R^gbpkz*T|ZMLcb`RSSsvAjk@cI-jEq
z38K!iq`70Iof^F8r#SmcsEz``i#}aIKq6cRF9F)pg~s3?i>PP&_eS&!)KOq3H-hYH
zjE|i+X2haDfEWdOj*M9JHI1mtfakx`<Sz)GUq{xl!E@6Qi?)5J_b-{G;-OygC`CM9
zwuK8E{U0bo;OOt<=taWOFR`S#IJ$*ViY9Mjd(jo>%ZXC7k7ZFeOUrgf^%1bgsYB2s
zqZEnq$Bj~C6yQljDN1<KK{5YWNW&}Ga2F5e3zRNEl504-00ktolZq%s{2ajOq`D|Y
z7d3ke-B+{Ie^SH{_YmH=hw(pBs|ZW9s>v!_Kz#6PI4ltt+R*VWIWv{R&wbhV@k3Mg
zd)fI=wR-NGap*xg@#Q`Ww%BX;G5i%x@q0bpC+M{U6}e~dmwdR(o{ulKPH9I+;&V{P
zo4A1YxHwL8oSl>r4><CB1V^qQrZlyBENUS2?MPj_K#`s7ie0t$h<eevuHA#vds!CI
zG(U#bx9_C9yP^dgcl2@nY(u<16V1nO+D^ynpNVDzD-3aCaDWS<ageKrjr2i%#rHb6
z@VAA7r0+J{Ju67>wcURvniGe-JRkYzP)92WahEe5_VQvHpnVaKh!N29n^vRexAC+u
z^qSbO-@Hg)gFf2<AKkKoJ^dXow4^VO?TYpVRx?D1sm3~PHD2rE%|a0RP8WA~v(Qul
z=vDa}t8G!Rs-SV%3GD{cA^1gcB178@0`_7aL3}+QS4&%$tTrNWMHSm@Cy!In&DJ`C
zLZK>QFNhOOMN=(nxwi^>3v?wc1cekB(y!soT!`~<7S*W#Y_#BXy1lSrb($Vsz}%1K
zdg03P?>>%$rv2!k`mtg8zUMb=v(su@K7>rHHp70j-|K}cl_^H09~~O_GC;!Z!(O8W
zPB-Nt&V5k*FpxRAiRutQP&P!=MxFZ6zP8y}?cuN&B;LaFZVMsDUg2A?@m8Z{bzvMR
z#$ke;ZhD;+R1*?$S`D~oR-AQ&zls*<!f`~Kk6%T*9az-979xk?Rw-e15G;G)z~KCj
ziP&goqW$a*q}vHd{pqW2VD(yFV||V6=_YHP-7zlbWLDA)8<(8GL6AD4h4Uf-U3QL&
z2rg&h)?nWm&7(2_?4R8#j^z79vc?JylmvaW*oCguZJ<sT+7T||Mw)qgvuxr%Z!+x2
zu*0w$oH}vh^5x6*?gnCob?TnKdZJ}rI)RkIi9Sw3BL`8W9Joq*4N?vv)mgkh{`!+|
zf>;*(mF7S(^d>FlU|dY-A%a}pvBDKrj2*7EQN$c##i0qXJFsV?LoledM$)zt_Hpk$
zsrPDhfN|q=0^Hz@`_y5#B%>A#d9QC?P9D+lZVEO!p}F3$omCr==WLkiB*mudNAm&h
zoevvN_0W6+<a`Bt=8uiG*EEF$4>fHQEd~1J%?i=i2z(mIeGzwnUxfvD&Cm%U9^Txq
z!brTP(^-M4<Mw|GAwtkwR@2>Ntu0%)*gV`oS+-?`p!UjU+cPgVtToeVH_TSc$L;Bi
zzdcsxQXhRuG|Q0yO%GOtGrSJ$I&6fdk40Ig^P5o+tRe&&LN*Ar7xbU$N4F?%JLVdw
z;x(wPBoB0O%W1LqGxU=G?RwOmwDG?nnxofrjF=L!4`%|~z_DER9bL@#*blN(_3YGr
zFWM(-krCe4bO2Js84BZXsHMf}cn#z?JRNKqx?EfK+KFMXq_+;dOj6G&6zAenS*BYQ
z`T$KoB$R&TAT9A_BB}rfnqH4uIWF8r5X3fQjyj;<nR!6G|0pE#;r=_Q&C!hz4G1`(
f^QP1cZ%N=ldA&Dz&9qr*5kiT^Ouc4rx&D6uZz9Gv

diff --git a/docs/_build/doctrees/source/generated/pysegcnn.core.dataset.SparcsDataset.doctree b/docs/_build/doctrees/source/generated/pysegcnn.core.dataset.SparcsDataset.doctree
index 09ffadd51e5d992e099585385ba906deb751727c..20aad787c0af6cccc82308a42b2f2995910e626d 100644
GIT binary patch
literal 42872
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
CmoQ5J

literal 49897
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

diff --git a/docs/_build/doctrees/source/generated/pysegcnn.core.layers.Block.doctree b/docs/_build/doctrees/source/generated/pysegcnn.core.layers.Block.doctree
index cea7dcb2ebd3e2955e4740ba5e433b8a9272b9f6..23c8160fee9d36e17b17ef1ba2e82de2fad14887 100644
GIT binary patch
literal 64670
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

literal 104055
zcmdU&3z!^7b*NX5UG0vZmhJUpBzbJh_G%@qWcd*gwy`A}V*~;lj2~KMc6O$BXIit<
z!*q|N^@Ct1V4F0L#6t*tc|jn7K*9wAAwWpD;gVeVLXsQ8BOxI%u?YqO<dQGkk1ue~
zsdKu!y0@mfW?IZR{yuqkd(NrHIj8<URb5^4s<m%gGqP#~|MNGy&1$W2dZtvVG@Od%
zcKq>*Q*JL=4X^WfXV*iW2Rl>#M5}blb=s}6)$vC_qFk-jD=n+hIo|O%p}1G8yECl6
z&b7*3&1r<{)zRu$b=~pKRCU51^=e+-l0Nb;Y%aUjV!6?nDLXA|re0dMTJFrDx>G*U
zK`l^P`!ee^wni)a>W*kDRCcyM)+|BmyiWD3>Z<A*e~jCH)L&b#HLT9j_I%0Dl{~Li
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

diff --git a/docs/_build/doctrees/source/generated/pysegcnn.core.layers.Conv2dSame.doctree b/docs/_build/doctrees/source/generated/pysegcnn.core.layers.Conv2dSame.doctree
index aa7807531296decd72e116b6c2622581b031ee6e..69c0fd72092fcdc2070369b78e183ae42e5e3190 100644
GIT binary patch
literal 64676
zcmdUY3zQsJdFDu(ho&Ws9=2r5E!k~s?AAyc$-;KRU>l5V98i!QYzUwcJvH4mQ(fxm
zYPzZ=jaeTaIV?6V0t>z2mF&r$U9xc&78Z6xViE#-$Yyhr6L#}}geALV!z0OVHVb>;
zBnM8i-+%9|s$12!>)x7{)vV63r@QL^@BN?O{qL=NtKTyDPe1sB3HC4C?RT7J`|^U-
zXtceC?f1j&4X@r?x7$Jgef=YE?LX14hO=GklJE7pb-N!<fTHd+TaB*W?w{|6b3`6A
zTmFLJpYiQ_(Dd3dyEElXJ2U6|RcAJw3YtO7mTrYNbvAr^t=?`g)V;2~(6Tn{uD@{F
zYhOIoc+^_A`@{;)$;a%=B$A%t?R_RSy1gcx?pTmB=sSCzEzY)ZT4-@LoNP7QcK>W|
z#R^MS5OkX>y#U&iw%eKwpER4Pw=CbsMSPxWLlpLDd!yG$zN}dF3tfAa?)1W$z*?hQ
zeP_2*c6L&a&Y|$J(~C<F_PSPm>D0+nCzsZm!BV915^U!$ahaCZ?6%#t0=p649%7M&
zt`CI{pV``5aVEm4X1ifumMqGR?c4}eoC-|$Jp6Yn{<{tTRY@(_quXT4RAG>2dkqc=
z=M#%ps!Z`pvt5Y<l_fc1-~wm*Y|yuQ&b)IhvBX*DFzgMHClP1$0g0=)Ge>u7eiLR4
zdfil<loJ7~^Hz7wKUSHazi^2@9bqv-{JR;y)oy!%m5IS{nrp@5=|KE7iI!=I`U>te
zE~+)$h_jd1TZ?|jqKw$y>Ds>Cy=eDI;U7aQ4+z)S>WfSE5Z6bhU81mG5@FxjSfr4E
zf7)vmZ&hjkRBi~1?&NwShbjD`ymh9+{ZTiv2Nxn647r;&$$2xAIIneHNBW;j^mkq#
zd3=`1mldv*xHOVTzLXYYy_gsmRATI7VgM3grNHjCnn)zcSi3WE6^9iM%a~8*nPNOK
z<zChU0=VXND4V^mOuS`2(i5N3>OBP{N`+gv#p_#g;*xRS0j++D<<PFUqpVdYDJ7zQ
z_?L879~$hcJ=oO;cvp5xC|RD!;co@u6Oid`e6T>!ZI2RDnB~d%&er+Z0`xI0*Qc^_
zIfGJ>0X~k-J{UJS%`qTSIQp7y`tt)#e`LV6q%fK`R#;E?CbTG^AW4Nuuie^^f<nOc
zM7XnKw;Ra&+GPwVg9NkTbhFI{tt4Uv?}2dpIX;M-&zSUES-rzu7n}B_I!5~AXzRkD
zfxiKn|3{Wfc6&Gj@q&#G0bkTs9~FYV+VIw`X1gD5^Mgh|+<`0h<xZ<vZwCFR7(sx@
zw1a+lxVG*!dM(>O5uwuw0>Kj;1Tolxwb|%9UO3H~t@p!|T)z|XAQ`i!fK37vN|&!e
znLo`{W)dQH`{AS$thX3^|JTH4d=QY_{32^$FrDU_^uuc-Rb+Xf3LA9#&UCnawbyF#
z>cAt}Ug{j8pg6My9ln^bjiogQ^19a!<N{2tpk@h%*1A^5kzyn~d4B~=7rhorF%RQ5
zACYJj2^_oPJ66Z0@uV5}7}h(zARYpWGsc<aR<=w`IA!-n`on4+-LMJ0-9touD7*?o
z<C(1x?w}B^x8feg#~3z#;i2Y5yUna~!S1&0R>f~VZXaV88qF4~9x7J5QL!pC95<Nx
z?%?-3D3-~zO}|vPTJ;{N?MB7#)g7=~0c*qS1u!$&oE#wg#<6^M&Bq{AK?xBwtyZbg
zM8)mHb$&(MPP^&<7jcu|I6;OlyT^t7okQlq;T|KV!)GQ_{=*!gwA!>=jap{h7AT0x
z1-mV!1;0b{4#AlnD@*q$r9Ycz90=u0u{LO^>^=mk^1y_m`$4YtOX<&{NDpu&BCL1~
z8UDjZ=jTN{&CgdBE6YKz)3TQ<=a!r8VEKHhf`5-8f~<9~*Jkk~sE<{u_*8T3=9&{6
ztI+35%|_rHStynGU^q+V@M^Q&BuE%)v}-dowPs+iOEwH2&KGcV!jVrVQG%s<I-J{+
zC?+rtA|bu@nk?fEi8HDMW`v>AL!#R@@M4R5(P5;{0cScL2>iM<Fl44!6bP%S2)G{M
zv%*_LEV417iC|3?hdY?(E9c;M%+$nuc{iIc*Jv!oJQlN!WbhAXM65&#Pq79v>b{Hh
znl3Hn;hbcBnq)1z@8AL+2)9<wC9SY;@m)6rQ4FF}EJ&mNw?XoRkEP7dZ=&}tQV|p4
zOWb$9!Qal6AS)-CcOB2XB*Z2Aad1eF3MUFibEJA<zBr)V&vCgwYhWopbVjIh9Srjs
z1Fm1?9q{nWx8X98#;`>}d)}afbG(C}G$4I7Cnb2ytF$R7UqYm@EZ0Jod+7=*l=8#*
zMZA+}<c~%kAkIwPTTiWQVX{)b`DT<$Ufsr0PouK3QEB(qI~$mVS8l#Ja&In8>`E5#
z-(ji^7f{Ta-2ammGIDDfA$vT^Fdm~rr(mhI9Os4M3u-lj`&zAf1fxU#x>^NOV8?4<
zHAhFe5VeXjR$A7HORLzx_oc<II;W!x;jKw!9yd2^8K)I<ZBKfpML^7R;tOf3@88Np
zBN9bxe+TOW?%tRybe`jtnpkNp+|eS~KZ<o6vgnY^rc)~n$y9pyT7r8FdJPmRgHt`s
zrQIqcm8R3W)dP1?)wpstEgByVInoM(dn*?tQG0WX2=1#?;;D5%o7Fv9I}nv%^feu7
z%c>64`tuHo=&z^6nt~L!?k$jpN7PrNh!U9bXPNKc%zPiZXyCp@rQx>+)=RKb;69-u
zO)WN~a$$=F&JW}@0_X3q!1_RVjRI8q@tT1<Nl?sJ0o=!Rg7Sp`cc<XNGJs^}>`H*U
z6U_}Q2DsONdB{S5yPxpha}VH;`#}<hF98S#(kg&Ehs%6?bFT+k+F#Xlp|a!URMuN9
z%vs~9eCk>pwC=y5X3OqJMeBNqq|sN*(yt~gvg!IWi4E=<uz`F3z@@7DGU-}adL&xg
zjaNYBOR-VdQ2lxIH2{-R@RA+GeD1R()*<&<`g8aUxZKxB-M;oW@MV5}i7f?V3P<x(
zn!#b7vV4Aip3UJpp3mlCR;z+lF!p@S$E1xF9f4O_#L7RL7A!7f&A9F?;CUF2?&U?s
zPxHX#<=dO>THV3(4ZG#vzPyaSXqFfg5YgG*`ik9Ui#@c^Q;EnIVk$I))d}-<#8QT`
zA-;BkCpM4Ui98jrtDMJ@c=Yd4P^VW$F4A%eZwu2`GUbwZwgVL#&H8{j@5c%ZO>1G!
z3--n(uZxA6VrE4@@;_GUxl58)IgVCcOS<;jg?vws>Se8m^S!J0Y{IYfDjF#4QH?j5
zVXN+%WX14?;mN}NuwH~3b>V>tW$tBWqyNny;l<SdD+Z)uiZ4K64jB6-#^pXMNzbE5
z5m>3X3co)}<m5(8;&Ha3DB(eVv?P23ky12DHW48&8o?es;t&-#X&OnwLr)6t{(yPc
zi3_W+oP*j-2%2)Xu%6bnTGGOUJF^YL2%pgG&Y*oF5*wm+fHFHoRl`a4gectF*`SBd
z8^`%G20Oc~GfUl+-6=&IGHJSClB+cL09d8xJ>p?TwsfNhLU<0}rl&j@#>5j5_ZML<
z5|58-^fZSa5=GB|1{CL&T0F*5Ithax2)8UIcA+ovz2WsT4c>zZ`nLrVG>!b>si9ex
zWJ)H(RM2<*ux12t2_}y!zi{sWF%PQ);jUCAkXVOB%>x>blWjzByo8Y=SGF!zl2+I^
z7@6NKxaRkh2E9KGgpAuS;>1~S-NQOip=|02&%u1ZK<6BaxKeaG=nb8=4YU&Lb7DX!
zf$M?+msp?UTIJh9tj~!K$QCc;wvcO-@J>X{kOD6;Nfy*qv3hW5L#kliH%J{t>s(r%
zB+yv6zQ@2wB3wg8IxJlI-GbrzFARDY;mX_3cTpO1cECkXau+Fzf>gNPpz#fq&Lc?z
z_SeuKx_#C_uXMof1lOkxxJ1Bmz4EP*4p_2=Dqznba*WH)O%xMH3$(9_Y=Ysmd{JQU
zN?p&y^;ZpSDdPH%8R@XN=64Im_1_ruF5)`weUfHwi54OM4zH;sFnav7b#kzPk&6!+
zin3BDA3v!i&^~_Jzlq-E$4~Aj`8dTp&kyx<;#2wZhs*=oaq7nWh>k){N0tD<DQJ!E
zPZ}tn1^^QJxB-^{0IpxYRnh=J9dH21=Mqnp?luTvAqy|;@>?C0<-4pL9R9F?qEpE7
z9RpG!3!eoRmE{k3X_^|zJDQb{=VlcoGg-eeUkDbTZfe4A!a>8?#QemNRh|TcScP!W
zASlJey=y?4PSqO`lx@bPP1Vy^z~Fp<f%>-_HkR1JoCPYqi>Xv(w(81r5BCG$H=Cq>
zNMZ7-yC2DGIz{~%MGNvMkuyd8mtZY2MRjk7Tx@RYR`Cf-@<&Ke-E?$sVo^*-7bKtH
zOMEXs=hI+IExuEuH{p)}6&|7a9i#z{;+lg>K9>NvFB$-xczjQ*;f9az#Z+YqvU~<y
z1s>l=PXeOn74EmCRkbVq)czY9M`WJbC$dG41a8*Z<2qhRM9+BeFd=?)mv#@!nbgC!
za9ZrFb$`Hu-CJ?_{@ZE(2p@|;v>BXTbGJ@WKD0f4D&#3dkaI8FoGG?KifwpUnVRnQ
zR=Q3397Z_vO138;es&UnPl}6Kv=3*_&>!PHpHrOaAlZO1IY;prWfz`<PlS5{YXv(f
zyS2L4s`(vT76{-^%Va~3vP?4iaL>|f-*m?lZ#wlv^p|$>y8E-8hW2xD5@+$QyB6=U
zdV%Nn*4M4>#(n$=e|SI~tiq|K1?hG_+$(*nLHX2isMoHQCMM{)M6}UiV3S0tBt7~o
zm8?cX?53{L=Eh?czWjEiRKoCr&7@fG#aS(JwSp&2Y&&YNOQ)j5RXho?I-S-=b+t`w
z_=wX%mDP5oYu9^SANyom8^mc}w7VPF=DNbWs8q32wQJ*?PMdF>S%{8>RgWB@U96Yv
z79Mu_72j^HqK}o;mS+Wb++9T{r!5~lkuBV37wPFw2O%5aiI_N>fxFmzyV6_5#y9Mj
z^(qm2rD5T05B8r^ll*q|9GBESkEUP6BqDa~cIHPgDjp<{Odxo`ors&m)x?IOMiU!+
zxglXT(U4Cqbb6%CE73mJ2A082;^9h=@lQYUYGUm*tm?UjeX&_*Vi#-UA=XC2>mhnJ
zX;029ThqR1wWzU2ZTN;H6@JD!FuK*_d!k82$d9n@TG*G^=?WIc!LA}G*#7f2KZ6xL
z>Eo@HO3dS%6q@nMGOv1FEIl`>Y~>ZQmr9P+THR#p#40zAcx}{tXkpjr8Dus2c<vb6
z6<!Z0;!b-VN|+&DU+sG9AdVWr_Is9uO+PX(#X0TECk)345UU+fXmM-#q{+~Tru-3f
zXqGvkZ3lQ5dI1d(8Z>HghQK4M&CAC`P8Z3PW0eisbxk?C;svzD-L6pMkzaWia>5gZ
zxC+I1_H%JYOgWt>+!$F=#MO)_k%7;x+v^_oPc!@E0?2T4UrD)=Fsh#0gwqmsolr4l
z)?Uet*kth~zYx|YYzWA%y@q`ecDF`nW+`cFj^|yd(*IbH^Si*&N<>hhdlejKNx&%8
z4nu!2?BTqO?{$%vICke#KiEZ$X2l>VqEQTg-1Tx(0!D^PB<^bjiduo&v@L<=c)ohE
z@q~u#d!kZ&I~vp_t=`yc;s8($r-T|ca+vg;0Ty<Utl5?3YK2M>qQVIwuZJ=L<0x&V
z;Aa=vX%sq4l#Iy?Wn$=J7WD0)mQWC0l}dE91sB;VnQG%$g&cf3Iw`}vIdGf-ZQ+y>
z3`gnM-4N}>ut`IuA2e|+7*a*qiiT~wQ@dz&{Z!&s2(4*z2+9?lya{kBjnK=gTyne?
z&fHL|5qiZ|3p_=sB}V0T;{+B)>#S&@SWNVls}!h!F|paMo<pMyVHG1OqabOBhB#2k
zR2zO!qYunXQDvm=guES*gZ**4>oGr*!B}_X&L*PYCk+K;rE3zjKx|^)7@f(_6rrN*
z#uOn~>w3M8^z547qSG7LOWi71u5SkmJEPJ+Q=$s}PF|tkfj`($br=3bPd;^pztqy}
z2U>z~Q$gmKO(OTUu6IeP&=ic;m5=6dp7g%EM;9^sT3n8*^U6J%UDolw-}{!ADoa(q
zMQrI<CE4J#6rEmA_7yB{z7xJ0ms-fFk(KkePg~3b>2*+f1!o$Y44`*^*cOBH3Vy@&
zn+sr-)^D~^H|Y%qPqN#5g8^T?xfb)t)as4-4tAOke+|bEui8|Q?d*IVvk%t%4o*}i
zs(i1~#IZ`U{yA|(T2VTf6Dehvx0PNqkZn!rAXb{5K)3vasrwp@hluMjA}_l?!ARX#
z<4-yr)0vRkZ7Sj`buC#l=<|l(%NkBcnOgFz?4EZU2$nKVzV#pG>i#%u)qMni(srzB
zZTk}(0Ft@A9%m9-jx<zn184Z~rofo{M(aX>Grvk|bDWV@C6c%XoMI7>86_P9MUdvx
z3Vu0;a#o6e6Raa6&Ablp6F;!y<X0bSKE*5qtht7;hQa_y!^0qjGS?8w3`9xU<^1^(
zF7V~c=t|(rCp3PM@a1ESRGS0y_ZzQYv0#M8MOYGa`ro8Q+5KMz8gRX@GCKXGfnWli
zxM}l!H#$1qBcOxU3=M#Z$T%jgwiQ5h=Vn?{z|S?)G5k!i<;)E7?8p6qt(4MJDqW4U
zSHW+HJU4-LWaN3i7J10fV*;IB%s5EF?F2fj?G(~%C#2!NFT0#FKSTw*+<`^~yp%M?
zm*8cFk!s<k7OitHFR!+jm&Ll6@mlxtvb5U0ygazx%_6i)7Ku7a;!(N=;CUGrSgzT_
zX)aX+Y+F~`2{#)@A2u+E*jvQgha@M9Dw*`T3Em-^?ao*(QgMf5&!k_b>&hl{-KX$K
z4EdqzZY-}!Y+mId;Ix4S#1O#4KVOH@hk%!G(2k$UXs5vuB_9YB!+@CcMs)gdC8E4<
zSuq&&VX$b<8xdxr>Sq)-EmDcTSHW*M9{fC5M;;HfbKY2Qfa4hEyg$wC1K62nb6$CZ
zJ52)u#X#BRRQcg5hJ#O{K`|UWt+Bl{96ZTLwZp;7H}OPrc{wsM#*g@^WDNW-*hG^_
zjE0+HhedyjE1VimcFLkgh`T+KKIxRf?SD2ft{7T)U+{5B(m#P&`D!egiLb9Rynewz
zV*#%`obq)T9bR89;8i^R)}t#Y6yO>?4PQF1z}X+&Y|{#q-8vJa?2LHOn2DuHP>fP^
zPbl~eL3R$TBZKVix}rN$dpsEX0~WZ*zr74&BgapiPu1Uh8QexUc~szV730m1WP!XD
z@-ur=o%?s@sq#HWszu)F(8t?+(IVOd5+8FnXNZx={Snfj?B1mbCmJ`#GRHq<AecZP
zZq|IijgCN~z>A*O>&vl-Qdi(bbVXWJK+h66R6Nv(n#^F&8x%GzQsBK_!EcB?4p>LV
z9&Lda>pdRuc@49VuE66|`Qa*H=5aJAVCGSc?WF?m5k{(onLCHVOwJCks8re<a{@pA
zgfuI=?>5kCEbtQ=2qxf%n>*j1qr=bLyh_3TIs=^O^oD}Y$)fEjpyrp!c^qoCL7)uE
z{EEVKMNsD7DfkUh=0AXSWR$r@SK*M#;{ljYFw^J&hEwGSqyU&dM1ulgKBh6d1TeqE
zNVNcSs@M)r+65ZH%Vt;;aQUC4RoVSZ1C7Q4F5ff|On?hFb-pi02bY%$P{0mc19SmZ
zG_T^jb(PbqQ^ng<K+T@*G1N@b2H_0W?8EI*W>a$tenYG|1lEzU=2k7%kj~=)n-a4P
zz-AAhN^xIjW>S0jOiGS}vdcO1gH{000y+@@G^6o_1VEFF^hyH|Z6V(z05R4CfF2~R
z%I;|cjm82%FEJ2I01!8IzAr}yAn^cI?7-Kq?r^%HHIAs2ingYJAD0}-D;*p;qO%1V
z0BR{LS)|x;6#Rw&bP=p01JG?c01{e{2Z9>RI=Xs?Q{{)KfSV`Lpnw}oV|fW~-oQw;
zaP!b6mbaIexq*L}*2{m6tD9OcFC~IT5UEaxUobGMSS#oKz`OFQcnqScs{m6@ZQ|vt
zyjK1p1C0fk@<7VhVRSGR3)*x-Nngzo)leW6HC&OF6d?M?FpvPzNopzsp<hwhuLy*G
zNx^Rjp<f5<$PlWn;h4_j0np!Pw$TA7r^*jY0ifSQg91RmsIj{QpufvVwE%jH;&cER
zPd;ZCp^p)53?}ZbS;$>>ci>NUz97d6$vl>dY`cMA0z|km^Sw1Xh&;fjZ^@xX11O0P
zKn?{IvB!3^tt!Cf6ggJxu}zxIK+K&A>lT5SlL~%0Y;yM4-Urr^Ax68$R?>VtKy!>)
zNCz~WDnE1u&^&?$1<)MPSYHB~+Zd@9XyySl?9dgn8#aOA?3s_lF8n;N_=O_=ur0!y
zA}k5)tdSOF*EY~#EU>d;Aeew1ZrXg`jSf3v(-S|{tepokvY}uj_R$t=O93$<Igvxm
z6l*MlE<dd>Vi9zCr-I)QT|NNTk<mrFkCrPv9$@*$%s4t=;Z*s-DS+jd(4YX8pVAm!
z0+zQhQZ2B&bQ4oR9-rymQqcEGG?f6+=Sl0b`x^!tj|GT+%|I{#MBEkmz8)QjPV@RF
zI_9j0BL3P14o2+V3&Xb>6>n65O5Y@pa#WfT4Q6oZFBCQ{f=gdl@EhXNcfdL_E@`(K
zMQV=+nZCx%gG}8)>*LJjsZB;ZmawNYj)bzy>GR`OVALdDc_T3DPc=@EFzPFeREJU6
z(TJ!?y*r9u8v0V9%&VRbLO7#2RM|aXKq|7D3!iVD(X(1Cjj-36Xj7V~h87oMX{1O?
ziX=Wwj^;@`Nlj%k_(6sJie&Kp3Vy>3ei*DHXRvl@gy}q<^u3qaMpsyHs{F7NNo%1&
zk+h2%yGu#?BaBp+wBduBC@hwj$-F;IE6W$TvZ<Bj?U9(#OiPsrZ#FQfSXJhIz^_KD
z%ADH7zgKxx**DNwKqn8Od>uxI&Q)FzW!?a#UlqzQa6n}*99d%TkXky2L)r9$!u3G8
zkKo6yRKE)N{kJf(fZyF2IWtK7DTO<VAo0f){Dw&U>tG!jiFH2?zK~UaJfQrqnVFEh
zH&RW-qGW<a$;3IF+2&D_*@18)m05Z5RCal*`3WLG{EHAkfcP(JTqc3|M;NIV#LpSL
z7j4nP?=LSdGliJu%VzIKW6@2gD{nFABnfUaa?BjR&OMX7l4akZq>2pt8?q-aa7u|z
zN&oD8&9@bnmXm7+FIyqA41L?mUn?3g%&zZ)Rm!eO)=&C%D^IcexvyK1bsJCS2>%=i
zZ!?UScx}L#BaQ;2Oxm?0&ZIxnxMv`f@;exPEEA6*_zJJDAHxLU(8++9Rupefkui6W
z-Nd|JG?+=37l0x=0h7~3cW(cLg5NM(?gguqEt`8ck#=4msXd-dI?BwWn;3Aa{6H0B
z%EM?-j44%(>7`6~J|oqRDZ@A74}UphyvuEK%rSDftE5@kZ5U|9ZE=;0Xv;t_QABfd
z=lgSX;CTZtX8Ef>#Ys6m{G`YQ2#GggqIMQ<`c)Rs;wf&bfx`VMK<a67JO`;=sm3!<
z^)7`2ia^y<3VuVVdOui4hN|Pb?Qv=4#{*bzXGQ{G-M}~M@^_@7UKWv&DVT4df_Z63
z{FGhZT7Du3V0#7~3t)Sj#!(Wmy_u0}f$hT3<4JsYh)zN3Ug|1dbSk}ld+=qvEW%;H
ztJ-G*qn{%?mfg=9*l;W``WXYk1dMX$=10%yF#6*%j7Eq4OmQuuA6m`5?8>yRfX#1^
zqd9EOapZ`E$>8R<6c#Unn}4q0H^j|vgLP!wTrk7USo`q+=YMBb(p7q#DnFzJAa2_k
z1L9XT9*_X>PZ+5d5HAe{#Np>Pb>JwVGy{&}s(9CR1de0tKLN@c$i8Lwdi=>wfaK^V
z+l~b&_ZtW%fRZ~sKdMFt%5yT5iD{K7P73m<-lVrsquS)fg}&I_Y-bA8d@*@FRcwmJ
zGoX3D!umx(^IiqN99B8I{LX-NWY9D$HY4T7gPAX6MgnGD$BRu03zV9o=1jk4<2qhx
zDk29zddJ$ykAH!x=RqpU%)1#^`emuIizHNi0V5p&Rfo@?uMVm{$NeX$8jyX<Zr8xJ
zV?kBVKrn%--0AsIH9D#`WK@-2O0V5fz-zvQBf?ezs_~3X39qlXa=j`*_Jb4z9Ax)o
z#mwOBhZX)Pg0t^e@XJY@gR>t2>&Q5J(yTa5+%%>GxbI_jx>ECc-dcWY2*CX`Iu?NY
z9*wUgz<n1Z)dFrXw2b8goAgr>I-HF?r2V~?sD>R+=LyvQ9$B{R{;q*l#{#v#Z6KI{
zTJG-rcp4pQALgJJd)nY(O+p*NYu*Z}codW{>C5AUR{5sQ|4TmRNLorrGZ^|^g`taJ
z=(iR8h8X$}U>zAlwI@;}&Bs%y{x!1@&~p=Sg5$jTu`RH2@2(gt|4QQ%2`j(FNVQmb
z)Eq10XF7#=5@f299%c77{Q04rTHj(Im_R0O+<fnij!erOnbg1Gr3Vo;A4e?u6)eT>
z@z*>zJt~U9S5h!=2s@w_Gy`W3E4)(#&dw<K4dLu{U>zCG?$(urL#!|!XnTlR3(!`g
zIXFd2YU6o{rrl8tm0eDqpAG`dE}&si_&uQUhy-T$Gg2*>;VqSBKWG;fYvv3IjJ=IC
zD7$YlkbW!$))NMT2^iyM&G*~rFxJX~3VU&G5&U8d9JpxWh&4j~%Y$rVXY$*F$~mpr
z+?iz8W_wqF*uSDs;2^d;(?JHko>4fZ2zq@)!EcCOp91U1=%wA<nN@#0u=UTGnE+e2
z5^PbdVBwI*3ftb9#7gFg^{oVG`q(PFyodah5m5J=5Jo`VKhwBRg1QegQZ3XS62H_V
zo;|03WHW-de4+%>zDkmo-LDu(ITlF!vVmX%(zyBZ{WChGiA^?f(2HYY><35-0GrH~
zTbDhSfl!%o)BPy`ZOdE?X#17QWngU^=(Dwa5m@^Njbn4x>2{&(kzwsF<DyKq_?Q;!
zzR!$hT9a|={6r8ybrX4=ziRw%H4c%0>bs0o3skqiN~+0(6;(g!8)23)eF9&1ll*1(
zPDL=vV<gEw7WlfuKrjJc+^G3p8y&vHL7RaL$3ue6LRiF_3u8+|U@T(Z1e8Ur%5}1H
z6d1fdJ2+I?45Xb`II9Sxy-vX|M_~@6t$}r9NPA&nNQ+E3CRlqlGngr?aq9d85wNy_
zh6Sv>O5+p>)*fc0T3EvxSTfa&U=5a3{l0hvZH0IeczX}&fnV)0&|xg__OyXu0^YcB
z^Sw7Zyk*zT;)UV@_!9G^rk(7nV%_X)2H0Zm&Go3L%>F$E0f(}EF_gvKWH9X03Xc@Q
zuum!Y4KeKVU>zC5P8nlZVgaP^7=Cc;<IGY3uYJ;llL?htFWV<gFWFs+p|Z=l^V30q
z*&m=I0cIc7ct--WXBep#%x)5s$=I6ogZH$DnLjU$7yh+$326Nl$y;{+!a&xsfYvt*
z1QVdejhOGH(LpPoQoga*#H+$;Yh9~RGl378o`cmAes+joU1H5B*TuvZ<cM;!{VAYo
z_wE>~=F-h)U}`T2N0~kDQt%tXR2i%z!<2Rlaz^{{K-4U=5+Le&zMU=-YJ#~uvkrDW
z0hKy_$}VpyKM@369Y?1EuBJ6!lHh6^Bh|vy%TGI2d(EyiS1VR8@F-I%zT@>;4LXnF
zbsH5A3w`WOdw#`hOWQqga22@L^s~Tr1zSuY@By+x*?p;j{$qi_7aIsBAdovI-}9qG
z;3H8L<=a6m9*Ye2W6-M=Wex#@7-LZ}Rh{HSx!B;Ar8j}uY!3?HYm&oxjkYJ-MF#pV
zC~RM(LR(Yt8$w?XtRq98c7xl1{^J3^I<phNFZTygIaPjm3t)Q(8Wg~`tnq;aZ08xN
z4%kM1Z`RKmNW}CgyB{<l70J(q&$rI#$^S~8{63!9Aom-MW_wMamNGR@`UV~js&+Pr
z-=C2giZ-vv`2Pqiij3bWH=W7$|D-T>k!=5hg5NOPe;=$PXZtbTd@QB=cryKS%tpv`
z_O84Jp8KV@EU<Uw#nDlAIemUqi=6*Dnie_#>l#l;IsYsp)#ZFxIc>G-y_OZ&Y{q4+
zd%bp0!3%;#62y})Jz-LMe4ivPyMJdO?N~~W?->Xt(1)8b-%q2XkJu&PI~JC}=`=}q
z!vG#6>Y*h^1UwRL(Uuj!Q`sW{kJNMqc%BEcQD#^-D)<e7=NMS80`SPXj|X^eU^dc~
z7@R6Uj0N1>hXw`QT&J<W1UJ_*QXSlkTw*+GAdx6B9x)&lNzR4Ox6bHE-V`MUUczp(
z7hf49VoWO%{9MEKgJzpeE|as07;J32vsAlib$#V(i`WC6yq~IA*9ru90@f9!hx}@&
zcnn~#y?V341w{&vH!1iH^ZzNZj-3D6J>ZE!$Mp2-60;Dp|0rKwk-`Hd2p$NnHZM~x
zg7BDN;gMNzIl9CaTqL%<s4Ba>zx+%QIPzhLCU7Ls_))@<H!@Nkj)eEb`^GB`yjQX5
zwJi*pbq~LA&}>ufZdEQhUdzTC^{BK-{op}d(u~$f9O~{TNz=0X2?H(1Qto`rKrn%X
z-2D0e9UTcD;z)>9e(iz6z!S(fZ*|vv1n1KH()<Oyst#WU7g!dGHLSq3FOx6%BFfgl
z%hWS}qA+9;Jo_UBzagIeIao)=v*+n1QqXujRm^{3mI00(WH`p04cwZTpAgPYJ<mGG
zP)i*VWtX>=AHxEpzKd=JM*W_~Hxfqu4kOiK)PneR;CADL*R9koKk(TcOIljA+KuQf
zKQSs5WlL~q=U#?GCH%=&-Ex$XCS$>&83Vxt4sjFb`*3s|5|g8#i$TKxiij+#!|-U*
zR+d`gH(83csQ{uo$eA37rdVScEP8>$m_@MYgo0m=lAMh~_kwj~EYkia3s-tPaCDRz
z2XHjU%PR7ArgEC&l~WQ2WtVg12dw~}htYumo~p(X67W2qk!peGX8iaQhZ_C>ojrD<
z;HAQd1dg%BfHHxXRgxL+LNt(fEbw9(2qxf#8#3Qhqr=Pnq8i!g*aqkVDh@6UKUk^-
z_^K#y#E&x2UDGBN*zz=al4HvxHI;#ucPR{61X`X_@EbzQ`@uRgv}k{nf$2ORWO+NY
z4UlCwAq!kR!CajxZ*~*3q@n;XEo6N85i79e8ITHWc^l(0dYjCf8L1Xq?n-{9L0!kt
z-W~DcY^cDLTjqE}@9w_UggpsILwcanXPNlYv(`OXAryJ=+hi%82iqfIlg`-^#_uRB
zDCdIq&E3DHXuvQT{s^p6GHmkA-HB%7iFo0e1L2m1#J29UlWZ{IH;uyjTjVT$OyDyb
zn@U3_59|C6Mn`&4NIq_NJ+`eykIgZuC@2T#vf>xxW5PmhDuTVVFAnzExY5KTEZTR1
zCOdVIqh0sn?d=MF!(cxERw>vw_u}m%x(RNg_;`|Gk{Jj<n7bi>Q{@M(0Q)K$6j`xF
zV|*zq{+=a}7VJ;3LXtK(HSyb_*vy0-PpuX!AzSjcCO|$JHZCg*^Cd;*i%Fldd#`~m
z!UE5miY>5cz$Gd`Zh?Fgr*I*k^c5sT*}VgQdMm?8!^yhW^807Dk}pnho@0zBJw}JK
zEw8;6SSu~NZ>17w%4#*&+Wl~*VXs=fRzT}D?mTblHbqM^bM!N3w{r4>TOjimXPa}#
z<u*LqTXCmx@5o#GPhj8DR9Lznze&+t=>@jW00nU?UrM~z<6iUW4{PzPa~Q3qm6Amv
zsi(4HI7bo5FN6>WBq8`CqoF_D=2k%K-i-fIll!wxK1Z)(zx$5GduZ>U-&<eD!t;H7
zrmp*ZN$&8L68=3_la|)$LZi3d!3L9{?$~~*#9{iV#KzTiPYztFx_1p+8)}tsJL2q8
zvk^G`GbJ+2o!~`$zLzD)W?OpwU`uBPWU9K4D6YMF;F^0F;TK2RgM6x#GM9e9OOazB
zW#*JO+=;itr|1eds~Agvg#w)yj=NHgXU5ZKnZ46#P-Hy)Wd*;SMmdW#UjXaK<Ei$A
zooVF}AJ5?-2u0GJ*@B?{Br_7QY0E@n{%{MTA-XplkSU_YIPxVlBSzAXYs^kuVjTG>
zBh`(h8W4-6z=?&TUFYj2hOlS2l$*&+@iVb9Zs{{frdH*psF!83qKzuDa_2R1R_>IW
zPNISpxpN@Pj!i|9vZUZQOv>xQI&xBKx5K4$A5TtBGaIRMlHbdZTalCVXh!7ZHjUM#
zoSa~!S1u>-DcW_uZmFEiClzHSAGU{+s>;fDD}cmZ!^KoR>0ZDUw?(wTG*L%BtzeY{
ze0UxCPH?hPXt=D@&vjIJmYo;#TG4sEf+gJA*+`eZ?gVNG_ac1ZZo#K;s@}4Ezwd6N
z%a7CLNql;W;{9IMaM{`E9O8v&B2IWyG(|j)qZ;<{mbGDbeSB_TJk_9mr0Dc{=li5?
zLb^bt3!D_6CDPkKT0PGmnwFr^HlYy}vRktlBbzXs_Pt)WZugy|B=DASuHNf*G0Ccl
z>u1BA(Un%SZTHWH+i?T{TYuL4ez>>c)q6p+<u9yuvE{*TH~Qi9Yphleb^81IqNv(^
zHk@6v+jJ7e>w<q4KfsR7L)Ll+Uv}_rYH0fczLvz-UblsBy8^FXTe0dF=q@ZwLtVIU
z)$@Y3hpkJ=oikg)UA|op+P(GKWt>7@@8ilG{fJ?wR`=G|Y0`-H%KVDmve}i|rDovN
znD-zrx)TiKPIh5u*Y0@Tpw_Z4+AU0$!V-SwHU2sk?zJyBVJPhE==l-RR5;bJS9)t`
zZ;pP*4u%3n*S6MiWfsqp>Nd&Ue=?k7zgS(f+jWn2dH2KFUa)%nN00kWd_I)ES+l!c
zuUo@;pGM2>!pJ0QJ?MwKy<X7i1yU<htd)LvICCe{g!>UhYB<N+O=O6;52bHpn8Q7!
zgAYSFFi{IS^}}5)97gI{Yc?$2!1t{-W{21CgGiWsbPycqrpXLDjo4j<ny^T-QRBOV
z`p$GXM{}84aw*)}L`3ak<47EJFf6;!M8I|17N)Uh!`<u(tlRd<{mG?{Z}%Er?eaRs
z(;oYB$Mfx)%*mpp9@H*2{U(pk-PjZ7(~K922q|ZxY;cZ-JLQ=a8r>zxYOBo_lta4C
zb?i<JJDzOhQJn`8U0JcvH3fE9ae|=ZFP=DY>Cz<}o(mkWz2J4%PBiR`CqU_+=!g4>
zgIXkxT41lk$^opp9oLUP|Ky!8%UpN0p6Q0JB;6c}x(Pf?_7|FVu*$k|g7p@<n8man
zDZu7t+rz^MsP$T$Te0{xzeDbQDm=iXX|{d4OWT|fab%+g0(nQ*x)gs!;_dM_u>I+B
z&1tSVSR`-|rjxXc&<}U|n571_H};UeJ~*#o-}%>C%d1<$f`{wa&uZ1-U!GR*7=cd>
z+!uNs2r~!Z37P@S!_)mK1c_H~wpZcmDF62nBKW<PG~FJ1eZ_7dB{$HQW7`2*+h50T
zvR<g!>sGT>!<h>l+93dVGTdgjFZQv15N_v4fYd`2HQNmwO-0NE*!_bioaFPp=m;Ak
z1E3*ngEbK!OBdn3)Kz+~7Q2krR^u<zv^TE7uFud#{@HyC4J1$Ce||Vim+4Uv5wRO*
zeW!wz5q2Mg%Zr=`+?`uNzZd`Og}Y=gvW9onn*b@244v^SlxYzi*Fe6)>7W;UxxV7H
z;=o{}*Jdup)U&A;XQN&j)4o*u0L^YdD7`=1mbfz!mVg6wIt4(0w*%`4E!Z47VBDEG
xEv~;07I}OBRg`nsa!Om)eIF3SJB;BVb$Lg8nR&C+prew^IQ_FUYW7wZ{vR-wL7)Ht

literal 109971
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
MItR&d+p`n@ADC;DJpcdz

diff --git a/docs/_build/doctrees/source/generated/pysegcnn.core.layers.ConvBnReluMaxPool.doctree b/docs/_build/doctrees/source/generated/pysegcnn.core.layers.ConvBnReluMaxPool.doctree
index 541b14d3a65f0b1f66766b2b1f461192b96948d2..8137ca9dd91d89ad824f5f5fd3171fa0b892eb5e 100644
GIT binary patch
literal 63988
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
Rp5tJ~>7Jocv$MSL{{gZ7KzRTF

literal 110358
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
E14l(6Z2$lO

diff --git a/docs/_build/doctrees/source/generated/pysegcnn.core.layers.ConvBnReluMaxUnpool.doctree b/docs/_build/doctrees/source/generated/pysegcnn.core.layers.ConvBnReluMaxUnpool.doctree
index bc1ac7f948be56eff1ce5bb5e6c0c4062c16a12a..bc7a303b51b774ecc224b78ededae4354a6ba137 100644
GIT binary patch
literal 64568
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
Noc?JVHG50*{~t9wFqi-U

literal 110901
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

diff --git a/docs/_build/doctrees/source/generated/pysegcnn.core.layers.ConvBnReluUpsample.doctree b/docs/_build/doctrees/source/generated/pysegcnn.core.layers.ConvBnReluUpsample.doctree
index 138065b0fe4285d469ccde5dac5d702365626cd0..7ae0b90e42a8438aeb0b968bbf44dac505134158 100644
GIT binary patch
literal 64414
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
QSYyWNoupB-yEOm*0j)9o4gdfE

literal 110588
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

diff --git a/docs/_build/doctrees/source/generated/pysegcnn.core.layers.Decoder.doctree b/docs/_build/doctrees/source/generated/pysegcnn.core.layers.Decoder.doctree
index f42921f7fe87e17d8af1dba21fcc9d66bf68e036..c5db12d335ea6ef9b6e03c97981ebcc795e9b949 100644
GIT binary patch
literal 71425
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

literal 106188
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
EKL@ctrT_o{

diff --git a/docs/_build/doctrees/source/generated/pysegcnn.core.layers.DecoderBlock.doctree b/docs/_build/doctrees/source/generated/pysegcnn.core.layers.DecoderBlock.doctree
index 050a01236c62ddc6683a68129434b660471a5332..951a1fdb5678105b9674507c191f4ea840e50f34 100644
GIT binary patch
literal 63031
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
H#kv0vadfvF

literal 108113
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
W8(tRHEZ{&&FJbi#<EYu4nf!lz(y^TY

diff --git a/docs/_build/doctrees/source/generated/pysegcnn.core.layers.Encoder.doctree b/docs/_build/doctrees/source/generated/pysegcnn.core.layers.Encoder.doctree
index 443e2179a37b744b3483d9770eaed40988d9e567..3c96ed7f91ef33f310ac27623fbe2e44ce193639 100644
GIT binary patch
literal 72148
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
E1-t~=Hvj+t

literal 104202
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

diff --git a/docs/_build/doctrees/source/generated/pysegcnn.core.layers.EncoderBlock.doctree b/docs/_build/doctrees/source/generated/pysegcnn.core.layers.EncoderBlock.doctree
index 140acc3978a3b14f87cecee09fb329a27f7b17ba..c995fe994747a627df70b5eae6aaef20da4f50fa 100644
GIT binary patch
literal 62871
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
YZ;mgsXihij`3L5l-borYyNh%GAA<pkQ~&?~

literal 107793
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
RzVINF(>sErW_M=t{{hMBT>=0A

diff --git a/docs/_build/doctrees/source/generated/pysegcnn.core.layers.doctree b/docs/_build/doctrees/source/generated/pysegcnn.core.layers.doctree
deleted file mode 100644
index 5cee477b5e57fbafaed6fdddff78b47cc155da38..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18137
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
aH6I={3r}32XJ2@W3J6CVwA_cy)&B#dFKmSX

diff --git a/docs/_build/doctrees/source/generated/pysegcnn.core.models.Network.doctree b/docs/_build/doctrees/source/generated/pysegcnn.core.models.Network.doctree
index b897c77c0e8f679d5d321aca5a887450fbbb06fe..3b66c63724c97ade22e24070a3b643f8c9103532 100644
GIT binary patch
delta 10763
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

literal 106918
zcmd6w3z!^7b*NX;?rL|fmt|X6jBJnJtCh6!8zaAB3)}e07BR+PTdO-eJJY*8t=XCJ
zbdOeR>|iGt?9hQ2h6}lb1TNtXf$#_+;StD-hYb!%AV89v<c0(T2_JBYFA$P@9#!2n
zy){)m)6x$5K6`g(&Z#<e&Z)nvs;jFX9DeQ4(3&Cq7jE_&Zl!i?x>zpP>Sf1ohhyb>
zskP|Tg7$0LJ0EI4(4Gv(o5dx+-fEVdb~pqQCAU&7H=SDha68<D;z6bAPYeC^zEcV+
z^;)Fvj<}=l`orx>cRU;kDnZpzz6y6VmVIZTRI5#w>P=^Q5sZMc4m!b7y?LaKdZ0G^
z0_PaoW08KiP4+^Cr-Y-8B3Kx--ILul?z(VP*ncn_u2yPJ`(SIX7)}&}pjnw~1<-D6
z=ekPS$2P4mRg1n4AHwe=wc;ZGHdbym;y>n!r6Wye9%WkL`k=UgU$x!MZqD6+HM%>(
z+xPFAxv|wOmS!%w=#q<O7AnDvZ0rnp&7WbLW)_^9(<}x~Ir>`Xi|M8htvTbs+SZ&q
z6pmDCW#^dUNcORNCbYxNgVWA||IUN|E`a|gu}$ENW`$ZZ3ErsG79bAcg~HMKNosPw
zQp-ydRU3BNJnxPk4BEw(JLT?<9dOV+1KbS84nty<R@gcT-)zEf3VsE=7qprki7_rr
zo7_oRfYO^ux>&2#gJL4Z!clGjXUw+f&p0JU!La|vkzvD%-JLalY_Yn}Zxk`%#~Mw?
zcbZ3?Ha73MP|9;ed}m7gW}GhZm0p~|tez2B-B{j-afdk67V`CZt*hhI7tY(jjfVb-
z2`2lbI})BI>rf*#EgjJ1+fIKRPUjEzF86M1{Gqt<?maTN<78jbxb+=9cv~3#-D$vL
zZw4IE88BS0RhJdVh@LPMZfH2QGPt^M3_9vcf$?y(QX?3|P8GV_!m&f#IS;ox4SqRr
zqa$y^jYliaQVFoN2g*9qE~>o_o%S%;{EJB~RVZ8!<^{_Q%r#k78<^|Nm+OngO06BP
z^Mi6bJPAH=jy0;4QYC0VN&-Q#x!?rt@QeavSgY#zdu2}S#k||gc?S>!)k?YT*27UM
zw$u*yaQpT~@QGAA(n*F9Tk;^Z<N;$#hQYpOI~;a{#VU1|7smnPPUpnVyQ;VXQls3A
zc6h36hiVM8gF1QJ9Sz6kTh%Hfw~n^m;O@YbJg^2TybhC!z{7o~RIdf<^-R4Wjl*T4
zxX>&%TqQxmZ8sy5E2X@|Bh?%At!`h(sq%+l#wXI{Hd_BNxLTZOnjBaQHhomM=Hq;2
z2Z}7ez;*I-Mc>IYK<Detyi+W>dCHyX{4MkO<$5c>RICO0pq{TRHmVMe4)Vo(%~@ip
z-4m6X3;qHLC~S827j)5+V4I!gn%J9@?zZsu<8DISX-`Dq;KwJ_*uns1eYFz6HN2`O
z(b-l<NLHU=bXeRNpi|EMYf}%zWco7N2k8&cm7b0gGyW*q2&H2th7KY@-N&JO4TGA@
zq498HzT#BNg=z&xCP{|UXpg?vekD{_TsEHXz&N1hOV6yAe@87KAN<tjgP(w%|4$%c
z2z(LQI#(}it`$*t5d7~piegvfyp1q=wwU0Z1TttvYtHQ2e+Qu-fQe7bF3C1by8j_R
z2v1@!<mn<oL*i|npLKZ0o3vZ!f`h#C(L%;1w8q;2f66L_A0oemBM0j>M*#4lgw!_q
zZKoO6Sj_0S#I0>CueicR*G2ck9alSH3tbTXhEuA{S4!<iFg9?7@}6y}R>trOyPSw2
zIqEosapL-Tx*?*de$?r`dAoTO#1hCs5V3P6gBV`1uRiDPoAqI|?BuVeAJ@)K<l&!8
zD8MywKF>1qm8vs6!JTg$huia&S_Mbi`aTZb>ePfx0XVp*^!V@+tqu12ksrgr)Q-YV
z)fL9(MoH<t96f^b#;?dcjX#1^rIvOw)eAMwo(zX++!#`7jy9I}fHT{UI&#BQ0@`|y
zYSdM^Xw>EYmYVe5>p)K#{jI|aI){0W(AP`FW(`MtFn<sOB=<uwFInCvhC}tv?!hhO
z{=k{B9gKX~VkF3WzXUQOnNZ~=q=N8_qpZYs1tfNu!YYw&7K%E7_ffPZ=Y7O(HV&Vt
z1E9?xvdeoP;G(&CMml>BplDqBeJM&m#-#@-MEM%wVIQ{hg{|0zmkS=n87+6e2ZD5|
zc6W%0I81n&tvMLhDlrV#-{u5v9o9Vrk)prjNc<}|=-c>%RyJ(&XH2E1NJ&~i;n_iB
z@-0Deu2n5I3#EFsfcRFdv0Q$`VUiEG%-r?jiywILB@f7-IM?ug)KO!&cp_)#`>wch
z-_^xdQ1@Gli^b;hwXiY+YaQV>v783WRnyAX?eJvfuL5|WV-f7G-<TL0nt*?>3MXcA
zlQ=Tkjc|r(-Oh=L>&s;yhTOFBCO*aCIF7eVttPH?iBG4Ylt!bvJUL%OHTV@4ee(0Q
zeA59zzjD;6E~BP%)M+l~{ni{;k)JI3AcBK0r<|W#&QHrlzR8_C^YGo0Q?24p->J?+
z9dq;5dNH{8ib<$sf6))XIQX7E#Knz9y#f~D+-lJQh{LxvD77^|kH16hQaxWT!o>;Z
zzE~uGJ$Z;Nbq+((3=~w)(*Qew*-0HNmo5-GpdFiQ(5fshI^_yp4W+m!$j1^IEo{wg
zP(HVYuZ-OrfzIFm^LL_Zt6ZEsRCbP5N@R9#W!y|<l<O_Xia!0x%BnY=qs1x~c83G8
zK}$uPVTBLBYS983eu%DzbZr(3O{dWmDx^W5LQ>EISdEw5aM>y@ZDN8V-lx%|tJ(~6
zPq@^TC#Nd4Mk@g0q5P)f+(%xyiGHKXmz>Ii3(W#siqwQEw81S_=le7SRaHA6wab%q
z6)oV12n@LuK9P0tSP5!Gu>y;gE2Tha;ID^vgAjl=z#QIRZ(tYfl1KB+`XZNDKuuVI
zrEXpEWx%lKRG_iA%m(XOFb~IM<!JiY;I4fHd!&%Vg<T9=jn~zo0OU)#5cN5T@qFdj
zZb6A&`rhvRGR^|A*U!}hm#cxoWu|ZyDnif@@hLQndBWz%UTJJr_fBjxMRWm$W^pQ`
zk5yBogAXk_i}l@k_Ky)s-Q9gW?TXWA@=zZ^i`8vLMUu(T#a~1&i$3yuqIawY3E6ZO
zU>(6}7VyprVxZvG>qjQ>f0X3>Esz;jt5_h9-{tF^*&MHqa_D*@E~Kyk=+~RjFB@<L
z!g^}dH^pUDWTUvCt}IG`sjEfedy7G`6bPHOB#_x-ZeHX((L(wgJSCbGeJzIxN~`W|
zRp6dR0hT?>1q_(-Hv!8n))t(61?UPR9F)rYZoO44BOU6^a=s2ur0WMD7;YHFS9zjL
zgf0k%Up(q4B;5_FL1nRWpM#;81GM>A;T<3)uPRP8;;VvIxVHL11#S|-TvT?(-T5Pq
z(<mG*HmQ&ZgL&jA$ic8Ik4wL>gpP13=9k=h)#1`5oFb<L^~ot%O!s%^r=~Fb7JRTv
zT*hnVy)f)3(I^Ljp)^<-)<A3FB3h|U9)dy%pqfiBNuV_-gBmdOnJoK30e^uS<Drzk
z5)7sk2lZAhzCPY5e(!#T1h3aA=!jP`4r5z^uE3X4zFa^6l)9llR1+&dcmp>vb`?W*
zm|Fx3&3db`Vl<Bv`Smc??{TO<1}aOHa^SWPOyKDL^tCh{JPm%pTGe*=A!qltNrO_-
zJu6BA<3<AQq9EG6u32BwHfRK#)-)|7h6j16A|BD_uQsiU;|+K*^uKm?CO<=+dPYtF
zX5>B4Xq6+pDnt1^*Nc}&_M>lc#bg`Y5|8XitdZPEp6|T*HR=5im~^FBA-P_ooMwgO
zd7zhmg~WRYP60pUy%T@by?3E)7pC+&-L85N?!&D5yb<qNdDoDGAONQf<%cNvLo)b7
zJL5=%r)YCS>YG;tV41`#LOpz&%-d&)3HFsMQ9S2ePNLqk;YXs^#Vf>9;=)5?I5~I~
zSJcE5RjxJkq7pAh9Ale~l1-iYsHPN{PxsXZ6Hni6U8i%6q4O@~HeW=gdY8eE&Nxh(
zWAkhQ3tSkmaR_A?LGv{YcP{R^s3dLPh;3oojL=d=oZf))ocEj5$j-o~2F)8Z%4$}0
zTZ(-r=w$=VIcCtHTL;XT*O704F=NP>`C129#t<wV@tnt!#+1aq<^2JaC}`5QI9{R2
zV<c+M*n(WSnw_1m!7bw+SFdJgmG!IH*_A6;l$3b$c}!LmXQA>Lq~nw9wdiUYj<QJ-
zVr%DXu_`6-SM9E#+XkZKZQ(_|HZQKQ4_#fGHYXe=8+Vf8#<)^y<#&2*<yK7;BC3bF
zZzD^snK+=U_7ip=NXm248yk|9^4Bn$qqSA@fK!Sw>ouf*R-eTsd4J}*i1%Z%(nK!h
zK_q!UJvH)oXq3|+e+u-nA^&_M@}sumNMvv$%hSm{K)O++eh2eMk@*<;oX1ke^d#b6
z4W$X<pJws9Lj0{HY9{_I@!U7{ZG_ob>14P>M7I(mwqM#uk#S~*eW`;lZ)cCkSBwp+
zof56x`ocYSx6;)^)B;mBrR6bC)lVavtnnQXM-STDEIG=lWNb)Qj@~4|CvI0+Fv?Pb
zqVnF=%wY{sFYl||Bu+!{mAqFgmha=7r7QC*HQr23(_hvor=jWVK`$Fk&ok4M{XF0y
z^vlRQ0MnBRrZU_^hda1>GI3RY$+?j8Sl5`jgxGgM9RjhxWC@0X*au0}jM&L&jnr~G
zRWd5QLIfV~Q)qt9`=s6U0Zz|9X17iPhaGDSTUOwRft$ShWtpK%G26gR%B3zYNt%Dg
zNb*EIe&i<#G@<638b78+%|B_B)1c=2pqC9b=7F1Z+<;m0_v9Yiz>TGh=}A->9*(H;
zw-&!ERQVc-nyGSGSE_WsQyXoi?@u{OLNABS%6Z%2M{)w8rV<Xpag+UE76Z50t&_B2
zha1D0l{T01Fa)-{*vQamb!E(+o(f5l<>xSJOqO+EM`HYPgT`H{p>nN8S<QrQ3xKzR
zUN)#0ALp9JW?~i&ZX&pkJY(YtOBoZ8c=F$&G%-qfmc``?Pc9=-Gfyt*ZTA%Jz>?#Y
zepF+Yw6IAz&$l;cfGla)t&=QaXB$JAl_l2+48Z<38%#h%PLg<|oOX`1x5omLWci;M
zLng~G?#fG`<<~XdOO2M-Yn0QV<!zvs4J~IIr$*Gy!Lp@It^u}e;dv29I592S!qXx(
z`Z<p^jY&$p`8}vX@a8c~92DNXl0=UyZ*aF}pS&T}m^WX<Cgr>*?9CY<Z$4+YPV$DG
zZ46~r-iRBSV!Nw(Wrl^ij$p(vsHdWmwE4dnL8i?p7nI=5ziYggnm6CqD5v4g&`4I^
zoNMHbXz5^y^KaxF+h~TRj44TU*$OTbbosW$>k3`INup-D+}y_+^z1CV_-AQR`$F&#
zJiieyYEQ&gN*wC@z(u6lc|TuGW6UFbib~XwazUG=t&ttjjPE>qn<X_liHr@&N=>ow
zjQjpAqcjxhN=z{}OI=KomUGz2#MlfANwBi4@mXqC&T5p^B<nWqtAXB$9Gg))2TRHs
za*d6YEM-hXBIScnnjq!f7N0Amd?AUNNqMejzbv{>eN;t~CY5YF(s~^lo%3F6H+X;}
ztykNvlgwau8iSRU8Q1efEPgV`MvmwaqOSZ9TUPrjGRcyUVMLiF%F{~;qI^Q*(bPow
zeT{M&qI?GQvJu6+Wi@u+fY+0LmmFl{3QHMNmALXXC{1wXgBH&#TzNl<nz=FsT%k?z
z_UG9oUV2f9Df2ySLeBfH-TVPk<~w%lBxTsS#?WP@jM!tuPXd~!b0pK1En-`04+SNO
zvTZaX$_N#cfXV6beexDVYM7j=QBDJsb3iW}Ow8L-xuJs{pKKxD*f_#c#$+UpTn42H
zj%>6zUE#<CiJCcbLmx9a&d1K3Nzl^cQB=&G1K8x8cZ<Eb1LV$4cIzZ}I2guIXXVZf
zJi3w3?ODjfk0lHC@WaX7xA*i|W)edU3?>h3){CMNAZltnnHoejjdB_g-4A-%KxE$D
zBbz!{6nW$w=%5>E8Jk1hv9)L83~rf>b0Fujjxk#aOs|Bp1(+5rK~TU{CQ&1pU?T?R
z3q55A=Nl*ox5|U=;xqRWM|+8b9lf`qZ8`5PcDtY{Iqyw&IoX%lexrA?_GPgq%uhmE
zW+^Pxbrd1ignKF~*@3@^zT^%($^|9*@1JYDm%9Hxp;1oLf4>fT+4`?}O<1&au-*5w
z<Q&^bf~AZpNgeiIp)}E9|J34jrNjOai5fd>c;-#Uvn=E+#3mMx0EX97|6L0|l0#HA
zIWRhd+XeGqy*kktqO8;qYoc`Yhxzi4B3+3g)<jbmlcdE?j2zQq7z;_TVwWbOsabKM
zMp;dVZfl~KgI+dPnD19pI|oaObICO}Qm~XU4T%&tLurB(d5g~#Qk+4eW>VbP$DCt!
z79ISvbnj?}y&c~>8k06k)ai2HvAdG)8;R0W-Zx@tYfJ}p-{@|8o8`!g)5qA5tc?6Q
zo+aTqN0xCFiZCPT(2f~8H%T)`61YrVViK3H1OG@|Vj&4!{+h;psd4#QjdB`Xz6JD7
zBrd6)gT>`z<Ql*wJ@!B$9-<I;%#G-=heZ5y9_t$Olpy+Hs6#;Xm6k{-5Pb!Snjw11
zt(d^#q%d*1j0BJNyLe#rI2x7nK4&**fCH;Pvs)*j!R|5!BP%pYF*KCJ(Nge3k?ueV
z9_KT22+l&`Bh|Fq25&qrl_qKPJ&ZmN&NgE&R4hz@=Leb)qz2D-HOgtg^Hb2v2A<u<
zeLl%150*jSCNBYl&cwAD!63|yp+j&~3g<>*!{M1TuvjC2q|Kt7$E6xO1kq{pSVX69
zTEeB!=^G?!rqiJm=L7D;7uAS^oavar*>vXwQbOY?2j`}!Bu?pc;=sl8z$>sRC_a^F
z>q<+LooX+7k~`G|#fBObS5D6rT}%ac?io`1(|S0L8GWKZk9m(qJ57hW3iOl?HB2>h
z9?1MCea{Cn>y8^zn>5(|B4V>GydY(+L|47k8c_z=`_F9{b$UIAceW)uEBcSI^sJXF
zu_=KMg7YnxDIwK$H9#yX^jKK3hun+4;vTYI6qV>6zQ%=W_b{GTUe_q6=^YP%p3*xk
zr<LnEhxrzOZ0caU%@OjBZDoL^jEPB?jaNZwBJEv^+m*C;NYs4U=>Fhb_j5?2ee3-x
zM}Y9&hRw=(zh!UI0EfkIwp%BM#q4lnIJ0u*5RXthj@`A;rbAXRN1XWzqhWDMwstry
zHg9zl&|76mCVd_w&P>|aQEY-tPiUN;noOV7D5oLQS3oZtnWl^b;m!sRmQQ~|J_0^H
zlb^KVGk{?PEb<{S1b!wCfoHm8P0r)ejEPSidkSh59Q(8-ND9Y3Nup+s9qIb?FkcVk
zsqwbsiqjl3%}Kp2T-7>bY7UJPHUHD@zyVV8CwA*3H95S-<jG3STU2Vw=kimLObT}$
ztL;AyMJFkFK1P@+xrw16%}8MKLJ&;esY{K?b2Z9oFnKZPWy9pI6qt-!JXlViMNYDf
z<5<d=!o<J*P@3T14vY5{{%t2wGyj&l@~`{p2{slAavIOMmn<Au{V^BsLFeYYyX=k~
zAQ$hnTPL~5VK*jKRxaM9!b?n?QejcZ%F!gg+yKUsJczIlCHtx=3CWjWxI2cDqSyo@
zAJTX{H6tI;D5qiMD?l$BBhw5eWrGKc$Yt^oAo3YJl*D9!futBwb{=W<3?4^n@+IeS
zImUb^h`tf(6A(RW36BC%pG5nGX!ptR>Ok}a*B?XlL+IR`_W`?O2ME#k*{zch<**x*
zDl0^bDnylc9+<ZS@whG)mnansjV5ARn%;bzs!THVs~CM|>XxK|39Noy6NA)P{fb68
z4OYJadfBkLC&kb+4$6QZjrt36)A5?5b7{t|Kzw}~Y88Ba(h?_yuTPMunXf_DK`LL#
zlsAUhuo}h4`dT45LLE%yF<Cdk%lUw;8{kKB%BH41Udso!xpLfYog^y<+?Y;T$$Bee
zE{e77zDg`8X=+;C6t`?*CCkV+7QA*g3C>F~xD3vTST2Fg%QenTjm(QR%4*(p+l6@@
z=w(Bu`8iUhwSygo?jZ*OEc-Z9m357|OlZ6v>JVt0vcy9{<Ao$@M&qvZXpC;Z^rRDm
z$i+tFym@;A1_+{(-8u;(cCRsbSwVD|L8O1ToCO<tB?c6}noYC4@s1NvU6NS8f?2@C
z+NL)#L9bV7B9fY3uh1x`q1Ug0UN(ANY8>!&Y58DD_HuF-kZb}c)R-e3`y(fC4lOe$
z=drXg{fS-ghEfH)UTTSk!mfu%)XXk8-Z|Y{73EMYy+TZ_Pow!c?+@*!50F|Pw_7Kv
z#f~+GEi1JuNsQ3h=c#c;(#$EG3&Q#yzx|RnQO57T)J{;vM#{K*^;LC}S^t7Lz|7j5
zC^`YFr!;{`4XbZxl+(cK2cVY?R_2YA$tDk$QvX0+0!p2Sl)?;wML*6E+DaK`Na9}d
zdB`t&M&&%N!PrHJY$GQ{Wcxcy=oGSjokY!K+aX>?r+u-jq?uVLCfE)%Gv_@Me*ElC
z0H0yEP7;hAXbewQf{EQOQR0ioyXm#JX*s6q7)M>VCvd4M_E%YwU)N&>FuzXIwkbie
z{hDB;rr32F<unw#4fL{6?2>dtF4eySUTC|De3f>@#nQ&aCoUDBR59YZ(h>}XOP7<V
znM)TwUm0-;KkD8ZEfJMkKBm=CG(P7AcEbla-n!Rroun1J)flv_v=Wc3tmxUWq~8~@
zq@IylcXy$dRPL2rQg7uN*BdY+m|okvwlP7lH);Zunqa@CQBFg!w}W0bf?d%Y!KBXy
zOtIIJztU2SrHvheDE3h(RZ#5JmVhV}dliYADF*9T@w`z|41B43W4$C<PdYKpp2SAv
zyf4@rFhH7p-fo?w8N1gQysR`!u6acZy=jRODRj&s=~K;`*MS7bBJDn^OOCsKh|y<q
zZH>qkRggf|)0!xxM%E8B%4v|bW<yqF?M;WQxYdK5J${!Q1+3bt%pS?Oj<v3>%3P7Y
z#ms@T5lP#a{=}|Rz^#H^-?2nSVb@b6YG&72VrCfmGcVpz&UZ4SHF~RD%%~|eHs?*k
zkDuN7;rVv!B%|1k#vo;7R5U-lw^eC6eqo^rPuE(3p$apbX5b}z{OJspp<UAwJAI{O
zUzH`v^gN6?lW9|D!3iqeuJL<nD&3}0PD7<bpqFhRW!~wVXz^f)bPG8Nh;%w{W0S@W
zQJ@oRSf?YG^jQNZC{jtr#3wo}f}Eh!O{CKKpsE@ng--iP)J&&a_PfQ}f|IYz=ZmeN
zj@=^fyY*JJjL&z}o8^2RmgkB=rC#&%^_sHp0v_^&LvAa6KEbi$SYk}Pm!bo5-Y?o4
zKfqDhOYGK3;&Et<fzL`jv18XS9(637LlLH%dX~m+h<s34tlZ}`X&ryASS$Nl+=(+*
zQrDD3+dDD1jJ9DcBmuN{YuuU|Xm8gjtKFsBW{3}iUN)eakEEh@4i;l?A=d!Lb|S{a
z`3CcqDz45)p{E6U3VniWJCSQC^92riq`HjxPN4fUkQ1PL6RD&E-5W{N47$_qz>W~O
z4)V&WCQfDP@@)*DzeB@v-rv}b8X$naYPU`Th+Sq3NLB#N^E@p+a>0h7pcpuGHiH~$
zl^s8*)ac?9KQpj9f5dSbGliqYrXELPw^m>ECegHRV}vI4poJ(e=<J9Q5K4~2Qv+&^
zMmY_jHiKR^K$&-I#qJyMTGdY}sR2{Fc(kP?Mf~glC&dsYMFLd2cmSrTnQ|%Taec;~
zL8v+#Q-cqf_;LDv_cV!`QFV2+!z+)6$iUF6*j&z+>b0O)sa0wVaI(~rTdz9IuzY=9
zVy#tmqUmI|LZSrsuEb{MyelkeikGs%ZAQJ+Zk+@l2f!HKtl)bNgAb<p=8gS9U4U+?
z*j(@-D`%!=rjEc-FYpH}UciWGQaR~nR}ZBoF?JY($Rn(^K|L|PDrlUS8efMr%4zUb
z0ljSaI?K3>1+5(H=;}q}7{Jzc!WM-Xcr`RNBtqP=dbOP(rO$($$7LCFmXP#fs8b;6
z1yp^i(bMfDYDUtuctvilytm%Wmx_Mi6Lg|QEk6&_1NrED1fgElV(h#co09W>)!vK&
zV&_-v)=BKJlZ_$FiXHK4+@J|p2^)D(Mvk&@JglA9iC3KTP+*cfAHgUxcSfj~1bRNI
zabRlnd|0EL20ecSdfCupe#Hqlbg=aK9r6v(XA=*aFvf{-(Iy@j#nI1stYu76;>=$`
z>4G!AZ3zOnL3V+6lc<?9XKP-`M*hTM51JaGC52>6lkcFxIqzF`V+Tl+f3aKF=}Kdu
zveM*QG2B>g*p`n15Mh>-{a~hme`<y=Vvz{HwZVzXOQPiDO%Y0lv5*8wPJyrco`Y@H
zD5oLG8K9SqB<4jTYUf}<auT@)K(ZM@0s$VP0Cx;tHX}(oVxRL^&zPZvlD$yAK*^XT
z3JOX_NYspy%j1*G^`jKL4<}BK1mme$vy2x!!1BB_>TwdLlm`eshdmk}VYww~L^AcC
zhd$z~=$N!Lu9=n~ZrAuuy^xxZue?p8ohJVefu558{TyEzH)ybVE~2t6Tr(ZJ7XOGM
zX3ynCj1#X2TyOE{id;69o|Wa-Fw0vterbw@zfw$$4_D4a#XIz*T<YSIdHoprOXRgI
zEOtKS^=mYKRP)++?&Pa9%4yR2ji9Hbbsy(Wo^PC+Mr|Ez%D;l#1E?FNG2+hH_2DRu
z4QT@fOBvIXK>j``O(g##7QZXW|1gP~L7u-;<}I$?FFBP37iOQZ>Lm_XkA{SH!FWXY
zr)X}@`(wMQ0~`^4%5I$;5watVVaiGoF~5ZSfpxmkZRz)sTvv{W_h?0e=?hGf<l7ic
zCdqhIT%6B@l7H1WGc`({(kQ1v$<v^h4J8*CQ4%+Huq^oo`Nzf*mNF(Ov1EL6#FBrs
zI9_4N|0Yp0OZL+I5_dUN;JtNBk!n@k5>$qXFf>HhMri3-FD6YM8<X?SgdfQXikd+f
zKUhHbM%PAd&)HRE_vf}7J=@v+&7#w2M9w=6ezfMgi-yCcdev_qSc_3Og>|-&PUpg7
zI9{#S7J}kj)oB;iMu#KCYGt9;4%e5R`C_XY;G(U!iA$Q$l%y)lcL|P>xcgCejk_*#
z;KA0Mw;8_J`B3`-SVkWK1OOkrQ&)U6>1|)}S=ZMWhGWp+rAj$)+XuFwsi#xj-is(w
z{gyPbvZTE$Y?|~g(|q>q6`#2umrV{gOidLEB{&eOP?(xxWR8cU@ZtgpM*B5wDd#O?
zhKg~RR7k+{ffT9uVk{=-E!jme(cQ;kv~Uy12X=Xx<@b`Pu7{tALC(WVDHHFTM9*Hy
zF=FNJ$&8|xvS^L#>Dl31rlx$i2+wffsb$S&;dJkQC@ymLd*Kh^><y}L!r|{D6FR$*
zn*3<3aQM6JqLIUI28X}HE-!udRub*g;jG+)!_A_CN!-=Ci|Uy40!xd%TS36P4W+=X
zj33Dp%u|HP+u>z`GKgXB?6cw2x_Zg+eFyG(Eaz*j#l~{EUdo?+Hg~jbW|`>nKtq#n
zS?rUf<F}@&mK`_%Z^PIl?PADvr`LM8<~1vh-^M$O&kipt6ySbxP$*39%ukwz8Tmyg
zaO>rr?a(~2k>$1B(St#|2+nkOyE$p^L2{&fZKt)9?tb|}xb>hDEY+Jwre#5sa`IV?
zWX9xo($Db+olf1j1v(mC61d{-eMz|2Jp!F$JkkoC(!Lp|)hw1~F1hHEi)I!o!HjfL
z{0nT6bY^g2y6R6imiIvl;EQ2ku^Q$lQhFMNriD<liEZ}EP`DL#D3l7(7^GV90|nCI
zTH%YX(UnQE16!ar#LM9)n8fb=(v2chqD3h2_sbIBZwto``Sn(_<Qz`$X&TC0F`Rj<
z<Km9te;6#;r4v05SbYKfH+dK?{!M3|mO9;E569v6a(xkQPqp3ONWKXLzYO5^xD&L)
zGYa5P*zn*-k2CB=H}7RPx5E*Tt(4p0mK6?Hw)~-q4}yu4HWP=PV~u9peGe+UxWl`g
zTrrQlVJNGZybie^3{TaiL)-nZTX%ogyBQ6DvTuL^42SE$8mMLzKE@n|(EVO#XeO2G
z{B5^DFRs8y>ORNESFbqDTCtkHjoia~MBsHrcwHh?&D8@pU#r2bS#%%Ww!Nd&tTY1t
zAR6)>=Tf82>CIrHa^5|nZSD?R|3t^&-jY@8kO$U+eJ_f9e?r+`fofKCB&B!AZY|!J
zEv<q)anZmt4xDNlp`+_Qq9jt3UO<C5XE9sDwT<P(;CxhcMDIbUDO_Kl^Qf1GqkK7N
zhhvB=`pkP7iPY+qTG=_)eiZAyhUkm<7ZLWpwMMyyuD^{gD!$}+^mm*oufP`Oyhrgz
zDw0FB-cwLXe9>`tfr~c6_4~(4-InX5Hw?o-Zv_5_<^8Cmyl`&+zL^`lTosW1GtA4G
z1*eAl=ACkMt<YWuntrhF@@MV48aLnjt;I#y>2)n%61;IRKz91OPJ$<mCg7jE`c3Yf
zm^iN8eqy3nE(@m8nH#&s#(t<sJi$Z<t&30PLrkSsvk9XL@#!>_(r8qdC+BOZ2EW2+
zBR^jg?~14#b*js#=^S-nN1NZ816m`5CgJ4prW3T9HD=VbJkx!0=T7z5M&GH<LmhMT
z@TR!n;w#Vz@ogIV5HGzA$ihH<QbF08g0)Nae7Oi)PT^i67D>m>_>=H>4>ZYl4nxt=
zHoRKC0#Gdmu=S-5mP;219ng-=HE4A|UL8wlw6HZ|n~iQsBGCw33*G<occN;mT%0^q
zc8*ryGTn0-H&YqqdJ87!efpD?Rc|^+i&ZR4b2lHqYSETnbR)XnIR<z53r(ld6e_f{
zh(3j+fTw(YNHEsu*y=bjK@soMXwp?}7LOHAPE~4+RshCB`SjLwtl%c&`_m^T@CC?y
z8iJ~-9rzMN-dImBJcY_{UHLZAiHXF!5`_lt7d<3jPKe2n;x&BnPTzFzZJU_jUh89n
zyY`Xp=TJk)@l2m`A?kAw<N3<5=pf@B`kw9ZS8*Iq;>85w(@G$C!scY`#5Pj|>Jp}i
zPZOp{2Oq+P1bINZ(JkHGeLU@oW+wp3K7tmj+l-1NRr(|H;x8hXMIZG>?^q2IGJ4i~
zu2{kyxMezqgU-&QB#%!YkOI0xRMc|ldLk~QeAX58%lM=#45sPGD5WU%^c$T;@;n4Q
z=no&!6VJHdW^hd@5Vo#ulO=(S?qmg}w8(j)h4gpar08ooOyGnjd(>xY@p7yDO~5){
z&m&Gu;4@YVNtLIXAQbdW6IQ5wE(nyBg**fud=fpMf>+z<$rRZ=`4I$q0->X)_OXY5
zVj`$d(q`b@`6;no7)<DG4=xmfyF4ckf$wQtpt%@#Zmk0i7!2V~9@-28HO7OhD54!3
zeKEXJ9D*xvY@@$yH*F^-qI*{;-p_rR6THB$F3Z0IrXVnh=<`;=JvfgLw+ci_$7O+E
z?CX$o0?YkVDc1FVtk~Bf<x&^NGq|tFxr+A%oUcXq6L^U+v3&F-`LlCLF7?gW$2H38
z+PJd7qpl};Ujw~(u_-+6`#PlKq9+elXRb&qMV}#`*lxhGROiHB^&C#y@h0SVpfs_W
z<4-Kk#?%&fSUydny1NDOJ*nfoswC3vIF}l)K&(3%7ZbcS@WZr7BmA~Xivtw!|Lip`
z#;D6XU!UX<_I&5-An!1Xmk=!Qhy|HO;*d`sCTMmKi)T7xwI0e(;%O3N%6L-NJQ9GK
z(nLHppf1oTtKF;{pe_TwY=AO9(;2&O5QsX5yaI?iWhg!dmLuM=o%j^oe6}JXavtj&
z)0p6O6VxN%b(SR%3cPlZs2N^U*O$vM{>i6U2$QRty{N?4IgCxnd57%g)57>FUT5yI
zn<Os>>``O9vSLT<Afq)$8xe3_l3_Dn(-1~H?9@Y1Nv`}N293EgLd7JI@=}fKQX}O-
zjdB{Kyb|=XA;tW#6E_sEe-FYPnpI51`^h0dlQE>pe60f^V~7wAbIxN)V;&MW-UKBI
zZY*28t#IQgiJG}lxL&M;&(6-*W@md{4WFG=*28CKSFVUtCgMX2W3r++^_0(mC?968
zMPv1FlueSjT038hRpB;C&ijPj74DbglDCBy_1e6+!aj84n&UQYPB=_9?j*&Hai!GC
zKkv1bTQyOL_#NuLjV!fh;%auI57-+ndCr+`v_31(#e_DxL1TV?UWzf*HB1*1S}A9_
zLP)Wd=h?2?8j*cWN+l9#1VoZEgw$|fqft%+_syV}4esXsJW*Q*!1tdrsVq+?u#_<;
ziS1`&1jS(;=`;Rm5;e2^mUxXU^$p0`S?O807(_QABZ^<zN0D(lhJC36ovxrPbYqTg
zQ0<fu?bZRVv*a+Q5MC!lE%3@3rR6a>)lVa7YkXIen3vicDv8PYW3)aiF>m6Dx44yN
zBOKr47QB?Vy0y>#U*1=_oFq{OdG}(s<00{SVPc%9bm8?i-b~HSx<)w-Hy;4KY}`Cg
zx0!2NZZ(rl9RN0ukV{}F*vGr=Sl5`Y1k+bR9RjAVB?8Jo*&$IgOyPA;xCsRBF_^bp
zNE)SAh!Eqw4b9JazhyUlwI|nawwol;!rnB-Dl1yVU`*Z?x3EQu*#=`$E_HE9rhFd5
zC+;rD!V*w<LgUBOQ2DGzISo|40(#k?Vjhe|Z5;qr{)Bu2R53m(%2LLhBz`;vr3rp~
z+Tv`5AD<*qGe0it$`8ZlE6I}nlw+<8okCpsPkWPAn=3!Dn<TlyUN*)sD_1V%p#|)C
zvoWC2>PnM6Jr$B<$oUv5X2?3QBY}?#;oH9Fa_4H4)8OM`(94Do^YaGS%mI+&EOLj9
z94uwbIwHq@C{2)KhsDndIkuCinH-n&zVlLYqaW3n8uwt6a^79`=Bzd~?zEdEslgsL
z#!pb=wXc5j5dHJ|z11ilL&sgOHhzGJoa^xRSnX6toJ^Fuz$8pwf)Qkx3}Yb)nmnX&
zW9q@k0~+NtG<gN+WuuAtWFl(k0C2KQ{s5e8!BzhuvFkZ;ve}jySpA<7-*L!u9%~v?
zlo0bqs6im+sKxmTVtf)ku86^n*?l60RAa<^2%D7iK45RoY9r=-c9SGx*u%#7WgVD^
zyNO~uyLs)Ig}M$;#2BZiqLN(sDu#`@0#D-L{`>@4zOM0JYO;Jqqnw5;-vGUAWI5Nk
zb|P9j0Ji)EdBiqUVJTxC5=Wkf(ga7Iw76Q~$P*-L=E%)`EDz7lvR{9e)|)q+io<MW
zy?G+GQi4yP_@|L(=k7r@cQJWzty$ENa;=%At&v^LwdQeqLnR+MbBxw!<)c^=#wU0z
zBQF%`%0@BXN?lBni#LN)<ai4UNl@_?jn7h3@kWiZnpxd;ZruTT*{En9Z&5o3z{Kmx
zA2ueklri^+i4K$|n0T$l(Fzl<B2hCF&(&;hN1v%rnn|Xll8r}C_oLA{?>@W1t37&J
zvYRC7z&<oaC@USV=M|awX+9exqR0Nal0xkI?5oHmHQtP2<k6J!#9@LRZ_#)(H9LM&
zqnw5v?*+YV>@e^8jNLbg1)w*OS8N1fDPw*TK|Tqk34*-d;%<c?uO(44L8gEpDIYwQ
zAn8RV=E;|_2|4dC?dGpGPyXC)lH>_{)EKX<JQ16B_&HtkWQ=6GQbg?R?4h6}JAQ&8
zV|I*CF$rw^RO7hR*!Yn~ISn?}pOzIH=AE6~&;g7&en<|n5rd_S8A!y~4sH^}_`b!{
z3NgM*qGn>;(8oNCldyBk547}n6crQZB5ZQbn}#3B+ZbwMVQBGKl~vrdyUT8pBn(Hu
z7~iafxq(M4@~Kw~W9m(OE?7{84++q0ITUlG9?MJu=T3|u182P`DuJ9AX*`)4Id^E3
z)y(KN%PE3hwvmc?-;8YP0HE_catU<BjkK`L@$J}CzHtUumE*wYJk~L$C?Uv)vIT-}
zwRm1Z&@CitL=c~2({Vfze`Gx*Oq?e4h}|4$LC$;FE+_jfn{9MT)_yD2X;U3$&O%+s
z24bDIr=pUb^#kA>(OE~iphRE&kj8td`|A5O%4z!QCqOS-Up24Oik1$btG<UkVjCZ@
zlrayfb3O^BiO%^>i>sB+`8E<YcFyq3n~aCX$XSF<EWWP)3!0kqzF{|WwXf^{Xg5jn
zfjwu8OIALJYcL(GW4@@PNLMz9b;{JmB)PC*Tf~K7EF?jNP4IPcc$S(96B^|-R5%^<
zvQfdjPD$+?024;ZA2ueilri^+2~$v-V8S|!qZK9$k*JvoH})}Sn4Lwh{w&?OxsJUZ
z?eh-Dq>U14x`cnO-Ia9LMwFiNt_@3DW4fBNoU82(l{Dm>F<PIMhCj!%96T?~vLcHj
zOhY>AW`@om)68)M7*m&+1mk_+A2DDW#zGQcykFzK)L=ZOQBDKKmx11i1S7R`0ALKr
z9{@&r9)RLHL~-qy+nkJZn?%szWOmXuCMV(Y^&ls3c`vCL@65{7uaT%3m#5si^5{E>
z80~lQVCj8mRL*;^-JsPTEWOKaQm2oM5y*;%QjCW}e8N=<QYg|L(7+=IXAZ&JjPW3B
z`1P=cAU7VDN|RjqOAI-$nrz1YrdXIj%$GGGNR5~;X_V6-=I=o-8)9}Fcg`f6JOJ8!
zfm{Q$ITKe=1Z^-Oh7Q5Ik2xU{oAu6A(4$SAoX4dadjWCi`%t^!(B~~NQig4xAyG4j
z4y8CoQ@q75?nATbj?<(p#)tRMO;Jgl$LYj@fa{+@+iaqv-ovdcElu{Mt)L@%l5*@_
zTsb|ucPbU!$$GUDncq3MMWdaj7o7=uN-yf?or7wV2GB`FK(>V!q)d?LqLx}C3cJ12
zT!f+KC!>cgAz9IBjHPG2Fo~Q0d_a(IxgZHCz7T0HIATel$HJ1`;sxj{u`Dl&O7w{r
zYFw!H3FG?;pRZ9)(<Np>Pw5hUoNH%ZmX}Q(KwmjXF0sw)S<0A=bb)9>X(HDTSbVMI
z`g2Lte1Yix>{$1Md86Ik{V7LO@E*lx<-C{Mo3z?P-Iv-;l0#kgvN48PiE@ZXogIfy
zTe#98E9fFlK86vlI4fQ|#1-42Itu8mvLt<e8^g@>+1OERf<f=sI6XCk-lI`Y!=T>>
zy=)AcG7fG#8$19Ky@MPBBzh)4dBVqE!>CpyL1I|@OdQtEbV(I>2N#uQ%yuHy;~*!9
z^;S~p9B!$RQHb@wNYqTMBV8YrW!&e*AqKXSx>+oFOt<({oYBphye(YSI%7WmA9P~Q
z`v<!NSDTN2XE#amkz;Din5=xfMdhP>+&mStq;S{q*Z$*BbdrZ-r$;>8#CVWqB!D;p
zf_>j<8PzDO-LBhSiBmx@8xVJ;0AkeQ0T6L5dB!$2V<}_a66r30(gf-LD}Ar{4-z$#
zZmBEjx*rN)qn==-@nsH@dIPIJCg3&b+?;n6Ma*~!S#1JdX*Wp{kYjDkq^tzIOU0C!
z_M`%!kd-4ud~FAe4|$AWA0GBqQxb=B7~_uNp(r*%!?MQXsfUNN8s#)JtbtxO8m1W@
z$_5VrhBM?CfZ;QEc!(JQgF`V&Jlt`&<rzFS)FesH<8q8iPPlv!>JzxU+Y%FHVE953
z?H8Bbr?RVq%M)CGjLX-db93Hn?T%e-T)x_FlEfv)+L%dMaamMxsk|Y?yy=F=YO%P4
zrl4gsqtbHo=HpallAa&KkTX5EBn?ae^b?vGqz35kYn0Of^fREB4WN5c3@78D4B}Ct
z-zDE1uPHW{X3T#g>DQoELDCOef}@c1{UmB8Y0!1x$rq~lWmdiopiy9w6Ycnm#9VtY
zmB$SI9=bK>eb?^N)n@2->?TQua+HlZl$D{kGSH$p+U|73f|8r2RY-9YC04SGW@EvX
zryy_J9wBlfmP^3#bP(!$u6?RTISm}o0ljQ+G(SP9v~~bP%Pr&;z+xXqda|xDfeC__
zK^+2u8!bUlAUHvyW(e*|55ee$NKZO3at>f4a^5ZW2CO!6ZnB#sk;6VUMl36G4l{D}
z?>w{sLa)Rq!WR%~?!De|0;)?6-x?Tt9=>hUo0#BKQxlQYgSeVTISr@o2fb{Zy3{y`
z>(cT8Fv}wk0kbA>I*f_YF$12!8L&*3oX66}oF_`X5=s@6TCjvbp;Vbf&6I+3gwws^
zQ!eVISBUxaRy057y~S?&YV+w$c9SHZ*qg>!W#v;P2@E>6JT;g|nu&xnIar6|_pj2X
z#P|)Y+Ucd(m>74YzN${r>2nx(rqkv`(FrU)t_ehHEPY0!oCZr@2EA-pGH*;wHhBO%
z`eSkp@aR0`5vBz!&T(4M*2Fk168CY>LsHq(DCcnv#(qHz`zBZ-81^YkycC9gf<(;>
z+acagChon$t67yd0ZVR~g<@9y7n+&#erh*ywORFJyGfE&>@{Odva(9-DTz{CJi<(`
zSWZhURmV7zx;+6#Rk6RylB7ECnGvZ@)3zzWs|!HB@9Ew-8s#*+x(M{L@#>Ov!zk6i
zgIEwdlN^+G6vfiUY$pQU0Hq27<t!0U2y{A$nhA8_^OaGQaGvfx=@Le%<zp`0jmGD^
z7ugM8Z7#jQZj$5@`_dSxtXvY0b*$*au*lvQo1~tRPj`3WlT_}NQBrT^TGTIK8t{l}
zd)GE5SoNSLK&i)8_iL2Xu<DmVFB_|_=#5p<XM^C?F>+E`Ua_>X7Z9(09ZD6vYFVP7
z@Ty6oW?sQMQ#|XFyaEUA!KrD!UegVrdeVux^+9Yz&ifsE16G?`zil^3a*KUxj96A~
zCD*2+rPs9Vh!i?zfb^+mZR$XRSdn%g)g{MLe~lq$Ms1B46;+Uc)7LanNDZeiYn0Q#
z>7PI^8=Us0gHzn<0nGirMBV`^ZB^!eWKqYO)K+DtN8e()<UH0k<~&jA-=P*ksV`c>
zp-}2^5;armEHST(oS4^7?W}S!jW*_pMkm3K<mg?^8w}PepAa@?H%ZcneP@hJRvJaK
zyL(%ersEeDn($Pq6%DE|Q)mX>wa1^%P#M~_C$UFXO7>M*l0lbXpqW9NItxzl=Q54o
zQ}gE{jk20Y-S)^{3wqi3W8Nd1Xz>8pvzt5v>^Yscg-MHsD7uNYrqhu?`c%nzT#_-{
zi9<gRH3|;xw1h?B&;=xF=Flzs-C}LQ$yes{#a2+qzL59bdaGK-XCUg$a=s4BXvLsX
zhZp$4;3?vj56?NmP^#kRdEY~HpYJ%97_)5w9gy=Jd*fG|ZF6>$B-=P1#%O0{o7n5>
z7mqp?qM-<LOg$oEH-tN=ELQGwnzXV$SFDwNE!f0)A*pLhLM+6HGQ@_lkOaD3sc~y+
zbp5hMISsmA4|>_qWj;uW+BpDVy^Q<;z}ktx5>N2YSE{&P9>trM%qiXpg6%|trA(5X
z$8{N#oRIb|ut^~8mn`8@koF*nnvr(e9hm)MncS(u2?fQ#iSX3r+ZZ*ULc?<2C+$Y9
zHfla*H%X#~{bY<nR@8{QYQ9^9)hFEc++4OHM-df6C>V_c118=0AOrCxu)d2;a^{~g
zoXnXGYM}|<d{g7w)V%p8jdB{^d>{0(@n)xSs@Boo0dVK<$uGbi;~Pd<%9yJ}jNu&-
zG5*%#aD^COBT*wUGM~7*9W1j?xpLk%yPWL6Y_`!USv&ANFOv`+3wTP4t@|QJNl<iN
zco~}?RBALhj312Ioj>9@jhVvHVpBhI5Zf2~syErY_hU|Q?^X{0iD*t|n%t;yd+NS@
zy+%1r-+mtGW$WAK?TfMd2C*o74S5B6_AZ_RDVY#IAj6q3M46BnQ|!Vq1-{KMRRZNa
zuFu#Vh!I7wON=V^Spugp;#nkWWJGv%wB<36eFf%2MY!OV>b0O)sa0wV`C@*_tydi$
zZshCpas<+<#)FS+g+y8H9m8hkyrcFeuJ#zkx0@sp$6hzaG%Mns!-#{WHS^OeL0uqi
zs@Pocfn_sOGgC+4Xn6Qz<q&0852Yr7^+t>w18Z$iPYgnSQ{%kUpn8KwISr`Z33}N;
zb(V1u0<9dt(BpOF4FJ@30u;p+$TT!HB;wk!OuU_Nqz``1<Fbs2O7Qsus8hhFZ3%_~
zpT|hl44-N7BI8<lZ@rl>75%^`yeO+NFj1GMJ4ADxUe#j2d<mP9^PaRfW3>VEgxw?w
z81}3&Zdm~%W-CDxE&?{jpo|<j!J3()T~-nAwdtY2Bw?P$&@o{~sF(y~exz|=YRLRh
zqnrjZ>(0mu8S{H>xS<2!%=gG4z?n@v5W>JF#yXpLtP_Vk=dqSCGl?jtf!hR8{>|cf
zg(%-9Q8Q7_*1TJfoQOjiG&O=q3dxuoyV2mBHw8cJ6QWgpOU;FLlO#9Tf5zx!<;JyQ
z2(jF-t<we|!qh1H!At@F)C@_)YAk+h!w{91gvRX{H-^SA7Ls7b9UAAQX2$b0%4wK!
z81%9YOw6mX)Xo7Q;{f>skg*w&0Z|>IsCEoUHX}1S0-p0&&zP13jXIPspz&Ob>lJ9+
zNTOzFTpk~EuOE5fO>A)xDHu=9nq`pSS*YiwQI9h(r99x~rR>po5phe>h-ALM3Vp=+
zJ|-=VYo=9$$27iEbKZOs>aS?D(<J>HKu<~feojJ-8#I9A7NOV{u9=Sg=`}aeWr4r6
zXYhM5I(&TTLl!@-$Y5jXS+RW$W4l%37v)$`E5*d1Z{<W%ybV#xr7kX+%}=7gL^jL9
zV((Kne@Wv<HJgoRn0`T{oF<w72K1C<?&A#8^Nmx>sI3D?^v{t`fNI9IZI&|TBr*Hn
zpfr*3e`ayElJS2`qGo32@07`kcf^*Q%7P1%M_8UJ(lD<Yjq~h+@i1@XOzO|;;K$F{
zFmK3ik{sr-_l&X0$_p_)guCf=+8bi&;gMWdVu-h-MS|%IOfq8%L&(e+kBUn`W4Fec
zsi85cQBDJmD?l$BG%hegBW~;fsBs=S#YPR5GG-=G<GE0ppvKu2Z!6R|lSIwb*h|wx
z+znK5YJwNlDicH90|ete^k)Q-p7mm;6tFQl@36fg)b=-RiQ0aTT}AeJZoAR5oqgUc
zI=z-`eh1jnn(Hna4wvdxzkOgWM&T6Jc`NC39^2<Vck|FtQSBt&t?-F=8~hJdH?iuQ
zHL9wTdzX7RijR@F`%!m|yUyL=vBwU!=DcsM85-L8Q2PP6@jenxTpz$YJ?2`0<1-`R
z`EKQ-I6$xF0R1Zdpb`(dXFzG4O;GJX8=iuy+?=$*-394-6<F|N#R9(l+V$<0-Y_)7
z8-f2}c|YnX??k)+>Wa(uU5#7e{MO<k+~T>mO|A6C!GOqT&z*pOFDNLtukeF%Yq3#i
z6oZoM`1m*7qMMlD8%OeXklc`x$Ne|lZ@kS)+3XGP)D<61dfQig*41g@7-Za1r5w2J
z0~6@C(?J({*ZZie^jp$BD@)qD!lp^@GR<etUh$dx@yMOxoxL3nwOrXcWZ`m2sjKcI
z5l3}*$n{oc@{0LanD~6f+}KfU;;Q)-@^NRkNPX4(3yrecr@HOB{Rhy?cGWbW#n{<k
z$OHGm6Z4j7P4_#n1~T`H<QTYet{IB`9j<}E%kR4L7tMt&@7@of3~{}D+~Q}<^eef~
ze3nFw*Gmh+xc;0sa+Y<x+*zryN%BJVr)*!(y-vJCPNkNmgQ%jqJ|~8|s#s4YCVSjY
z@R#Uu8`MJM1faR?E{$7Lceo2R%4s^><)D|X!<qMPb+mT?{q0=xi@v|{cgEzT{&q8z
zA^Kb1;%244ok60<qrctVYo*2}W$ka5@Zu4T3M}1%WOO}D+#c+qjAWmB0As>eu@NdJ
z(V1SN@mcE5^kR*2n$Gkn=w<6n=G%kZ&;j(KC31+q7x8z-l%rns1}H=HqQK%`r5D{x
zqQ+hn?ywF`!E&=uJU#dTnwj(7Z#R)z_4fE${9e0?yex97j6Un^re;wwf8$YccTwH^
z?LC?SM9TTwJ2a|lFX=LWV~@d%tGl6?;U9tN)^$8VbMK+KOQ*bd0H#o#lgyXGgpxk?
z9){n-ky5qj`)%*#`0;lkINl@h+oM?cHB@lU-Qe!v*<W0CxI-?x?1ATooIQ9Gx$5t!
zIl)rBd8A!*&pF)2R>pGEC^yY=)3MwIAUAoKHVsWcTh@uT;M8%gX}TGX`t??`<h0#g
zXzH49Q>oQ#!tzBye10(8AU~;AYEJuLIOaP6>|kB++u_OOdZ`sus{ZtR6E^iZwQ@Tg
zePOZMf@$$<+G47*`CvG{;MDMesCpCh$IGxK7T~hjfIm*+Y6?*H5%_aL{Ml+&;jfKB
zy;PVhmX6@J;9DG9hFj<B^`KUVUA6Hy2iAleeWw)ET8o8a@c8;-8$Q{DZ&_><O7+D>
zT#kYAa{P%?b?B4AQYCN;6gRLJsuKzrNcvzy(`nS3L80m#b*iuu5l+DSr=ved!jqk2
z6>t=6@oo81Xe1mdJ9DiCC~p(&g~MHrAklP+i}1-f>=r0FXm|UOa8sq$XaxnQR;rgl
zsvVBEg84mH?(r+|`;N{p3r@3HZx-OOvvSpGf|JqIQqT@J*IPknDI-)$J3J%tO`-_z
znR#&LCN4L&L2B>l{34+oZoxMA;3yYdRE0LR!;MvVCazUnaKPhb_<OBWYlo-s^KdZf
zZ$NTDH5GE~C~N_phh~CDD&+#4GcaE{)^<n3O}K_oh(8L~Rv@D`(y%VdI&ds~P=SPN
z){3x3bTHgZpMZC3K88R3sNp-Ua=mbD5%Xz_bF5MKor0=KSyBoLM=O4X^K&z7*Y=BZ
zRcwf`a=q*g?yhiyx`F|PZWLnlE@8h7eRWgAX%wJM4)miEClY=#SA?oDvBSI@1Py=R
z-n~mpOVf?zz^&J&>&=C|W#{N#ko5Pq!_!a$S36Ln5IBqA<p8`o2A}Ua|DwylEt{J2
zr9?IONnFhiSxr!fm9*)K6U<XJZm?K|D#nB29CQI%?idTtfP`8sM13nVzu-48ypM+4
z$eK#ccbd477xET;RE9)8saaf#{)CRV#b1UEzQ+nK+%~D=t&?^LZ@0z_-{8aQP*AwH
z1>M&N%~R-a{<Bc6mx@*R7(94J37&c>mLR^|tsr6up8{wfX*Ix@O#q&t5`cTSyFUs^
zQZH3%^AKv;|F<F${MKBj+!kkX&cPSrE<;_e;{;IJX(f1L?2&@ASgceF#c~-Qa7F+;
z60UP<N851m2*;QN(DfjTDz!2^0}VM7z+P7e$O0Ch3>Cq)>;Py8z9~ENKCBdmTRT3*
z!_(+vC~ZFaV-&N$OrNjE5BYcRhj<D3KK#!Q$MIv_c!5In#X;ZA!$Kr|50{mz+~;`1
zc-<L?|Fy!6Y80v9jim}e3N3@m_!I1DQjS}oe!_ClE{NsgT)i4428o`U_%M<l?<jFx
z)=ElSJIV)WHUp&eY00w0H$&kBaG+FgVJ~loC&AKO6?_hDfa}is{o?c2fJYu~KOg%X
nJUM}nRQWz2h%1b6(DCs}(Z>|ci84O1OU`K@#H(g&Zu<WNAbqYs

diff --git a/docs/_build/doctrees/source/generated/pysegcnn.core.models.UNet.doctree b/docs/_build/doctrees/source/generated/pysegcnn.core.models.UNet.doctree
index b2dbf831d1a9438737d3807c76722aa3d44862eb..b89ad75eb33b76b2c53d7e87facdcb23b1b23395 100644
GIT binary patch
literal 77210
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
Nak@vTiS5iy|9?B#!=V5G

literal 115976
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

diff --git a/docs/_build/doctrees/source/generated/pysegcnn.core.models.doctree b/docs/_build/doctrees/source/generated/pysegcnn.core.models.doctree
deleted file mode 100644
index c0daf6db0f35aa1799069dd78e475da38cf05b35..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 11560
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
W;j`IGffX|voqx$uK?zydto<KVDuH4E

diff --git a/docs/_build/doctrees/source/install.doctree b/docs/_build/doctrees/source/install.doctree
deleted file mode 100644
index 9b01515b3c55b59c5170d8c51e6ff4ef1fc4040a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16065
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

diff --git a/docs/_build/doctrees/source/main.doctree b/docs/_build/doctrees/source/main.doctree
deleted file mode 100644
index 765811a4dbdd68a8f38b5c5f4f6ca1634cbada14..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 13640
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
G3;zL9=*yJ=

diff --git a/docs/_build/doctrees/source/modules.doctree b/docs/_build/doctrees/source/modules.doctree
deleted file mode 100644
index df0a22b202133625edfbfdd0f85c30b6070565e8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2650
zcmZ8jU27Xh6m@J%mSjt^oun_ZODJt|o7zr8A4*<I34JoSP)Z@7GK_Xcn!&p>+xf8N
zhd^6MX<*(m{l7i4yIM&WEZVtq=YE`f?w$Q}_rIS9Th%X&Z7HN$Tu{c8X57ZmV><H%
zS1x{xU;P!|#k0^i^v-H;G9JSgG%_J`X1I#K$1qCjPUiNaIlpIl=A>5banTW7vG;pC
z6aCO}(&c<@EA+~H%jcO=G3h{M_gB71zSnl%$0`mOdK|hXg=ZJVk$5C_Lbr+QI_&0B
z@p$d0Gz_S7Mozs$J}Lek$!v;sFUzU55aPX~Xi>lQm@ik0Da~#SpCuh1_8gt3ttiIg
znK(!u#YuSe=Jn(!Z)i4o_43ur$y~b0GKmS$u#-BbNuim~xxFwJ;htV?`zg}vWx6P}
zS8NT08XvI*e>!u9uLIQVeTqE9a{%-ip3m`oiRTQ@voNaNT{iBJCh#$`O784B>^Iw)
zHaz|lSAv2{RSBLn8l~Z-(HXZ^syTLeIFKsKJ>xTpJb=iV_(A+A-tf>X=z{UmiFmaO
zSZP^R97UMtdKy23u8@p@ARof8G0_To$`?~^IEz<XVNmhGYL(wZcL1KPV)x=}@vS%!
zFM!=H;J-j=#X1gQ+`x5yXJ}b+6X`lM>HIgVvL!oU2X9TR5sWTj-H<g9Cp!b!*{RE4
z#e-UI#<K3XC8c<g&OQpG%$r17QUi?|94sX@X+zI)=YTr;@2G94nbFE|FeP+<qq#=~
zmK`a^*P%b>iW};*fxSMXAiJYQxhgP$?HeoywO8Uzj@1yDkwo&e3wNCa_<an=Gp(J{
zj<0QAJqp9r&8Qez%(N*YBqIxQl>{_SL&C!3vs%J)UP;KEbb>5f4IY~VP46Lj@Jt&=
za(>J6c(ok{g68eA6OQ;o0xL(Iw@al?=rBI@bGRGbQKNtrGz_N&Bz=cw<SD86Zx~5c
zdPlg*G)p`VeeY)H-=ABF_mj;{!i~{}2&z~P`k-*gEpsu9wRf9VI+c|eP9N+%Fd_a9
zquS^yfaTGX&5Z{q!(mFm0wn=_awHVPFsEwn>6`;@hV?dDDm*qEz03&u59ENG)auuv
zn`t#ej(|flf?l4<MHJmIqTXq;5`}FEMh%%SO470ps8#|A!Wl*LWN=(b0IjmA_A60o
zxo4Uzio~Zwz9_ZjWc_4Ck<5`>X=TmNF=5iuX`T{kqTE|{gLn}Rkc<WYX){KKjT%`F
zo-itTNsto;hr)z{<AWrbQn*gU4$p;irG0&Qd3SerQQkYD)rB_mOU7?6p=mE;c$!Wm
zi|GV$ya37$sP-T~|KjC$fMsN6*#kF8vT}2>bmO$fohP}QRc?eUa=7R_ItBk(8jQVg
z3N{s_ZLBtYV#`$C58;z48mTNdDRYoEVZ^}VeT>3(iLN`e_sY=)5pphaJmBbVt`ofv
zY(ddXe|Yq+#mUFjx?Yl8XS5#O;WQHzZG!sNJ%x&;;X`ox#+L{t-Q?9cZh9TF8xpBz
zDD|@WkJC7?e!8i5$T86w`tcsV1m_Oco@TkGH-zJs$qBwL46c<bz8$V^(={D>^%y|k
zfkjd=30^zmsF`z&6<pCra0FI3d|m(>+(PL#562tQ`r?Kd)@JRZo7j&#AM(8<tlz~%
zytSd91n#~>Fz=$6TwC!R|8K>C4a4<PRi}rU#28BMVX>B^c3SGyVXjMRJp_+}6;qwJ
z)vr{aJP@|p{SAx#rPu1v@rHejMdQ*Oe)`Z>vx7?&&7R>C1Er2(Kht>*V37l+{ob2K
s{t?N)kH3KN_?|)!;akXJ&eRUup5GAfx8kZ~1D3{6)3NDl^wW#~0hZey<^TWy

diff --git a/docs/_build/doctrees/source/preprocessing.doctree b/docs/_build/doctrees/source/preprocessing.doctree
deleted file mode 100644
index 9447189fbe4a1974df0cdac3501add9a5d4e10f4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6209
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

diff --git a/docs/_build/doctrees/source/readme.doctree b/docs/_build/doctrees/source/readme.doctree
deleted file mode 100644
index 1fda9e038780a91cbb0ab13fa6d2d65f95a88802..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2425
zcmaJ@OK%%D5Ke4MvTRwllO`w-yD*BTNSj7ZgB}W>Qn)!8^&u#FazIc^N+irBw|v<0
zAwYWwkN~`e{lERVE3GUaB50xIaNhIHjQ-j9PxtTDpSbHPA@yuT8PkSwm*OTfMJT!U
z>2vzw-}F8`i+xM4oe8$!Dc%D|A*5oK>+~+gVP^MIxzSv{=Xl|z(XF`Xh_2|pOV30<
zcD(e8-@1z3w{L#?{f{>(bAVyvPd>|*Tl$Ao`v4^mW4EHP>XX<P_r-eb&V4$M8%k=P
z&cm3-E$Y3M<KPiX_I+J4m;LM&iaG}(-aDF>&D$mm)$%Z=#iiww%oAeI(`mj+Vplv7
zgKSY8#Gg-3F5U!7i;Gt;U%kATN`Fz^I6f`3zCb42MdQ<j<&>3tWF5RcJX;H6#MUcJ
zxsq7XiC;@ysKEHi(P(sxZ<CEt$(n>b{sO}?GhH}1Lh#}nL@bVw$Zzp{hv$1d&k%8c
zR;m+M(OkjJ%5ul;6;DC@D1KT7C!WLAjWFh|p4e^TNOYm`7G<tGE7^jQ^(I5L62$uj
zXBKr6&$I0PI4pwAbtP>*2MbD5*SP7p_fk&*&;1r}6Kk~RngJ_+Q58_o1z^SQdF)TQ
z=9YS66Ap|551y744%>|x0^OH5Zq1LuDx7w_DM-dazJ<9C{IWMGKA0HewekGc<=OqX
zlfkY-NoEsc%LK~M0e%&km)b$)lZL_-&&7A-T6#eiXoSVNz#N|EabS66tS5?Jah1;2
z;+CMQJ$B+gpGoA(Qy<)dsS`VlkHZw^hS$_;<O&=pUI|Ly1Ft*>l|IIy)K&0=>%uT_
z0UE(iUi|vPNxUDdUJ`Dtu|!bK6t~E8cD3*+?wa6NwRCDNDIVUrxuZhJIBb+I9axAS
ztX|xajC(l%hb#%?N7YE)QB+R@opPj`0oiL9N%5iOg|Un<UI831BY}+b*e#5nAV#D^
zGJ+PE$XOEIIHbWFvLwYd2}JF%P*$Wx9kN;zBmieMRaxO~O+jk4%e7yUD#rse1RV#i
zJwB_9<K(tv4Uxi=E9qo|&t1Z#qhpl=nS0q=bc1*v2MERi|FoW~fXtkYOr&b&*s$Ui
zK};NdRMhbfGG$C*Is-c%3GXX+a(sM!eLbpfyfAuX?DUxNt7CAw;}jodiL5b85YJ0w
z+1K-eS1+Ev`~_(l+DUQ8Or|W&94yRuW3Un=_mkR;@TG!@zNcg0pLvnaHsc}CRFbx_
zTK7pas6NHVwKq~@TII+A+MFW>6mMfAwMTT_p1aYW&WMmxq3{5s8_HyO4_rynOn(RT
zu7l*m`rI6eG6kJy@URdRZG!qXJ%x(p;X@#O8LITDUUc>Ln)muAfW#D1Pf+Sb^FPSr
zz=iQD-ySc=oS`3YU`ufBq3uzj480`0q*4(qUyS6uoIb{NuCMYYi<`|DK;HpHQZor$
zd*Z2`a$j$;eHa2NJhm@#!}8vGk3qFUZFU>T&^BognCg?f7D4Z2V)HIe#cLP)nc#0K
zIP*S<({m?|@cUW}T->=`s#<!dkQhVRJTx|x+)fL=#?9N5h7St~1uMr!wbid#zq&(g
zx%(>``wOeJ(1R8I7>m~DIsE9ZuKCTqxP@jfOvtUA;&x$_LShjErhV^pPXCPHKcu%n
lJpOW^hwyj7Va_xL+n!$`Z@1*SWLqqcp?SyV)fmR3{{g9yzY72W

diff --git a/docs/_build/html/_modules/core/cli.html b/docs/_build/html/_modules/core/cli.html
deleted file mode 100644
index d73d939..0000000
--- a/docs/_build/html/_modules/core/cli.html
+++ /dev/null
@@ -1,264 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>core.cli &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
-        <script src="../../_static/jquery.js"></script>
-        <script src="../../_static/underscore.js"></script>
-        <script src="../../_static/doctools.js"></script>
-        <script src="../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul>
-<li class="toctree-l1"><a class="reference internal" href="../../source/requirements.html">Requirements</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/api.html">API Reference</a></li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../../index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-          <li><a href="../index.html">Module code</a> &raquo;</li>
-        
-      <li>core.cli</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <h1>Source code for core.cli</h1><div class="highlight"><pre>
-<span></span><span class="sd">&quot;&quot;&quot;Command line interface parsers.</span>
-
-<span class="sd">License</span>
-<span class="sd">-------</span>
-
-<span class="sd">    Copyright (c) 2020 Daniel Frisinghelli</span>
-
-<span class="sd">    This source code is licensed under the GNU General Public License v3.</span>
-
-<span class="sd">    See the LICENSE file in the repository&#39;s root directory.</span>
-
-<span class="sd">&quot;&quot;&quot;</span>
-
-<span class="c1"># !/usr/bin/env python</span>
-<span class="c1"># -*- coding: utf-8 -*-</span>
-
-<span class="c1"># builtins</span>
-<span class="kn">import</span> <span class="nn">pathlib</span>
-<span class="kn">import</span> <span class="nn">argparse</span>
-
-
-<span class="c1"># epilogue to display at the end of each parser</span>
-<span class="n">EPILOGUE</span> <span class="o">=</span> <span class="s1">&#39;Author: Daniel Frisinghelli, daniel.frisinghelli@gmail.com&#39;</span>
-
-
-<div class="viewcode-block" id="structure_parser"><a class="viewcode-back" href="../../source/core.html#core.cli.structure_parser">[docs]</a><span class="k">def</span> <span class="nf">structure_parser</span><span class="p">():</span>
-    <span class="sd">&quot;&quot;&quot;Command line argument parser to standardize dataset structure.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="n">parser</span> <span class="o">=</span> <span class="n">argparse</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">(</span>
-        <span class="n">description</span><span class="o">=</span><span class="s1">&#39;Standardize the dataset directory structure.&#39;</span><span class="p">,</span>
-        <span class="n">epilog</span><span class="o">=</span><span class="n">EPILOGUE</span><span class="p">,</span>
-        <span class="n">formatter_class</span><span class="o">=</span><span class="k">lambda</span> <span class="n">prog</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">RawDescriptionHelpFormatter</span><span class="p">(</span>
-            <span class="n">prog</span><span class="p">,</span> <span class="n">max_help_position</span><span class="o">=</span><span class="mi">50</span><span class="p">,</span> <span class="n">indent_increment</span><span class="o">=</span><span class="mi">2</span><span class="p">))</span>
-
-    <span class="c1"># positional arguments</span>
-
-    <span class="c1"># positional argument: path to the archive</span>
-    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s1">&#39;archive&#39;</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">,</span>
-                        <span class="n">help</span><span class="o">=</span><span class="s1">&#39;Path to the dataset archive.&#39;</span><span class="p">)</span>
-
-    <span class="c1"># positional argument: path to extract and restructure the dataset</span>
-    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s1">&#39;target&#39;</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">,</span>
-                        <span class="n">help</span><span class="o">=</span><span class="s1">&#39;Path to save standardized dataset structure.&#39;</span><span class="p">)</span>
-
-    <span class="c1"># optional arguments</span>
-
-    <span class="c1"># default values</span>
-    <span class="n">default</span> <span class="o">=</span> <span class="s1">&#39;(default: </span><span class="si">%(default)s</span><span class="s1">)&#39;</span>
-
-    <span class="c1"># optional argument: whether to overwrite existing files</span>
-    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s1">&#39;-o&#39;</span><span class="p">,</span> <span class="s1">&#39;--overwrite&#39;</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="nb">bool</span><span class="p">,</span>
-                        <span class="n">help</span><span class="o">=</span><span class="s1">&#39;Overwrite files </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">default</span><span class="p">),</span>
-                        <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">nargs</span><span class="o">=</span><span class="s1">&#39;?&#39;</span><span class="p">,</span> <span class="n">const</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
-
-    <span class="c1"># optional argument: whether to copy or move extracted files</span>
-    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s1">&#39;-r&#39;</span><span class="p">,</span> <span class="s1">&#39;--remove&#39;</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="nb">bool</span><span class="p">,</span>
-                        <span class="n">help</span><span class="o">=</span><span class="s1">&#39;Remove original dataset </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">default</span><span class="p">),</span>
-                        <span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">nargs</span><span class="o">=</span><span class="s1">&#39;?&#39;</span><span class="p">,</span> <span class="n">const</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
-
-    <span class="k">return</span> <span class="n">parser</span></div>
-</pre></div>
-
-           </div>
-           
-          </div>
-          <footer>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/_modules/core/constants.html b/docs/_build/html/_modules/core/constants.html
deleted file mode 100644
index 046478e..0000000
--- a/docs/_build/html/_modules/core/constants.html
+++ /dev/null
@@ -1,314 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>core.constants &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
-        <script src="../../_static/jquery.js"></script>
-        <script src="../../_static/underscore.js"></script>
-        <script src="../../_static/doctools.js"></script>
-        <script src="../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul>
-<li class="toctree-l1"><a class="reference internal" href="../../source/requirements.html">Requirements</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/api.html">API Reference</a></li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../../index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-          <li><a href="../index.html">Module code</a> &raquo;</li>
-        
-      <li>core.constants</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <h1>Source code for core.constants</h1><div class="highlight"><pre>
-<span></span><span class="sd">&quot;&quot;&quot;A collection of constant values.</span>
-
-<span class="sd">License</span>
-<span class="sd">-------</span>
-
-<span class="sd">    Copyright (c) 2020 Daniel Frisinghelli</span>
-
-<span class="sd">    This source code is licensed under the GNU General Public License v3.</span>
-
-<span class="sd">    See the LICENSE file in the repository&#39;s root directory.</span>
-
-<span class="sd">&quot;&quot;&quot;</span>
-
-<span class="c1"># !/usr/bin/env python</span>
-<span class="c1"># -*- coding: utf-8 -*-</span>
-
-<span class="c1"># builtins</span>
-<span class="kn">import</span> <span class="nn">enum</span>
-
-
-<span class="c1"># Landsat 8 bands</span>
-<div class="viewcode-block" id="Landsat8"><a class="viewcode-back" href="../../source/core.html#core.constants.Landsat8">[docs]</a><span class="k">class</span> <span class="nc">Landsat8</span><span class="p">(</span><span class="n">enum</span><span class="o">.</span><span class="n">Enum</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;The spectral bands of the Landsat 8 sensors.</span>
-
-<span class="sd">    sensors:</span>
-<span class="sd">        - Operational Land Imager (OLI), (bands 1-9)</span>
-<span class="sd">        - Thermal Infrared Sensor (TIRS), (bands 10, 11)</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="n">violet</span> <span class="o">=</span> <span class="mi">1</span>
-    <span class="n">blue</span> <span class="o">=</span> <span class="mi">2</span>
-    <span class="n">green</span> <span class="o">=</span> <span class="mi">3</span>
-    <span class="n">red</span> <span class="o">=</span> <span class="mi">4</span>
-    <span class="n">nir</span> <span class="o">=</span> <span class="mi">5</span>
-    <span class="n">swir1</span> <span class="o">=</span> <span class="mi">6</span>
-    <span class="n">swir2</span> <span class="o">=</span> <span class="mi">7</span>
-    <span class="n">pan</span> <span class="o">=</span> <span class="mi">8</span>
-    <span class="n">cirrus</span> <span class="o">=</span> <span class="mi">9</span>
-    <span class="n">tir1</span> <span class="o">=</span> <span class="mi">10</span></div>
-    <span class="c1"># tir2 = 11</span>
-
-
-<span class="c1"># Sentinel 2 bands</span>
-<div class="viewcode-block" id="Sentinel2"><a class="viewcode-back" href="../../source/core.html#core.constants.Sentinel2">[docs]</a><span class="k">class</span> <span class="nc">Sentinel2</span><span class="p">(</span><span class="n">enum</span><span class="o">.</span><span class="n">Enum</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;The spectral bands of the Sentinel-2 MultiSpectral Instrument (MSI).&quot;&quot;&quot;</span>
-
-    <span class="n">aerosol</span> <span class="o">=</span> <span class="mi">1</span>
-    <span class="n">blue</span> <span class="o">=</span> <span class="mi">2</span>
-    <span class="n">green</span> <span class="o">=</span> <span class="mi">3</span>
-    <span class="n">red</span> <span class="o">=</span> <span class="mi">4</span>
-    <span class="n">vnir1</span> <span class="o">=</span> <span class="mi">5</span>
-    <span class="n">vnir2</span> <span class="o">=</span> <span class="mi">6</span>
-    <span class="n">vnir3</span> <span class="o">=</span> <span class="mi">7</span>
-    <span class="n">nir</span> <span class="o">=</span> <span class="mi">8</span>
-    <span class="n">nnir</span> <span class="o">=</span> <span class="s1">&#39;8A&#39;</span>
-    <span class="n">vapor</span> <span class="o">=</span> <span class="mi">9</span>
-    <span class="n">cirrus</span> <span class="o">=</span> <span class="mi">10</span>
-    <span class="n">swir1</span> <span class="o">=</span> <span class="mi">11</span>
-    <span class="n">swir2</span> <span class="o">=</span> <span class="mi">12</span></div>
-
-
-<span class="c1"># generic class label enumeration class</span>
-<div class="viewcode-block" id="Label"><a class="viewcode-back" href="../../source/core.html#core.constants.Label">[docs]</a><span class="k">class</span> <span class="nc">Label</span><span class="p">(</span><span class="n">enum</span><span class="o">.</span><span class="n">Enum</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Generic enumeration for class labels.&quot;&quot;&quot;</span>
-
-    <span class="nd">@property</span>
-    <span class="k">def</span> <span class="nf">id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Return the value of a class in the ground truth.&quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">value</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-
-    <span class="nd">@property</span>
-    <span class="k">def</span> <span class="nf">color</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Return the color to plot a class.&quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">value</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span></div>
-
-
-<span class="c1"># labels of the Sparcs dataset</span>
-<div class="viewcode-block" id="SparcsLabels"><a class="viewcode-back" href="../../source/core.html#core.constants.SparcsLabels">[docs]</a><span class="k">class</span> <span class="nc">SparcsLabels</span><span class="p">(</span><span class="n">Label</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Class labels of the `Sparcs`_ dataset.</span>
-
-<span class="sd">    .. _Sparcs:</span>
-<span class="sd">        https://www.usgs.gov/land-resources/nli/landsat/spatial-procedures-automated-removal-cloud-and-shadow-sparcs-validation</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="n">Shadow</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">&#39;grey&#39;</span>
-    <span class="n">Shadow_over_water</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;darkblue&#39;</span>
-    <span class="n">Water</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span> <span class="s1">&#39;blue&#39;</span>
-    <span class="n">Snow</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span> <span class="s1">&#39;lightblue&#39;</span>
-    <span class="n">Land</span> <span class="o">=</span> <span class="mi">4</span><span class="p">,</span> <span class="s1">&#39;sienna&#39;</span>
-    <span class="n">Cloud</span> <span class="o">=</span> <span class="mi">5</span><span class="p">,</span> <span class="s1">&#39;white&#39;</span>
-    <span class="n">Flooded</span> <span class="o">=</span> <span class="mi">6</span><span class="p">,</span> <span class="s1">&#39;yellow&#39;</span></div>
-
-
-<span class="c1"># labels of the Cloud95 dataset</span>
-<div class="viewcode-block" id="Cloud95Labels"><a class="viewcode-back" href="../../source/core.html#core.constants.Cloud95Labels">[docs]</a><span class="k">class</span> <span class="nc">Cloud95Labels</span><span class="p">(</span><span class="n">Label</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Class labels of the `Cloud-95`_ dataset.</span>
-
-<span class="sd">    .. _Cloud-95:</span>
-<span class="sd">        https://github.com/SorourMo/95-Cloud-An-Extension-to-38-Cloud-Dataset</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="n">Clear</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">&#39;skyblue&#39;</span>
-    <span class="n">Cloud</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;white&#39;</span></div>
-
-
-<span class="c1"># labels of the ProSnow dataset</span>
-<div class="viewcode-block" id="ProSnowLabels"><a class="viewcode-back" href="../../source/core.html#core.constants.ProSnowLabels">[docs]</a><span class="k">class</span> <span class="nc">ProSnowLabels</span><span class="p">(</span><span class="n">Label</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Class labels of the ProSnow datasets.&quot;&quot;&quot;</span>
-
-    <span class="n">Cloud</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">&#39;white&#39;</span>
-    <span class="n">Snow</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;lightblue&#39;</span>
-    <span class="n">Snow_free</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span> <span class="s1">&#39;sienna&#39;</span></div>
-</pre></div>
-
-           </div>
-           
-          </div>
-          <footer>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/_modules/core/dataset.html b/docs/_build/html/_modules/core/dataset.html
deleted file mode 100644
index 8b56cc4..0000000
--- a/docs/_build/html/_modules/core/dataset.html
+++ /dev/null
@@ -1,1594 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>core.dataset &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
-        <script src="../../_static/jquery.js"></script>
-        <script src="../../_static/underscore.js"></script>
-        <script src="../../_static/doctools.js"></script>
-        <script src="../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul>
-<li class="toctree-l1"><a class="reference internal" href="../../source/requirements.html">Requirements</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/api.html">API Reference</a></li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../../index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-          <li><a href="../index.html">Module code</a> &raquo;</li>
-        
-      <li>core.dataset</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <h1>Source code for core.dataset</h1><div class="highlight"><pre>
-<span></span><span class="sd">&quot;&quot;&quot;Custom dataset classes compliant to the PyTorch standard.</span>
-
-<span class="sd">Each custom dataset should inherit from torch.utils.data.Dataset to benefit</span>
-<span class="sd">from the torch.utils.data.DataLoader class, which implements helpful utilities</span>
-<span class="sd">during model training.</span>
-
-<span class="sd">For any kind of image-like dataset, inherit the ImageDataset class to create</span>
-<span class="sd">your custom dataset.</span>
-
-<span class="sd">License</span>
-<span class="sd">-------</span>
-
-<span class="sd">    Copyright (c) 2020 Daniel Frisinghelli</span>
-
-<span class="sd">    This source code is licensed under the GNU General Public License v3.</span>
-
-<span class="sd">    See the LICENSE file in the repository&#39;s root directory.</span>
-
-<span class="sd">&quot;&quot;&quot;</span>
-
-<span class="c1"># !/usr/bin/env python</span>
-<span class="c1"># -*- coding: utf-8 -*-</span>
-
-<span class="c1"># builtins</span>
-<span class="kn">import</span> <span class="nn">os</span>
-<span class="kn">import</span> <span class="nn">re</span>
-<span class="kn">import</span> <span class="nn">csv</span>
-<span class="kn">import</span> <span class="nn">enum</span>
-<span class="kn">import</span> <span class="nn">itertools</span>
-<span class="kn">import</span> <span class="nn">logging</span>
-
-<span class="c1"># externals</span>
-<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
-<span class="kn">import</span> <span class="nn">torch</span>
-<span class="kn">from</span> <span class="nn">torch.utils.data</span> <span class="kn">import</span> <span class="n">Dataset</span>
-
-<span class="c1"># locals</span>
-<span class="kn">from</span> <span class="nn">pysegcnn.core.constants</span> <span class="kn">import</span> <span class="p">(</span><span class="n">Landsat8</span><span class="p">,</span> <span class="n">Sentinel2</span><span class="p">,</span> <span class="n">Label</span><span class="p">,</span> <span class="n">SparcsLabels</span><span class="p">,</span>
-                                     <span class="n">Cloud95Labels</span><span class="p">,</span> <span class="n">ProSnowLabels</span><span class="p">)</span>
-<span class="kn">from</span> <span class="nn">pysegcnn.core.utils</span> <span class="kn">import</span> <span class="p">(</span><span class="n">img2np</span><span class="p">,</span> <span class="n">is_divisible</span><span class="p">,</span> <span class="n">tile_topleft_corner</span><span class="p">,</span>
-                                 <span class="n">parse_landsat_scene</span><span class="p">,</span> <span class="n">parse_sentinel2_scene</span><span class="p">)</span>
-
-<span class="c1"># module level logger</span>
-<span class="n">LOGGER</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
-
-
-<div class="viewcode-block" id="ImageDataset"><a class="viewcode-back" href="../../source/core.html#core.dataset.ImageDataset">[docs]</a><span class="k">class</span> <span class="nc">ImageDataset</span><span class="p">(</span><span class="n">Dataset</span><span class="p">):</span>
-    <span class="sa">r</span><span class="sd">&quot;&quot;&quot;Base class for multispectral image data.</span>
-
-<span class="sd">    Inheriting from `torch.utils.data.Dataset` to be compliant to the PyTorch</span>
-<span class="sd">    standard. Furthermore, using instances of `torch.utils.data.Dataset`</span>
-<span class="sd">    enables the use of the handy `torch.utils.data.DataLoader` class during</span>
-<span class="sd">    model training.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    root_dir : `str`</span>
-<span class="sd">        The root directory, path to the dataset.</span>
-<span class="sd">    use_bands : `list` [`str`], optional</span>
-<span class="sd">        A list of the spectral bands to use. The default is [].</span>
-<span class="sd">    tile_size : `int` or `None`, optional</span>
-<span class="sd">        The size of the tiles. If not `None`, each scene is divided into square</span>
-<span class="sd">        tiles of shape (tile_size, tile_size). The default is None.</span>
-<span class="sd">    pad : `bool`, optional</span>
-<span class="sd">        Whether to center pad the input image. Set ``pad`` = True, if the</span>
-<span class="sd">        images are not evenly divisible by the ``tile_size``. The image data is</span>
-<span class="sd">        padded with a constant padding value of zero. For each image, the</span>
-<span class="sd">        corresponding ground truth image is padded with a &quot;no data&quot; label.</span>
-<span class="sd">        The default is False.</span>
-<span class="sd">    gt_pattern : `str`, optional</span>
-<span class="sd">        A regural expression to match the ground truth naming convention.</span>
-<span class="sd">        All directories and subdirectories in ``root_dir`` are searched for</span>
-<span class="sd">        files matching ``gt_pattern``. The default is &#39;(.*)gt\\.tif&#39;.</span>
-<span class="sd">    sort : `bool`, optional</span>
-<span class="sd">        Whether to chronologically sort the samples. Useful for time series</span>
-<span class="sd">        data. The default is False.</span>
-<span class="sd">    seed : `int`, optional</span>
-<span class="sd">        The random seed. Used to split the dataset into training, validation</span>
-<span class="sd">        and test set. Useful for reproducibility. The default is 0.</span>
-<span class="sd">    transforms : `list` [`pysegcnn.core.split.Augment`], optional</span>
-<span class="sd">        List of `pysegcnn.core.split.Augment` instances. Each item in</span>
-<span class="sd">        ``transforms`` generates a distinct transformed version of the dataset.</span>
-<span class="sd">        The total dataset is composed of the original untransformed dataset</span>
-<span class="sd">        together with each transformed version of it.</span>
-<span class="sd">        If ``transforms`` = [], only the original dataset is used.</span>
-<span class="sd">        The default is [].</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="o">=</span><span class="p">[],</span> <span class="n">tile_size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-                 <span class="n">gt_pattern</span><span class="o">=</span><span class="s1">&#39;(.*)gt.tif&#39;</span><span class="p">,</span> <span class="n">sort</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">transforms</span><span class="o">=</span><span class="p">[]):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
-
-        <span class="c1"># dataset configuration</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">=</span> <span class="n">root_dir</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">use_bands</span> <span class="o">=</span> <span class="n">use_bands</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">tile_size</span> <span class="o">=</span> <span class="n">tile_size</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="o">=</span> <span class="n">pad</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">gt_pattern</span> <span class="o">=</span> <span class="n">gt_pattern</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">sort</span> <span class="o">=</span> <span class="n">sort</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">seed</span> <span class="o">=</span> <span class="n">seed</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">transforms</span> <span class="o">=</span> <span class="n">transforms</span>
-
-        <span class="c1"># initialize instance attributes</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">_init_attributes</span><span class="p">()</span>
-
-        <span class="c1"># the samples of the dataset</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">scenes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">compose_scenes</span><span class="p">()</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">_assert_compose_scenes</span><span class="p">()</span>
-
-    <span class="k">def</span> <span class="nf">_init_attributes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Initialize the class instance attributes.&quot;&quot;&quot;</span>
-        <span class="c1"># the size of a scene/patch in the dataset</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_size</span><span class="p">()</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">_assert_get_size</span><span class="p">()</span>
-
-        <span class="c1"># the available spectral bands in the dataset</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">sensor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_sensor</span><span class="p">()</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">_assert_get_sensor</span><span class="p">()</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">bands</span> <span class="o">=</span> <span class="p">{</span><span class="n">band</span><span class="o">.</span><span class="n">value</span><span class="p">:</span> <span class="n">band</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">band</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">sensor</span><span class="p">}</span>
-
-        <span class="c1"># the class labels</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">_label_class</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_labels</span><span class="p">()</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">_assert_get_labels</span><span class="p">()</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">labels</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_labels</span><span class="p">()</span>
-
-        <span class="c1"># check which bands to use</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">use_bands</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">use_bands</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">use_bands</span> <span class="k">else</span>
-                          <span class="p">[</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">bands</span><span class="o">.</span><span class="n">values</span><span class="p">()])</span>
-
-        <span class="c1"># calculate number of resulting tiles and check whether the images are</span>
-        <span class="c1"># evenly divisible in square tiles of size (tile_size x tile_size)</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">tiles</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">padding</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tile_size</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">tiles</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">padding</span> <span class="o">=</span> <span class="n">is_divisible</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tile_size</span><span class="p">,</span>
-                                                    <span class="bp">self</span><span class="o">.</span><span class="n">pad</span><span class="p">)</span>
-
-        <span class="c1"># the size of the padded scenes</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">height</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">padding</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">padding</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">width</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">padding</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">padding</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
-
-        <span class="c1"># the topleft corners of the tiles</span>
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tile_size</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">topleft</span> <span class="o">=</span> <span class="n">tile_topleft_corner</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">height</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">width</span><span class="p">),</span>
-                                               <span class="bp">self</span><span class="o">.</span><span class="n">tile_size</span><span class="p">)</span>
-
-        <span class="c1"># always use the original dataset together with the augmentations</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">transforms</span> <span class="o">=</span> <span class="p">[</span><span class="kc">None</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">transforms</span>
-
-        <span class="c1"># when padding, add a new &quot;no data&quot; label to the ground truth</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">cval</span> <span class="o">=</span> <span class="mi">0</span>
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="ow">and</span> <span class="nb">sum</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">padding</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">cval</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">labels</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">labels</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">cval</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;label&#39;</span><span class="p">:</span> <span class="s1">&#39;No data&#39;</span><span class="p">,</span> <span class="s1">&#39;color&#39;</span><span class="p">:</span> <span class="s1">&#39;black&#39;</span><span class="p">}</span>
-            <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Adding label &quot;No data&quot; with value=</span><span class="si">{}</span><span class="s1"> to ground truth.&#39;</span>
-                        <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cval</span><span class="p">))</span>
-
-    <span class="k">def</span> <span class="nf">_build_labels</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Build the label dictionary.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        labels : `dict` [`int`, `dict`]</span>
-<span class="sd">            The label dictionary. The keys are the values of the class labels</span>
-<span class="sd">            in the ground truth ``y``. Each nested `dict` should have keys:</span>
-<span class="sd">                ``&#39;color&#39;``</span>
-<span class="sd">                    A named color (`str`).</span>
-<span class="sd">                ``&#39;label&#39;``</span>
-<span class="sd">                    The name of the class label (`str`).</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="p">{</span><span class="n">band</span><span class="o">.</span><span class="n">id</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;label&#39;</span><span class="p">:</span> <span class="n">band</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;_&#39;</span><span class="p">,</span> <span class="s1">&#39; &#39;</span><span class="p">),</span>
-                          <span class="s1">&#39;color&#39;</span><span class="p">:</span> <span class="n">band</span><span class="o">.</span><span class="n">color</span><span class="p">}</span>
-                <span class="k">for</span> <span class="n">band</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_label_class</span><span class="p">}</span>
-
-    <span class="k">def</span> <span class="nf">_assert_compose_scenes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Check whether compose_scenes() is correctly implemented.&quot;&quot;&quot;</span>
-        <span class="c1"># list of required keys</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">keys</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">use_bands</span> <span class="o">+</span> <span class="p">[</span><span class="s1">&#39;gt&#39;</span><span class="p">,</span> <span class="s1">&#39;date&#39;</span><span class="p">,</span> <span class="s1">&#39;tile&#39;</span><span class="p">,</span> <span class="s1">&#39;transform&#39;</span><span class="p">,</span> <span class="s1">&#39;id&#39;</span><span class="p">]</span>
-
-        <span class="c1"># check if each scene is correctly composed</span>
-        <span class="k">for</span> <span class="n">scene</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">scenes</span><span class="p">:</span>
-            <span class="c1"># check the type of each scene</span>
-            <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">scene</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
-                <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1">.compose_scenes() should return a list of &#39;</span>
-                                <span class="s1">&#39;dictionaries.&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span>
-                                <span class="p">)</span>
-
-            <span class="c1"># check if each scene dictionary has the correct keys</span>
-            <span class="k">if</span> <span class="ow">not</span> <span class="nb">all</span><span class="p">([</span><span class="n">k</span> <span class="ow">in</span> <span class="n">scene</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">keys</span><span class="p">]):</span>
-                <span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="s1">&#39;Each scene dictionary should have keys </span><span class="si">{}</span><span class="s1">.&#39;</span>
-                               <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">keys</span><span class="p">))</span>
-
-    <span class="k">def</span> <span class="nf">_assert_get_size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Check whether get_size() is correctly implemented.&quot;&quot;&quot;</span>
-        <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
-            <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1">.get_size() should return the spatial size of &#39;</span>
-                            <span class="s1">&#39;an image sample as tuple, i.e. (height, width).&#39;</span>
-                            <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">))</span>
-
-    <span class="k">def</span> <span class="nf">_assert_get_sensor</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Check whether get_sensor() is correctly implemented.&quot;&quot;&quot;</span>
-        <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sensor</span><span class="p">,</span> <span class="n">enum</span><span class="o">.</span><span class="n">EnumMeta</span><span class="p">):</span>
-            <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1">.get_sensor() should return an instance of &#39;</span>
-                            <span class="s1">&#39;enum.Enum, containing an enumeration of the &#39;</span>
-                            <span class="s1">&#39;spectral bands of the sensor the dataset is &#39;</span>
-                            <span class="s1">&#39;derived from. Examples can be found in &#39;</span>
-                            <span class="s1">&#39;pysegcnn.core.constants.py.&#39;</span>
-                            <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">))</span>
-
-    <span class="k">def</span> <span class="nf">_assert_get_labels</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Check whether get_labels() is correctly implemented.&quot;&quot;&quot;</span>
-        <span class="k">if</span> <span class="ow">not</span> <span class="nb">issubclass</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_label_class</span><span class="p">,</span> <span class="n">Label</span><span class="p">):</span>
-            <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1">.get_labels() should return an instance of &#39;</span>
-                            <span class="s1">&#39;pysegcnn.core.constants.Label, &#39;</span>
-                            <span class="s1">&#39;containing an enumeration of the &#39;</span>
-                            <span class="s1">&#39;class labels, together with the corresponing id &#39;</span>
-                            <span class="s1">&#39;in the ground truth mask and a color for &#39;</span>
-                            <span class="s1">&#39;visualization. Examples can be found in &#39;</span>
-                            <span class="s1">&#39;pysegcnn.core.constants.py.&#39;</span>
-                            <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">))</span>
-
-    <span class="k">def</span> <span class="fm">__len__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Return the number of samples in the dataset.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        nsamples : `int`</span>
-<span class="sd">            The number of samples in the dataset.</span>
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">scenes</span><span class="p">)</span>
-
-    <span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">idx</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Return the data of a sample of the dataset given an index ``idx``.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        idx : `int`</span>
-<span class="sd">            The index of the sample.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        x : `torch.Tensor`</span>
-<span class="sd">            The sample input data.</span>
-<span class="sd">        y : `torch.Tensor`</span>
-<span class="sd">            The sample ground truth.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># select a scene</span>
-        <span class="n">scene</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">read_scene</span><span class="p">(</span><span class="n">idx</span><span class="p">)</span>
-
-        <span class="c1"># get samples</span>
-        <span class="c1"># data: (tiles, bands, height, width)</span>
-        <span class="c1"># gt: (height, width)</span>
-        <span class="n">data</span><span class="p">,</span> <span class="n">gt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">build_samples</span><span class="p">(</span><span class="n">scene</span><span class="p">)</span>
-
-        <span class="c1"># preprocess samples</span>
-        <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">gt</span><span class="p">)</span>
-
-        <span class="c1"># apply transformation</span>
-        <span class="k">if</span> <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;transform&#39;</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-            <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;transform&#39;</span><span class="p">](</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
-
-        <span class="c1"># convert to torch tensors</span>
-        <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_tensor</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">torch</span><span class="o">.</span><span class="n">float32</span><span class="p">)</span>
-        <span class="n">y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_tensor</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">torch</span><span class="o">.</span><span class="n">uint8</span><span class="p">)</span>
-
-        <span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span>
-
-<div class="viewcode-block" id="ImageDataset.compose_scenes"><a class="viewcode-back" href="../../source/core.html#core.dataset.ImageDataset.compose_scenes">[docs]</a>    <span class="k">def</span> <span class="nf">compose_scenes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Build the list of samples of the dataset.</span>
-
-<span class="sd">        Each sample is represented by a dictionary.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        NotImplementedError</span>
-<span class="sd">            Raised if the `pysegcnn.core.dataset.ImageDataset` class is not</span>
-<span class="sd">            inherited.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        samples : `list` [`dict`]</span>
-<span class="sd">            Each dictionary representing a sample should have keys:</span>
-<span class="sd">                ``&#39;band_name_1&#39;``</span>
-<span class="sd">                    Path to the file of band_1.</span>
-<span class="sd">                ``&#39;band_name_2&#39;``</span>
-<span class="sd">                    Path to the file of band_2.</span>
-<span class="sd">                ``&#39;band_name_n&#39;``</span>
-<span class="sd">                    Path to the file of band_n.</span>
-<span class="sd">                ``&#39;gt&#39;``</span>
-<span class="sd">                    Path to the ground truth file.</span>
-<span class="sd">                ``&#39;date&#39;``</span>
-<span class="sd">                    The date of the sample.</span>
-<span class="sd">                ``&#39;tile&#39;``</span>
-<span class="sd">                    The tile id of the sample.</span>
-<span class="sd">                ``&#39;transform&#39;``</span>
-<span class="sd">                    The transformation to apply.</span>
-<span class="sd">                ``&#39;id&#39;``</span>
-<span class="sd">                    The scene identifier.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s1">&#39;Inherit the ImageDataset class and &#39;</span>
-                                  <span class="s1">&#39;implement the method.&#39;</span><span class="p">)</span></div>
-
-<div class="viewcode-block" id="ImageDataset.get_size"><a class="viewcode-back" href="../../source/core.html#core.dataset.ImageDataset.get_size">[docs]</a>    <span class="k">def</span> <span class="nf">get_size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Return the size of the images in the dataset.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        NotImplementedError</span>
-<span class="sd">            Raised if the `pysegcnn.core.dataset.ImageDataset` class is not</span>
-<span class="sd">            inherited.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        size : `tuple`</span>
-<span class="sd">            The image size (height, width).</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s1">&#39;Inherit the ImageDataset class and &#39;</span>
-                                  <span class="s1">&#39;implement the method.&#39;</span><span class="p">)</span></div>
-
-<div class="viewcode-block" id="ImageDataset.get_sensor"><a class="viewcode-back" href="../../source/core.html#core.dataset.ImageDataset.get_sensor">[docs]</a>    <span class="k">def</span> <span class="nf">get_sensor</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Return an enumeration of the bands of the sensor of the dataset.</span>
-
-<span class="sd">        Examples can be found in `pysegcnn.core.constants`.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        NotImplementedError</span>
-<span class="sd">            Raised if the `pysegcnn.core.dataset.ImageDataset` class is not</span>
-<span class="sd">            inherited.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        sensor : `enum.Enum`</span>
-<span class="sd">            An enumeration of the bands of the sensor.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s1">&#39;Inherit the ImageDataset class and &#39;</span>
-                                  <span class="s1">&#39;implement the method.&#39;</span><span class="p">)</span></div>
-
-<div class="viewcode-block" id="ImageDataset.get_labels"><a class="viewcode-back" href="../../source/core.html#core.dataset.ImageDataset.get_labels">[docs]</a>    <span class="k">def</span> <span class="nf">get_labels</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Return an enumeration of the class labels of the dataset.</span>
-
-<span class="sd">        Examples can be found in `pysegcnn.core.constants`.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        NotImplementedError</span>
-<span class="sd">            Raised if the `pysegcnn.core.dataset.ImageDataset` class is not</span>
-<span class="sd">            inherited.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        labels : `enum.Enum`</span>
-<span class="sd">            The class labels.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s1">&#39;Inherit the ImageDataset class and &#39;</span>
-                                  <span class="s1">&#39;implement the method.&#39;</span><span class="p">)</span></div>
-
-<div class="viewcode-block" id="ImageDataset.preprocess"><a class="viewcode-back" href="../../source/core.html#core.dataset.ImageDataset.preprocess">[docs]</a>    <span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">gt</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Preprocess a sample before feeding it to a model.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        data : `numpy.ndarray`</span>
-<span class="sd">            The sample input data.</span>
-<span class="sd">        gt : `numpy.ndarray`</span>
-<span class="sd">            The sample ground truth.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        NotImplementedError</span>
-<span class="sd">            Raised if the `pysegcnn.core.dataset.ImageDataset` class is not</span>
-<span class="sd">            inherited.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        data : `numpy.ndarray`</span>
-<span class="sd">            The preprocessed input data.</span>
-<span class="sd">        gt : `numpy.ndarray`</span>
-<span class="sd">            The preprocessed ground truth data.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s1">&#39;Inherit the ImageDataset class and &#39;</span>
-                                  <span class="s1">&#39;implement the method.&#39;</span><span class="p">)</span></div>
-
-<div class="viewcode-block" id="ImageDataset.parse_scene_id"><a class="viewcode-back" href="../../source/core.html#core.dataset.ImageDataset.parse_scene_id">[docs]</a>    <span class="k">def</span> <span class="nf">parse_scene_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">scene_id</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Parse the scene identifier.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        scene_id : `str`</span>
-<span class="sd">            A scene identifier.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        NotImplementedError</span>
-<span class="sd">            Raised if the `pysegcnn.core.dataset.ImageDataset` class is not</span>
-<span class="sd">            inherited.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        scene : `dict` or `None`</span>
-<span class="sd">            A dictionary containing scene metadata. If `None`, ``scene_id`` is</span>
-<span class="sd">            not a valid scene identifier.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s1">&#39;Inherit the ImageDataset class and &#39;</span>
-                                  <span class="s1">&#39;implement the method.&#39;</span><span class="p">)</span></div>
-
-<div class="viewcode-block" id="ImageDataset.read_scene"><a class="viewcode-back" href="../../source/core.html#core.dataset.ImageDataset.read_scene">[docs]</a>    <span class="k">def</span> <span class="nf">read_scene</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">idx</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Read the data of the sample with index ``idx``.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        idx : `int`</span>
-<span class="sd">            The index of the sample.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        scene_data : `dict`</span>
-<span class="sd">            The sample data dictionary with keys:</span>
-<span class="sd">                ``&#39;band_name_1&#39;``</span>
-<span class="sd">                    data of band_1 (`numpy.ndarray`).</span>
-<span class="sd">                ``&#39;band_name_2&#39;``</span>
-<span class="sd">                    data of band_2 (`numpy.ndarray`).</span>
-<span class="sd">                ``&#39;band_name_n&#39;``</span>
-<span class="sd">                    data of band_n (`numpy.ndarray`).</span>
-<span class="sd">                ``&#39;gt&#39;``</span>
-<span class="sd">                    data of the ground truth (`numpy.ndarray`).</span>
-<span class="sd">                ``&#39;date&#39;``</span>
-<span class="sd">                    The date of the sample.</span>
-<span class="sd">                ``&#39;tile&#39;``</span>
-<span class="sd">                    The tile id of the sample.</span>
-<span class="sd">                ``&#39;transform&#39;``</span>
-<span class="sd">                    The transformation to apply.</span>
-<span class="sd">                ``&#39;id&#39;``</span>
-<span class="sd">                    The scene identifier.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># select a scene from the root directory</span>
-        <span class="n">scene</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">scenes</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span>
-
-        <span class="c1"># read each band of the scene into a numpy array</span>
-        <span class="n">scene_data</span> <span class="o">=</span> <span class="p">{}</span>
-        <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">scene</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-
-            <span class="c1"># pad zeros to each band if self.pad=True, but pad self.cval to</span>
-            <span class="c1"># the ground truth</span>
-            <span class="n">npad</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;gt&#39;</span> <span class="k">else</span> <span class="mi">0</span>
-            <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">and</span> <span class="n">key</span> <span class="o">!=</span> <span class="s1">&#39;id&#39;</span><span class="p">:</span>
-                <span class="n">scene_data</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">img2np</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tile_size</span><span class="p">,</span> <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;tile&#39;</span><span class="p">],</span>
-                                         <span class="bp">self</span><span class="o">.</span><span class="n">pad</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cval</span> <span class="o">*</span> <span class="n">npad</span><span class="p">)</span>
-            <span class="k">else</span><span class="p">:</span>
-                <span class="n">scene_data</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
-
-        <span class="k">return</span> <span class="n">scene_data</span></div>
-
-<div class="viewcode-block" id="ImageDataset.build_samples"><a class="viewcode-back" href="../../source/core.html#core.dataset.ImageDataset.build_samples">[docs]</a>    <span class="k">def</span> <span class="nf">build_samples</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">scene</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Stack the bands of a sample in a single array.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        scene : `dict`</span>
-<span class="sd">            The sample data dictionary with keys:</span>
-<span class="sd">                ``&#39;band_name_1&#39;``</span>
-<span class="sd">                    data of band_1 (`numpy.ndarray`).</span>
-<span class="sd">                ``&#39;band_name_2&#39;``</span>
-<span class="sd">                    data of band_2 (`numpy.ndarray`).</span>
-<span class="sd">                ``&#39;band_name_n&#39;``</span>
-<span class="sd">                    data of band_n (`numpy.ndarray`).</span>
-<span class="sd">                ``&#39;gt&#39;``</span>
-<span class="sd">                    data of the ground truth (`numpy.ndarray`).</span>
-<span class="sd">                ``&#39;date&#39;``</span>
-<span class="sd">                    The date of the sample.</span>
-<span class="sd">                ``&#39;tile&#39;``</span>
-<span class="sd">                    The tile id of the sample.</span>
-<span class="sd">                ``&#39;transform&#39;``</span>
-<span class="sd">                    The transformation to apply.</span>
-<span class="sd">                ``&#39;id&#39;``</span>
-<span class="sd">                    The scene identifier.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        stack : `numpy.ndarray`</span>
-<span class="sd">            The input data of the sample.</span>
-<span class="sd">        gt : TYPE</span>
-<span class="sd">            The ground truth of the sample.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># iterate over the channels to stack</span>
-        <span class="n">stack</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">stack</span><span class="p">([</span><span class="n">scene</span><span class="p">[</span><span class="n">band</span><span class="p">]</span> <span class="k">for</span> <span class="n">band</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">use_bands</span><span class="p">],</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
-        <span class="n">gt</span> <span class="o">=</span> <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;gt&#39;</span><span class="p">]</span>
-
-        <span class="k">return</span> <span class="n">stack</span><span class="p">,</span> <span class="n">gt</span></div>
-
-<div class="viewcode-block" id="ImageDataset.to_tensor"><a class="viewcode-back" href="../../source/core.html#core.dataset.ImageDataset.to_tensor">[docs]</a>    <span class="k">def</span> <span class="nf">to_tensor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">dtype</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Convert ``x`` to `torch.Tensor`.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        x : array_like</span>
-<span class="sd">            The input data.</span>
-<span class="sd">        dtype : `torch.dtype`</span>
-<span class="sd">            The data type used to convert ``x``.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        x : `torch.Tensor`</span>
-<span class="sd">            The input data tensor.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">torch</span><span class="o">.</span><span class="n">tensor</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">dtype</span><span class="p">)</span></div>
-
-    <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Dataset representation.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        fs : `str`</span>
-<span class="sd">            Representation string.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># representation string to print</span>
-        <span class="n">fs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">+</span> <span class="s1">&#39;(</span><span class="se">\n</span><span class="s1">&#39;</span>
-
-        <span class="c1"># sensor</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;    (sensor):</span><span class="se">\n</span><span class="s1">        - &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">sensor</span><span class="o">.</span><span class="vm">__name__</span>
-
-        <span class="c1"># bands used for the segmentation</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">    (bands):</span><span class="se">\n</span><span class="s1">        &#39;</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">        &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s1">&#39;- Band </span><span class="si">{}</span><span class="s1">: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">b</span> <span class="ow">in</span>
-                                <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">use_bands</span><span class="p">))</span>
-
-        <span class="c1"># scenes</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">    (scene):</span><span class="se">\n</span><span class="s1">        &#39;</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;- size (h, w): </span><span class="si">{}</span><span class="se">\n</span><span class="s1">        &#39;</span><span class="o">.</span><span class="n">format</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">height</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">width</span><span class="p">))</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;- number of scenes: </span><span class="si">{}</span><span class="se">\n</span><span class="s1">        &#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
-            <span class="nb">len</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">unique</span><span class="p">([</span><span class="n">f</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">]</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">scenes</span><span class="p">])))</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;- padding (bottom, left, top, right): </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">padding</span><span class="p">)</span>
-
-        <span class="c1"># tiles</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">    (tiles):</span><span class="se">\n</span><span class="s1">        &#39;</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;- number of tiles per scene: </span><span class="si">{}</span><span class="se">\n</span><span class="s1">        &#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tiles</span><span class="p">)</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;- tile size: </span><span class="si">{}</span><span class="se">\n</span><span class="s1">        &#39;</span><span class="o">.</span><span class="n">format</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">tile_size</span><span class="p">,</span>
-                                                  <span class="bp">self</span><span class="o">.</span><span class="n">tile_size</span><span class="p">))</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;- number of tiles: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">scenes</span><span class="p">))</span>
-
-        <span class="c1"># classes of interest</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">    (classes):</span><span class="se">\n</span><span class="s1">        &#39;</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">        &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s1">&#39;- Class </span><span class="si">{}</span><span class="s1">: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">])</span> <span class="k">for</span>
-                                <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">labels</span><span class="o">.</span><span class="n">items</span><span class="p">())</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">)&#39;</span>
-        <span class="k">return</span> <span class="n">fs</span></div>
-
-
-<div class="viewcode-block" id="StandardEoDataset"><a class="viewcode-back" href="../../source/core.html#core.dataset.StandardEoDataset">[docs]</a><span class="k">class</span> <span class="nc">StandardEoDataset</span><span class="p">(</span><span class="n">ImageDataset</span><span class="p">):</span>
-    <span class="sa">r</span><span class="sd">&quot;&quot;&quot;Base class for standard Earth Observation style datasets.</span>
-
-<span class="sd">    `pysegcnn.core.dataset.StandardEoDataset` implements the</span>
-<span class="sd">    `~pysegcnn.core.dataset.StandardEoDataset.compose_scenes` method for</span>
-<span class="sd">    datasets with the following directory structure:</span>
-
-<span class="sd">    root_dir/</span>
-<span class="sd">        scene_id_1/</span>
-<span class="sd">            scene_id_1_B1.tif</span>
-<span class="sd">            scene_id_1_B2.tif</span>
-<span class="sd">            .</span>
-<span class="sd">            .</span>
-<span class="sd">            .</span>
-<span class="sd">            scene_id_1_BN.tif</span>
-<span class="sd">        scene_id_2/</span>
-<span class="sd">            scene_id_2_B1.tif</span>
-<span class="sd">            scene_id_2_B2.tif</span>
-<span class="sd">            .</span>
-<span class="sd">            .</span>
-<span class="sd">            .</span>
-<span class="sd">            scene_id_2_BN.tif</span>
-<span class="sd">        .</span>
-<span class="sd">        .</span>
-<span class="sd">        .</span>
-<span class="sd">        scene_id_N/</span>
-<span class="sd">            .</span>
-<span class="sd">            .</span>
-<span class="sd">            .</span>
-
-<span class="sd">    If your dataset shares this directory structure, you can directly inherit</span>
-<span class="sd">    `pysegcnn.core.dataset.StandardEoDataset` and implement the remaining</span>
-<span class="sd">    methods.</span>
-
-<span class="sd">    See `pysegcnn.core.dataset.SparcsDataset` for an example.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    root_dir : `str`</span>
-<span class="sd">        The root directory, path to the dataset.</span>
-<span class="sd">    use_bands : `list` [`str`], optional</span>
-<span class="sd">        A list of the spectral bands to use. The default is [].</span>
-<span class="sd">    tile_size : `int` or `None`, optional</span>
-<span class="sd">        The size of the tiles. If not `None`, each scene is divided into square</span>
-<span class="sd">        tiles of shape (tile_size, tile_size). The default is None.</span>
-<span class="sd">    pad : `bool`, optional</span>
-<span class="sd">        Whether to center pad the input image. Set ``pad`` = True, if the</span>
-<span class="sd">        images are not evenly divisible by the ``tile_size``. The image data is</span>
-<span class="sd">        padded with a constant padding value of zero. For each image, the</span>
-<span class="sd">        corresponding ground truth image is padded with a &quot;no data&quot; label.</span>
-<span class="sd">        The default is False.</span>
-<span class="sd">    gt_pattern : `str`, optional</span>
-<span class="sd">        A regural expression to match the ground truth naming convention. All</span>
-<span class="sd">        directories and subdirectories in ``root_dir`` are searched for files</span>
-<span class="sd">        matching ``gt_pattern``. The default is &#39;(.*)gt\\.tif&#39;.</span>
-<span class="sd">    sort : `bool`, optional</span>
-<span class="sd">        Whether to chronologically sort the samples. Useful for time series</span>
-<span class="sd">        data. The default is False.</span>
-<span class="sd">    seed : `int`, optional</span>
-<span class="sd">        The random seed. Used to split the dataset into training, validation</span>
-<span class="sd">        and test set. Useful for reproducibility. The default is 0.</span>
-<span class="sd">    transforms : `list` [`pysegcnn.core.split.Augment`], optional</span>
-<span class="sd">        List of `pysegcnn.core.split.Augment` instances. Each item in</span>
-<span class="sd">        ``transforms`` generates a distinct transformed version of the dataset.</span>
-<span class="sd">        The total dataset is composed of the original untransformed dataset</span>
-<span class="sd">        together with each transformed version of it.</span>
-<span class="sd">        If ``transforms`` = [], only the original dataset is used.</span>
-<span class="sd">        The default is [].</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="o">=</span><span class="p">[],</span> <span class="n">tile_size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-                 <span class="n">gt_pattern</span><span class="o">=</span><span class="s1">&#39;(.*)gt</span><span class="se">\\</span><span class="s1">.tif&#39;</span><span class="p">,</span> <span class="n">sort</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">transforms</span><span class="o">=</span><span class="p">[]):</span>
-        <span class="c1"># initialize super class ImageDataset</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="p">,</span> <span class="n">tile_size</span><span class="p">,</span> <span class="n">pad</span><span class="p">,</span> <span class="n">gt_pattern</span><span class="p">,</span>
-                         <span class="n">sort</span><span class="p">,</span> <span class="n">seed</span><span class="p">,</span> <span class="n">transforms</span><span class="p">)</span>
-
-    <span class="k">def</span> <span class="nf">_get_band_number</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Return the band number of a scene .tif file.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        path : `str`</span>
-<span class="sd">            The path to the .tif file.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        band : `int` or `str`</span>
-<span class="sd">            The band number.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># filename</span>
-        <span class="n">fname</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
-
-        <span class="c1"># search for numbers following a &quot;B&quot; in the filename</span>
-        <span class="n">band</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s1">&#39;B</span><span class="se">\\</span><span class="s1">dA|B</span><span class="se">\\</span><span class="s1">d{1,2}&#39;</span><span class="p">,</span> <span class="n">fname</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;B&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
-
-        <span class="c1"># try converting to an integer:</span>
-        <span class="c1"># raises a ValueError for Sentinel2 8A band</span>
-        <span class="k">try</span><span class="p">:</span>
-            <span class="n">band</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">band</span><span class="p">)</span>
-        <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
-            <span class="k">pass</span>
-
-        <span class="k">return</span> <span class="n">band</span>
-
-    <span class="k">def</span> <span class="nf">_store_bands</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bands</span><span class="p">,</span> <span class="n">gt</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Write the bands of interest to a dictionary.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        bands : `list` [`str`]</span>
-<span class="sd">            Paths to the .tif files of the bands of the scene.</span>
-<span class="sd">        gt : `str`</span>
-<span class="sd">            Path to the ground truth of the scene.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        scene_data : `dict`</span>
-<span class="sd">            The scene data dictionary with keys:</span>
-<span class="sd">                ``&#39;band_name_1&#39;``</span>
-<span class="sd">                    Path to the .tif file of band_1.</span>
-<span class="sd">                ``&#39;band_name_2&#39;``</span>
-<span class="sd">                    Path to the .tif file of band_2.</span>
-<span class="sd">                ``&#39;band_name_n&#39;``</span>
-<span class="sd">                    Path to the .tif file of band_n.</span>
-<span class="sd">                ``&#39;gt&#39;``</span>
-<span class="sd">                    Path to the ground truth file.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># store the bands of interest in a dictionary</span>
-        <span class="n">scene_data</span> <span class="o">=</span> <span class="p">{}</span>
-        <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">b</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">bands</span><span class="p">):</span>
-            <span class="n">band</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bands</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_band_number</span><span class="p">(</span><span class="n">b</span><span class="p">)]</span>
-            <span class="k">if</span> <span class="n">band</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">use_bands</span><span class="p">:</span>
-                <span class="n">scene_data</span><span class="p">[</span><span class="n">band</span><span class="p">]</span> <span class="o">=</span> <span class="n">b</span>
-
-        <span class="c1"># store ground truth</span>
-        <span class="n">scene_data</span><span class="p">[</span><span class="s1">&#39;gt&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">gt</span>
-
-        <span class="k">return</span> <span class="n">scene_data</span>
-
-<div class="viewcode-block" id="StandardEoDataset.compose_scenes"><a class="viewcode-back" href="../../source/core.html#core.dataset.StandardEoDataset.compose_scenes">[docs]</a>    <span class="k">def</span> <span class="nf">compose_scenes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Build the list of samples of the dataset.</span>
-
-<span class="sd">        Each sample is represented by a dictionary.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        scenes : `list` [`dict`]</span>
-<span class="sd">            Each item in ``scenes`` is a `dict` with keys:</span>
-<span class="sd">                ``&#39;band_name_1&#39;``</span>
-<span class="sd">                    Path to the file of band_1.</span>
-<span class="sd">                ``&#39;band_name_2&#39;``</span>
-<span class="sd">                    Path to the file of band_2.</span>
-<span class="sd">                ``&#39;band_name_n&#39;``</span>
-<span class="sd">                    Path to the file of band_n.</span>
-<span class="sd">                ``&#39;gt&#39;``</span>
-<span class="sd">                    Path to the ground truth file.</span>
-<span class="sd">                ``&#39;date&#39;``</span>
-<span class="sd">                    The date of the sample.</span>
-<span class="sd">                ``&#39;tile&#39;``</span>
-<span class="sd">                    The tile id of the sample.</span>
-<span class="sd">                ``&#39;transform&#39;``</span>
-<span class="sd">                    The transformation to apply.</span>
-<span class="sd">                ``&#39;id&#39;``</span>
-<span class="sd">                    The scene identifier.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># search the root directory</span>
-        <span class="n">scenes</span> <span class="o">=</span> <span class="p">[]</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">gt</span> <span class="o">=</span> <span class="p">[]</span>
-        <span class="k">for</span> <span class="n">dirpath</span><span class="p">,</span> <span class="n">dirname</span><span class="p">,</span> <span class="n">files</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">root</span><span class="p">):</span>
-
-            <span class="c1"># search for a ground truth in the current directory</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">gt</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dirpath</span><span class="p">,</span> <span class="n">f</span><span class="p">)</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">files</span>
-                            <span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">gt_pattern</span><span class="p">,</span> <span class="n">f</span><span class="p">)])</span>
-
-            <span class="c1"># check if the current directory name matches a scene identifier</span>
-            <span class="n">scene</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parse_scene_id</span><span class="p">(</span><span class="n">dirpath</span><span class="p">)</span>
-
-            <span class="k">if</span> <span class="n">scene</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-
-                <span class="c1"># get the date of the current scene</span>
-                <span class="n">date</span> <span class="o">=</span> <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;date&#39;</span><span class="p">]</span>
-
-                <span class="c1"># list the spectral bands of the scene</span>
-                <span class="n">bands</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dirpath</span><span class="p">,</span> <span class="n">f</span><span class="p">)</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">files</span>
-                         <span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s1">&#39;B</span><span class="se">\\</span><span class="s1">dA|B</span><span class="se">\\</span><span class="s1">d{1,2}&#39;</span><span class="p">,</span> <span class="n">f</span><span class="p">)]</span>
-
-                <span class="c1"># get the ground truth mask</span>
-                <span class="k">try</span><span class="p">:</span>
-                    <span class="n">gt</span> <span class="o">=</span> <span class="p">[</span><span class="n">truth</span> <span class="k">for</span> <span class="n">truth</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">gt</span> <span class="k">if</span> <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">]</span> <span class="ow">in</span> <span class="n">truth</span><span class="p">]</span>
-                    <span class="n">gt</span> <span class="o">=</span> <span class="n">gt</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-
-                <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
-                    <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Skipping scene </span><span class="si">{}</span><span class="s1">: ground truth not available&#39;</span>
-                                <span class="s1">&#39; (pattern = </span><span class="si">{}</span><span class="s1">).&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">scene</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">],</span>
-                                                          <span class="bp">self</span><span class="o">.</span><span class="n">gt_pattern</span><span class="p">))</span>
-                    <span class="k">continue</span>
-
-                <span class="c1"># iterate over the tiles</span>
-                <span class="k">for</span> <span class="n">tile</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tiles</span><span class="p">):</span>
-
-                    <span class="c1"># iterate over the transformations to apply</span>
-                    <span class="k">for</span> <span class="n">transf</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">transforms</span><span class="p">:</span>
-
-                        <span class="c1"># store the bands and the ground truth mask of the tile</span>
-                        <span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_store_bands</span><span class="p">(</span><span class="n">bands</span><span class="p">,</span> <span class="n">gt</span><span class="p">)</span>
-
-                        <span class="c1"># the name of the scene</span>
-                        <span class="n">data</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">]</span>
-
-                        <span class="c1"># store tile number</span>
-                        <span class="n">data</span><span class="p">[</span><span class="s1">&#39;tile&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">tile</span>
-
-                        <span class="c1"># store date</span>
-                        <span class="n">data</span><span class="p">[</span><span class="s1">&#39;date&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">date</span>
-
-                        <span class="c1"># store optional transformation</span>
-                        <span class="n">data</span><span class="p">[</span><span class="s1">&#39;transform&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">transf</span>
-
-                        <span class="c1"># append to list</span>
-                        <span class="n">scenes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
-
-        <span class="c1"># sort list of scenes and ground truths in chronological order</span>
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sort</span><span class="p">:</span>
-            <span class="n">scenes</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">k</span><span class="p">:</span> <span class="n">k</span><span class="p">[</span><span class="s1">&#39;date&#39;</span><span class="p">])</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">gt</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">k</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">parse_scene_id</span><span class="p">(</span><span class="n">k</span><span class="p">)[</span><span class="s1">&#39;date&#39;</span><span class="p">])</span>
-
-        <span class="k">return</span> <span class="n">scenes</span></div></div>
-
-
-<div class="viewcode-block" id="SparcsDataset"><a class="viewcode-back" href="../../source/core.html#core.dataset.SparcsDataset">[docs]</a><span class="k">class</span> <span class="nc">SparcsDataset</span><span class="p">(</span><span class="n">StandardEoDataset</span><span class="p">):</span>
-    <span class="sa">r</span><span class="sd">&quot;&quot;&quot;Class for the `Sparcs`_ dataset.</span>
-
-<span class="sd">    .. _Sparcs:</span>
-<span class="sd">        https://www.usgs.gov/land-resources/nli/landsat/spatial-procedures-automated-removal-cloud-and-shadow-sparcs-validation</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    root_dir : `str`</span>
-<span class="sd">        The root directory, path to the dataset.</span>
-<span class="sd">    use_bands : `list` [`str`], optional</span>
-<span class="sd">        A list of the spectral bands to use. The default is [].</span>
-<span class="sd">    tile_size : `int` or `None`, optional</span>
-<span class="sd">        The size of the tiles. If not `None`, each scene is divided into square</span>
-<span class="sd">        tiles of shape (tile_size, tile_size). The default is None.</span>
-<span class="sd">    pad : `bool`, optional</span>
-<span class="sd">        Whether to center pad the input image. Set ``pad`` = True, if the</span>
-<span class="sd">        images are not evenly divisible by the ``tile_size``. The image data is</span>
-<span class="sd">        padded with a constant padding value of zero. For each image, the</span>
-<span class="sd">        corresponding ground truth image is padded with a &quot;no data&quot; label.</span>
-<span class="sd">        The default is False.</span>
-<span class="sd">    gt_pattern : `str`, optional</span>
-<span class="sd">        A regural expression to match the ground truth naming convention. All</span>
-<span class="sd">        directories and subdirectories in ``root_dir`` are searched for files</span>
-<span class="sd">        matching ``gt_pattern``. The default is &#39;(.*)gt\\.tif&#39;.</span>
-<span class="sd">    sort : `bool`, optional</span>
-<span class="sd">        Whether to chronologically sort the samples. Useful for time series</span>
-<span class="sd">        data. The default is False.</span>
-<span class="sd">    seed : `int`, optional</span>
-<span class="sd">        The random seed. Used to split the dataset into training, validation</span>
-<span class="sd">        and test set. Useful for reproducibility. The default is 0.</span>
-<span class="sd">    transforms : `list` [`pysegcnn.core.split.Augment`], optional</span>
-<span class="sd">        List of `pysegcnn.core.split.Augment` instances. Each item in</span>
-<span class="sd">        ``transforms`` generates a distinct transformed version of the dataset.</span>
-<span class="sd">        The total dataset is composed of the original untransformed dataset</span>
-<span class="sd">        together with each transformed version of it.</span>
-<span class="sd">        If ``transforms`` = [], only the original dataset is used.</span>
-<span class="sd">        The default is [].</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="o">=</span><span class="p">[],</span> <span class="n">tile_size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-                 <span class="n">gt_pattern</span><span class="o">=</span><span class="s1">&#39;(.*)gt</span><span class="se">\\</span><span class="s1">.tif&#39;</span><span class="p">,</span> <span class="n">sort</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">transforms</span><span class="o">=</span><span class="p">[]):</span>
-        <span class="c1"># initialize super class StandardEoDataset</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="p">,</span> <span class="n">tile_size</span><span class="p">,</span> <span class="n">pad</span><span class="p">,</span> <span class="n">gt_pattern</span><span class="p">,</span>
-                         <span class="n">sort</span><span class="p">,</span> <span class="n">seed</span><span class="p">,</span> <span class="n">transforms</span><span class="p">)</span>
-
-<div class="viewcode-block" id="SparcsDataset.get_size"><a class="viewcode-back" href="../../source/core.html#core.dataset.SparcsDataset.get_size">[docs]</a>    <span class="k">def</span> <span class="nf">get_size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Image size of the Sparcs dataset.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        size : `tuple`</span>
-<span class="sd">            The image size (height, width).</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="p">(</span><span class="mi">1000</span><span class="p">,</span> <span class="mi">1000</span><span class="p">)</span></div>
-
-<div class="viewcode-block" id="SparcsDataset.get_sensor"><a class="viewcode-back" href="../../source/core.html#core.dataset.SparcsDataset.get_sensor">[docs]</a>    <span class="k">def</span> <span class="nf">get_sensor</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Landsat 8 bands of the Sparcs dataset.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        sensor : `enum.Enum`</span>
-<span class="sd">            An enumeration of the bands of the sensor.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">Landsat8</span></div>
-
-<div class="viewcode-block" id="SparcsDataset.get_labels"><a class="viewcode-back" href="../../source/core.html#core.dataset.SparcsDataset.get_labels">[docs]</a>    <span class="k">def</span> <span class="nf">get_labels</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Class labels of the Sparcs dataset.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        labels : `enum.Enum`</span>
-<span class="sd">            The class labels.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">SparcsLabels</span></div>
-
-<div class="viewcode-block" id="SparcsDataset.preprocess"><a class="viewcode-back" href="../../source/core.html#core.dataset.SparcsDataset.preprocess">[docs]</a>    <span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">gt</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Preprocess Sparcs dataset images.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        data : `numpy.ndarray`</span>
-<span class="sd">            The sample input data.</span>
-<span class="sd">        gt : `numpy.ndarray`</span>
-<span class="sd">            The sample ground truth.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        data : `numpy.ndarray`</span>
-<span class="sd">            The preprocessed input data.</span>
-<span class="sd">        gt : `numpy.ndarray`</span>
-<span class="sd">            The preprocessed ground truth data.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># if the preprocessing is not done externally, implement it here</span>
-        <span class="k">return</span> <span class="n">data</span><span class="p">,</span> <span class="n">gt</span></div>
-
-<div class="viewcode-block" id="SparcsDataset.parse_scene_id"><a class="viewcode-back" href="../../source/core.html#core.dataset.SparcsDataset.parse_scene_id">[docs]</a>    <span class="k">def</span> <span class="nf">parse_scene_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">scene_id</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Parse Sparcs scene identifiers (Landsat 8).</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        scene_id : `str`</span>
-<span class="sd">            A scene identifier.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        scene : `dict` or `None`</span>
-<span class="sd">            A dictionary containing scene metadata. If `None`, ``scene_id`` is</span>
-<span class="sd">            not a valid Landsat scene identifier.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">parse_landsat_scene</span><span class="p">(</span><span class="n">scene_id</span><span class="p">)</span></div></div>
-
-
-<div class="viewcode-block" id="ProSnowDataset"><a class="viewcode-back" href="../../source/core.html#core.dataset.ProSnowDataset">[docs]</a><span class="k">class</span> <span class="nc">ProSnowDataset</span><span class="p">(</span><span class="n">StandardEoDataset</span><span class="p">):</span>
-    <span class="sa">r</span><span class="sd">&quot;&quot;&quot;Class for the ProSnow datasets.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    root_dir : `str`</span>
-<span class="sd">        The root directory, path to the dataset.</span>
-<span class="sd">    use_bands : `list` [`str`], optional</span>
-<span class="sd">        A list of the spectral bands to use. The default is [].</span>
-<span class="sd">    tile_size : `int` or `None`, optional</span>
-<span class="sd">        The size of the tiles. If not `None`, each scene is divided into square</span>
-<span class="sd">        tiles of shape (tile_size, tile_size). The default is None.</span>
-<span class="sd">    pad : `bool`, optional</span>
-<span class="sd">        Whether to center pad the input image. Set ``pad`` = True, if the</span>
-<span class="sd">        images are not evenly divisible by the ``tile_size``. The image data is</span>
-<span class="sd">        padded with a constant padding value of zero. For each image, the</span>
-<span class="sd">        corresponding ground truth image is padded with a &quot;no data&quot; label.</span>
-<span class="sd">        The default is False.</span>
-<span class="sd">    gt_pattern : `str`, optional</span>
-<span class="sd">        A regural expression to match the ground truth naming convention. All</span>
-<span class="sd">        directories and subdirectories in ``root_dir`` are searched for files</span>
-<span class="sd">        matching ``gt_pattern``. The default is &#39;(.*)gt\\.tif&#39;.</span>
-<span class="sd">    sort : `bool`, optional</span>
-<span class="sd">        Whether to chronologically sort the samples. Useful for time series</span>
-<span class="sd">        data. The default is False.</span>
-<span class="sd">    seed : `int`, optional</span>
-<span class="sd">        The random seed. Used to split the dataset into training, validation</span>
-<span class="sd">        and test set. Useful for reproducibility. The default is 0.</span>
-<span class="sd">    transforms : `list` [`pysegcnn.core.split.Augment`], optional</span>
-<span class="sd">        List of `pysegcnn.core.split.Augment` instances. Each item in</span>
-<span class="sd">        ``transforms`` generates a distinct transformed version of the dataset.</span>
-<span class="sd">        The total dataset is composed of the original untransformed dataset</span>
-<span class="sd">        together with each transformed version of it.</span>
-<span class="sd">        If ``transforms`` = [], only the original dataset is used.</span>
-<span class="sd">        The default is [].</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="o">=</span><span class="p">[],</span> <span class="n">tile_size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-                 <span class="n">gt_pattern</span><span class="o">=</span><span class="s1">&#39;(.*)gt</span><span class="se">\\</span><span class="s1">.tif&#39;</span><span class="p">,</span> <span class="n">sort</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">transforms</span><span class="o">=</span><span class="p">[]):</span>
-        <span class="c1"># initialize super class StandardEoDataset</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="p">,</span> <span class="n">tile_size</span><span class="p">,</span> <span class="n">pad</span><span class="p">,</span> <span class="n">gt_pattern</span><span class="p">,</span>
-                         <span class="n">sort</span><span class="p">,</span> <span class="n">seed</span><span class="p">,</span> <span class="n">transforms</span><span class="p">)</span>
-
-<div class="viewcode-block" id="ProSnowDataset.get_sensor"><a class="viewcode-back" href="../../source/core.html#core.dataset.ProSnowDataset.get_sensor">[docs]</a>    <span class="k">def</span> <span class="nf">get_sensor</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Sentinel 2 bands of the ProSnow datasets.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        sensor : `enum.Enum`</span>
-<span class="sd">            An enumeration of the bands of the sensor.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">Sentinel2</span></div>
-
-<div class="viewcode-block" id="ProSnowDataset.get_labels"><a class="viewcode-back" href="../../source/core.html#core.dataset.ProSnowDataset.get_labels">[docs]</a>    <span class="k">def</span> <span class="nf">get_labels</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Class labels of the ProSnow datasets.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        labels : `enum.Enum`</span>
-<span class="sd">            The class labels.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">ProSnowLabels</span></div>
-
-<div class="viewcode-block" id="ProSnowDataset.preprocess"><a class="viewcode-back" href="../../source/core.html#core.dataset.ProSnowDataset.preprocess">[docs]</a>    <span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">gt</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Preprocess ProSnow dataset images.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        data : `numpy.ndarray`</span>
-<span class="sd">            The sample input data.</span>
-<span class="sd">        gt : `numpy.ndarray`</span>
-<span class="sd">            The sample ground truth.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        data : `numpy.ndarray`</span>
-<span class="sd">            The preprocessed input data.</span>
-<span class="sd">        gt : `numpy.ndarray`</span>
-<span class="sd">            The preprocessed ground truth data.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># if the preprocessing is not done externally, implement it here</span>
-        <span class="k">return</span> <span class="n">data</span><span class="p">,</span> <span class="n">gt</span></div>
-
-<div class="viewcode-block" id="ProSnowDataset.parse_scene_id"><a class="viewcode-back" href="../../source/core.html#core.dataset.ProSnowDataset.parse_scene_id">[docs]</a>    <span class="k">def</span> <span class="nf">parse_scene_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">scene_id</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Parse ProSnow scene identifiers (Sentinel 2).</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        scene_id : `str`</span>
-<span class="sd">            A scene identifier.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        scene : `dict` or `None`</span>
-<span class="sd">            A dictionary containing scene metadata. If `None`, ``scene_id`` is</span>
-<span class="sd">            not a valid Sentinel-2 scene identifier.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">parse_sentinel2_scene</span><span class="p">(</span><span class="n">scene_id</span><span class="p">)</span></div></div>
-
-
-<div class="viewcode-block" id="ProSnowGarmisch"><a class="viewcode-back" href="../../source/core.html#core.dataset.ProSnowGarmisch">[docs]</a><span class="k">class</span> <span class="nc">ProSnowGarmisch</span><span class="p">(</span><span class="n">ProSnowDataset</span><span class="p">):</span>
-    <span class="sa">r</span><span class="sd">&quot;&quot;&quot;Class for the ProSnow Garmisch dataset.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    root_dir : `str`</span>
-<span class="sd">        The root directory, path to the dataset.</span>
-<span class="sd">    use_bands : `list` [`str`], optional</span>
-<span class="sd">        A list of the spectral bands to use. The default is [].</span>
-<span class="sd">    tile_size : `int` or `None`, optional</span>
-<span class="sd">        The size of the tiles. If not `None`, each scene is divided into square</span>
-<span class="sd">        tiles of shape (tile_size, tile_size). The default is None.</span>
-<span class="sd">    pad : `bool`, optional</span>
-<span class="sd">        Whether to center pad the input image. Set ``pad`` = True, if the</span>
-<span class="sd">        images are not evenly divisible by the ``tile_size``. The image data is</span>
-<span class="sd">        padded with a constant padding value of zero. For each image, the</span>
-<span class="sd">        corresponding ground truth image is padded with a &quot;no data&quot; label.</span>
-<span class="sd">        The default is False.</span>
-<span class="sd">    gt_pattern : `str`, optional</span>
-<span class="sd">        A regural expression to match the ground truth naming convention. All</span>
-<span class="sd">        directories and subdirectories in ``root_dir`` are searched for files</span>
-<span class="sd">        matching ``gt_pattern``. The default is &#39;(.*)gt\\.tif&#39;.</span>
-<span class="sd">    sort : `bool`, optional</span>
-<span class="sd">        Whether to chronologically sort the samples. Useful for time series</span>
-<span class="sd">        data. The default is False.</span>
-<span class="sd">    seed : `int`, optional</span>
-<span class="sd">        The random seed. Used to split the dataset into training, validation</span>
-<span class="sd">        and test set. Useful for reproducibility. The default is 0.</span>
-<span class="sd">    transforms : `list` [`pysegcnn.core.split.Augment`], optional</span>
-<span class="sd">        List of `pysegcnn.core.split.Augment` instances. Each item in</span>
-<span class="sd">        ``transforms`` generates a distinct transformed version of the dataset.</span>
-<span class="sd">        The total dataset is composed of the original untransformed dataset</span>
-<span class="sd">        together with each transformed version of it.</span>
-<span class="sd">        If ``transforms`` = [], only the original dataset is used.</span>
-<span class="sd">        The default is [].</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="o">=</span><span class="p">[],</span> <span class="n">tile_size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-                 <span class="n">gt_pattern</span><span class="o">=</span><span class="s1">&#39;(.*)gt</span><span class="se">\\</span><span class="s1">.tif&#39;</span><span class="p">,</span> <span class="n">sort</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">transforms</span><span class="o">=</span><span class="p">[]):</span>
-        <span class="c1"># initialize super class StandardEoDataset</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="p">,</span> <span class="n">tile_size</span><span class="p">,</span> <span class="n">pad</span><span class="p">,</span> <span class="n">gt_pattern</span><span class="p">,</span>
-                         <span class="n">sort</span><span class="p">,</span> <span class="n">seed</span><span class="p">,</span> <span class="n">transforms</span><span class="p">)</span>
-
-<div class="viewcode-block" id="ProSnowGarmisch.get_size"><a class="viewcode-back" href="../../source/core.html#core.dataset.ProSnowGarmisch.get_size">[docs]</a>    <span class="k">def</span> <span class="nf">get_size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Image size of the ProSnow Garmisch dataset.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        size : `tuple`</span>
-<span class="sd">            The image size (height, width).</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="p">(</span><span class="mi">615</span><span class="p">,</span> <span class="mi">543</span><span class="p">)</span></div></div>
-
-
-<div class="viewcode-block" id="ProSnowObergurgl"><a class="viewcode-back" href="../../source/core.html#core.dataset.ProSnowObergurgl">[docs]</a><span class="k">class</span> <span class="nc">ProSnowObergurgl</span><span class="p">(</span><span class="n">ProSnowDataset</span><span class="p">):</span>
-    <span class="sa">r</span><span class="sd">&quot;&quot;&quot;Class for the ProSnow Obergurgl dataset.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    root_dir : `str`</span>
-<span class="sd">        The root directory, path to the dataset.</span>
-<span class="sd">    use_bands : `list` [`str`], optional</span>
-<span class="sd">        A list of the spectral bands to use. The default is [].</span>
-<span class="sd">    tile_size : `int` or `None`, optional</span>
-<span class="sd">        The size of the tiles. If not `None`, each scene is divided into square</span>
-<span class="sd">        tiles of shape (tile_size, tile_size). The default is None.</span>
-<span class="sd">    pad : `bool`, optional</span>
-<span class="sd">        Whether to center pad the input image. Set ``pad`` = True, if the</span>
-<span class="sd">        images are not evenly divisible by the ``tile_size``. The image data is</span>
-<span class="sd">        padded with a constant padding value of zero. For each image, the</span>
-<span class="sd">        corresponding ground truth image is padded with a &quot;no data&quot; label.</span>
-<span class="sd">        The default is False.</span>
-<span class="sd">    gt_pattern : `str`, optional</span>
-<span class="sd">        A regural expression to match the ground truth naming convention. All</span>
-<span class="sd">        directories and subdirectories in ``root_dir`` are searched for files</span>
-<span class="sd">        matching ``gt_pattern``. The default is &#39;(.*)gt\\.tif&#39;.</span>
-<span class="sd">    sort : `bool`, optional</span>
-<span class="sd">        Whether to chronologically sort the samples. Useful for time series</span>
-<span class="sd">        data. The default is False.</span>
-<span class="sd">    seed : `int`, optional</span>
-<span class="sd">        The random seed. Used to split the dataset into training, validation</span>
-<span class="sd">        and test set. Useful for reproducibility. The default is 0.</span>
-<span class="sd">    transforms : `list` [`pysegcnn.core.split.Augment`], optional</span>
-<span class="sd">        List of `pysegcnn.core.split.Augment` instances. Each item in</span>
-<span class="sd">        ``transforms`` generates a distinct transformed version of the dataset.</span>
-<span class="sd">        The total dataset is composed of the original untransformed dataset</span>
-<span class="sd">        together with each transformed version of it.</span>
-<span class="sd">        If ``transforms`` = [], only the original dataset is used.</span>
-<span class="sd">        The default is [].</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="o">=</span><span class="p">[],</span> <span class="n">tile_size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-                 <span class="n">gt_pattern</span><span class="o">=</span><span class="s1">&#39;(.*)gt</span><span class="se">\\</span><span class="s1">.tif&#39;</span><span class="p">,</span> <span class="n">sort</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">transforms</span><span class="o">=</span><span class="p">[]):</span>
-        <span class="c1"># initialize super class StandardEoDataset</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="p">,</span> <span class="n">tile_size</span><span class="p">,</span> <span class="n">pad</span><span class="p">,</span> <span class="n">gt_pattern</span><span class="p">,</span>
-                         <span class="n">sort</span><span class="p">,</span> <span class="n">seed</span><span class="p">,</span> <span class="n">transforms</span><span class="p">)</span>
-
-<div class="viewcode-block" id="ProSnowObergurgl.get_size"><a class="viewcode-back" href="../../source/core.html#core.dataset.ProSnowObergurgl.get_size">[docs]</a>    <span class="k">def</span> <span class="nf">get_size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Image size of the ProSnow Obergurgl dataset.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        size : `tuple`</span>
-<span class="sd">            The image size (height, width).</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="p">(</span><span class="mi">310</span><span class="p">,</span> <span class="mi">270</span><span class="p">)</span></div></div>
-
-
-<div class="viewcode-block" id="Cloud95Dataset"><a class="viewcode-back" href="../../source/core.html#core.dataset.Cloud95Dataset">[docs]</a><span class="k">class</span> <span class="nc">Cloud95Dataset</span><span class="p">(</span><span class="n">ImageDataset</span><span class="p">):</span>
-    <span class="sa">r</span><span class="sd">&quot;&quot;&quot;Class for the `Cloud-95`_ dataset by `Mohajerani et al. (2020)`_.</span>
-
-<span class="sd">    .. _Cloud95:</span>
-<span class="sd">        https://github.com/SorourMo/95-Cloud-An-Extension-to-38-Cloud-Dataset</span>
-<span class="sd">    .. _`Mohajerani et al. (2020)`:</span>
-<span class="sd">        https://arxiv.org/abs/2001.08768</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    root_dir : `str`</span>
-<span class="sd">        The root directory, path to the dataset.</span>
-<span class="sd">    use_bands : `list` [`str`], optional</span>
-<span class="sd">        A list of the spectral bands to use. The default is [].</span>
-<span class="sd">    tile_size : `int` or `None`, optional</span>
-<span class="sd">        The size of the tiles. If not `None`, each scene is divided into square</span>
-<span class="sd">        tiles of shape (tile_size, tile_size). The default is None.</span>
-<span class="sd">    pad : `bool`, optional</span>
-<span class="sd">        Whether to center pad the input image. Set ``pad`` = True, if the</span>
-<span class="sd">        images are not evenly divisible by the ``tile_size``. The image data is</span>
-<span class="sd">        padded with a constant padding value of zero. For each image, the</span>
-<span class="sd">        corresponding ground truth image is padded with a &quot;no data&quot; label.</span>
-<span class="sd">        The default is False.</span>
-<span class="sd">    gt_pattern : `str`, optional</span>
-<span class="sd">        A regural expression to match the ground truth naming convention. All</span>
-<span class="sd">        directories and subdirectories in ``root_dir`` are searched for files</span>
-<span class="sd">        matching ``gt_pattern``. The default is &#39;(.*)gt\\.tif&#39;.</span>
-<span class="sd">    sort : `bool`, optional</span>
-<span class="sd">        Whether to chronologically sort the samples. Useful for time series</span>
-<span class="sd">        data. The default is False.</span>
-<span class="sd">    seed : `int`, optional</span>
-<span class="sd">        The random seed. Used to split the dataset into training, validation</span>
-<span class="sd">        and test set. Useful for reproducibility. The default is 0.</span>
-<span class="sd">    transforms : `list` [`pysegcnn.core.split.Augment`], optional</span>
-<span class="sd">        List of `pysegcnn.core.split.Augment` instances. Each item in</span>
-<span class="sd">        ``transforms`` generates a distinct transformed version of the dataset.</span>
-<span class="sd">        The total dataset is composed of the original untransformed dataset</span>
-<span class="sd">        together with each transformed version of it.</span>
-<span class="sd">        If ``transforms`` = [], only the original dataset is used.</span>
-<span class="sd">        The default is [].</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="o">=</span><span class="p">[],</span> <span class="n">tile_size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-                 <span class="n">gt_pattern</span><span class="o">=</span><span class="s1">&#39;(.*)gt</span><span class="se">\\</span><span class="s1">.tif&#39;</span><span class="p">,</span> <span class="n">sort</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">transforms</span><span class="o">=</span><span class="p">[]):</span>
-        <span class="c1"># initialize super class StandardEoDataset</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="p">,</span> <span class="n">tile_size</span><span class="p">,</span> <span class="n">pad</span><span class="p">,</span> <span class="n">gt_pattern</span><span class="p">,</span>
-                         <span class="n">sort</span><span class="p">,</span> <span class="n">seed</span><span class="p">,</span> <span class="n">transforms</span><span class="p">)</span>
-
-        <span class="c1"># the csv file containing the names of the informative patches</span>
-        <span class="c1"># patches with more than 80% black pixels, i.e. patches resulting from</span>
-        <span class="c1"># the black margins around a Landsat 8 scene are excluded</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">exclude</span> <span class="o">=</span> <span class="s1">&#39;training_patches_95-cloud_nonempty.csv&#39;</span>
-
-<div class="viewcode-block" id="Cloud95Dataset.get_size"><a class="viewcode-back" href="../../source/core.html#core.dataset.Cloud95Dataset.get_size">[docs]</a>    <span class="k">def</span> <span class="nf">get_size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Image size of the Cloud-95 dataset.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        size : `tuple`</span>
-<span class="sd">            The image size (height, width).</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="p">(</span><span class="mi">384</span><span class="p">,</span> <span class="mi">384</span><span class="p">)</span></div>
-
-<div class="viewcode-block" id="Cloud95Dataset.get_sensor"><a class="viewcode-back" href="../../source/core.html#core.dataset.Cloud95Dataset.get_sensor">[docs]</a>    <span class="k">def</span> <span class="nf">get_sensor</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Landsat 8 bands of the Cloud-95 dataset.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        sensor : `enum.Enum`</span>
-<span class="sd">            An enumeration of the bands of the sensor.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">Landsat8</span></div>
-
-<div class="viewcode-block" id="Cloud95Dataset.get_labels"><a class="viewcode-back" href="../../source/core.html#core.dataset.Cloud95Dataset.get_labels">[docs]</a>    <span class="k">def</span> <span class="nf">get_labels</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Class labels of the Cloud-95 dataset.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        labels : `enum.Enum`</span>
-<span class="sd">            The class labels.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">Cloud95Labels</span></div>
-
-<div class="viewcode-block" id="Cloud95Dataset.preprocess"><a class="viewcode-back" href="../../source/core.html#core.dataset.Cloud95Dataset.preprocess">[docs]</a>    <span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">gt</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Preprocess Cloud-95 dataset images.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        data : `numpy.ndarray`</span>
-<span class="sd">            The sample input data.</span>
-<span class="sd">        gt : `numpy.ndarray`</span>
-<span class="sd">            The sample ground truth.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        data : `numpy.ndarray`</span>
-<span class="sd">            The preprocessed input data.</span>
-<span class="sd">        gt : `numpy.ndarray`</span>
-<span class="sd">            The preprocessed ground truth data.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># normalize the data</span>
-        <span class="c1"># here, we use the normalization of the authors of Cloud-95, i.e.</span>
-        <span class="c1"># Mohajerani and Saeedi (2019, 2020)</span>
-        <span class="n">data</span> <span class="o">/=</span> <span class="mi">65535</span>
-        <span class="n">gt</span><span class="p">[</span><span class="n">gt</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cval</span><span class="p">]</span> <span class="o">/=</span> <span class="mi">255</span>
-        <span class="k">return</span> <span class="n">data</span><span class="p">,</span> <span class="n">gt</span></div>
-
-<div class="viewcode-block" id="Cloud95Dataset.parse_scene_id"><a class="viewcode-back" href="../../source/core.html#core.dataset.Cloud95Dataset.parse_scene_id">[docs]</a>    <span class="k">def</span> <span class="nf">parse_scene_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">scene_id</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Parse Sparcs scene identifiers (Landsat 8).</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        scene_id : `str`</span>
-<span class="sd">            A scene identifier.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        scene : `dict` or `None`</span>
-<span class="sd">            A dictionary containing scene metadata. If `None`, ``scene_id`` is</span>
-<span class="sd">            not a valid Landsat scene identifier.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">parse_landsat_scene</span><span class="p">(</span><span class="n">scene_id</span><span class="p">)</span></div>
-
-<div class="viewcode-block" id="Cloud95Dataset.compose_scenes"><a class="viewcode-back" href="../../source/core.html#core.dataset.Cloud95Dataset.compose_scenes">[docs]</a>    <span class="k">def</span> <span class="nf">compose_scenes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Build the list of samples of the dataset.</span>
-
-<span class="sd">        Each sample is represented by a dictionary.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        scenes : `list` [`dict`]</span>
-<span class="sd">            Each item in ``scenes`` is a `dict` with keys:</span>
-<span class="sd">                ``&#39;band_name_1&#39;``</span>
-<span class="sd">                    Path to the file of band_1.</span>
-<span class="sd">                ``&#39;band_name_2&#39;``</span>
-<span class="sd">                    Path to the file of band_2.</span>
-<span class="sd">                ``&#39;band_name_n&#39;``</span>
-<span class="sd">                    Path to the file of band_n.</span>
-<span class="sd">                ``&#39;gt&#39;``</span>
-<span class="sd">                    Path to the ground truth file.</span>
-<span class="sd">                ``&#39;date&#39;``</span>
-<span class="sd">                    The date of the sample.</span>
-<span class="sd">                ``&#39;tile&#39;``</span>
-<span class="sd">                    The tile id of the sample.</span>
-<span class="sd">                ``&#39;transform&#39;``</span>
-<span class="sd">                    The transformation to apply.</span>
-<span class="sd">                ``&#39;id&#39;``</span>
-<span class="sd">                    The scene identifier.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># whether to exclude patches with more than 80% black pixels</span>
-        <span class="n">ipatches</span> <span class="o">=</span> <span class="p">[]</span>
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">exclude</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-            <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">root</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">exclude</span><span class="p">),</span> <span class="n">newline</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
-                <span class="n">reader</span> <span class="o">=</span> <span class="n">csv</span><span class="o">.</span><span class="n">reader</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
-                <span class="c1"># list of informative patches</span>
-                <span class="n">ipatches</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">itertools</span><span class="o">.</span><span class="n">chain</span><span class="o">.</span><span class="n">from_iterable</span><span class="p">(</span><span class="n">reader</span><span class="p">))</span>
-
-        <span class="c1"># get the names of the directories containing the tif files of</span>
-        <span class="c1"># the bands of interest</span>
-        <span class="n">band_dirs</span> <span class="o">=</span> <span class="p">{}</span>
-        <span class="k">for</span> <span class="n">dirpath</span><span class="p">,</span> <span class="n">dirname</span><span class="p">,</span> <span class="n">files</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">root</span><span class="p">):</span>
-            <span class="c1"># check if the current directory path includes the name of a band</span>
-            <span class="c1"># or the name of the ground truth mask</span>
-            <span class="n">cband</span> <span class="o">=</span> <span class="p">[</span><span class="n">band</span> <span class="k">for</span> <span class="n">band</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">use_bands</span> <span class="o">+</span> <span class="p">[</span><span class="s1">&#39;gt&#39;</span><span class="p">]</span> <span class="k">if</span>
-                     <span class="n">dirpath</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="n">band</span><span class="p">)</span> <span class="ow">and</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">dirpath</span><span class="p">)]</span>
-
-            <span class="c1"># add path to current band files to dictionary</span>
-            <span class="k">if</span> <span class="n">cband</span><span class="p">:</span>
-                <span class="n">band_dirs</span><span class="p">[</span><span class="n">cband</span><span class="o">.</span><span class="n">pop</span><span class="p">()]</span> <span class="o">=</span> <span class="n">dirpath</span>
-
-        <span class="c1"># create empty list to store all patches to</span>
-        <span class="n">scenes</span> <span class="o">=</span> <span class="p">[]</span>
-
-        <span class="c1"># iterate over all the patches of the following band</span>
-        <span class="n">biter</span> <span class="o">=</span> <span class="p">[</span><span class="o">*</span><span class="n">band_dirs</span><span class="o">.</span><span class="n">keys</span><span class="p">()][</span><span class="mi">0</span><span class="p">]</span>
-        <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">band_dirs</span><span class="p">[</span><span class="n">biter</span><span class="p">]):</span>
-
-            <span class="c1"># get name of the current patch</span>
-            <span class="n">patchname</span> <span class="o">=</span> <span class="n">file</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">biter</span> <span class="o">+</span> <span class="s1">&#39;_&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
-
-            <span class="c1"># get the date of the current scene</span>
-            <span class="n">scene_meta</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parse_scene_id</span><span class="p">(</span><span class="n">patchname</span><span class="p">)</span>
-
-            <span class="c1"># check whether the current file is an informative patch</span>
-            <span class="k">if</span> <span class="n">ipatches</span> <span class="ow">and</span> <span class="n">patchname</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">ipatches</span><span class="p">:</span>
-                <span class="k">continue</span>
-
-            <span class="c1"># iterate over the tiles</span>
-            <span class="k">for</span> <span class="n">tile</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tiles</span><span class="p">):</span>
-
-                <span class="c1"># iterate over the transformations to apply</span>
-                <span class="k">for</span> <span class="n">transf</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">transforms</span><span class="p">:</span>
-
-                    <span class="c1"># initialize dictionary to store bands of current patch</span>
-                    <span class="n">scene</span> <span class="o">=</span> <span class="p">{}</span>
-
-                    <span class="c1"># iterate over the bands of interest</span>
-                    <span class="k">for</span> <span class="n">band</span> <span class="ow">in</span> <span class="n">band_dirs</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
-                        <span class="c1"># save path to current band tif file to dictionary</span>
-                        <span class="n">scene</span><span class="p">[</span><span class="n">band</span><span class="p">]</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">band_dirs</span><span class="p">[</span><span class="n">band</span><span class="p">],</span>
-                                                   <span class="n">file</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">biter</span><span class="p">,</span> <span class="n">band</span><span class="p">))</span>
-
-                    <span class="c1"># the name of the scene the patch was extracted from</span>
-                    <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">scene_meta</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">]</span>
-
-                    <span class="c1"># store tile number</span>
-                    <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;tile&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">tile</span>
-
-                    <span class="c1"># store date</span>
-                    <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;date&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">scene_meta</span><span class="p">[</span><span class="s1">&#39;date&#39;</span><span class="p">]</span>
-
-                    <span class="c1"># store optional transformation</span>
-                    <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;transform&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">transf</span>
-
-                    <span class="c1"># append patch to list of all patches</span>
-                    <span class="n">scenes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">scene</span><span class="p">)</span>
-
-        <span class="c1"># sort list of scenes in chronological order</span>
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sort</span><span class="p">:</span>
-            <span class="n">scenes</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">k</span><span class="p">:</span> <span class="n">k</span><span class="p">[</span><span class="s1">&#39;date&#39;</span><span class="p">])</span>
-
-        <span class="k">return</span> <span class="n">scenes</span></div></div>
-
-
-<div class="viewcode-block" id="SupportedDatasets"><a class="viewcode-back" href="../../source/core.html#core.dataset.SupportedDatasets">[docs]</a><span class="k">class</span> <span class="nc">SupportedDatasets</span><span class="p">(</span><span class="n">enum</span><span class="o">.</span><span class="n">Enum</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Names and corresponding classes of the implemented datasets.&quot;&quot;&quot;</span>
-
-    <span class="n">Sparcs</span> <span class="o">=</span> <span class="n">SparcsDataset</span>
-    <span class="n">Cloud95</span> <span class="o">=</span> <span class="n">Cloud95Dataset</span>
-    <span class="n">Garmisch</span> <span class="o">=</span> <span class="n">ProSnowGarmisch</span>
-    <span class="n">Obergurgl</span> <span class="o">=</span> <span class="n">ProSnowObergurgl</span></div>
-</pre></div>
-
-           </div>
-           
-          </div>
-          <footer>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/_modules/core/graphics.html b/docs/_build/html/_modules/core/graphics.html
deleted file mode 100644
index 4ed801e..0000000
--- a/docs/_build/html/_modules/core/graphics.html
+++ /dev/null
@@ -1,592 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>core.graphics &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
-        <script src="../../_static/jquery.js"></script>
-        <script src="../../_static/underscore.js"></script>
-        <script src="../../_static/doctools.js"></script>
-        <script src="../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul>
-<li class="toctree-l1"><a class="reference internal" href="../../source/requirements.html">Requirements</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/api.html">API Reference</a></li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../../index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-          <li><a href="../index.html">Module code</a> &raquo;</li>
-        
-      <li>core.graphics</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <h1>Source code for core.graphics</h1><div class="highlight"><pre>
-<span></span><span class="sd">&quot;&quot;&quot;Functions to plot multispectral image data and model output.</span>
-
-<span class="sd">License</span>
-<span class="sd">-------</span>
-
-<span class="sd">    Copyright (c) 2020 Daniel Frisinghelli</span>
-
-<span class="sd">    This source code is licensed under the GNU General Public License v3.</span>
-
-<span class="sd">    See the LICENSE file in the repository&#39;s root directory.</span>
-
-<span class="sd">&quot;&quot;&quot;</span>
-
-<span class="c1"># !/usr/bin/env python</span>
-<span class="c1"># -*- coding: utf-8 -*-</span>
-
-<span class="c1"># builtins</span>
-<span class="kn">import</span> <span class="nn">os</span>
-<span class="kn">import</span> <span class="nn">itertools</span>
-
-<span class="c1"># externals</span>
-<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
-<span class="kn">import</span> <span class="nn">torch</span>
-<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
-<span class="kn">import</span> <span class="nn">matplotlib.patches</span> <span class="k">as</span> <span class="nn">mpatches</span>
-<span class="kn">import</span> <span class="nn">matplotlib.lines</span> <span class="k">as</span> <span class="nn">mlines</span>
-<span class="kn">from</span> <span class="nn">matplotlib.colors</span> <span class="kn">import</span> <span class="n">ListedColormap</span><span class="p">,</span> <span class="n">BoundaryNorm</span>
-<span class="kn">from</span> <span class="nn">matplotlib</span> <span class="kn">import</span> <span class="n">cm</span> <span class="k">as</span> <span class="n">colormap</span>
-
-<span class="c1"># locals</span>
-<span class="kn">from</span> <span class="nn">pysegcnn.core.trainer</span> <span class="kn">import</span> <span class="n">accuracy_function</span>
-<span class="kn">from</span> <span class="nn">pysegcnn.main.config</span> <span class="kn">import</span> <span class="n">HERE</span>
-
-
-<div class="viewcode-block" id="contrast_stretching"><a class="viewcode-back" href="../../source/core.html#core.graphics.contrast_stretching">[docs]</a><span class="k">def</span> <span class="nf">contrast_stretching</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Apply percentile stretching to an image to increase constrast.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    image : `numpy.ndarray`</span>
-<span class="sd">        the input image.</span>
-<span class="sd">    alpha : `int`, optional</span>
-<span class="sd">        The level of the percentiles. The default is 5.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    norm : `numpy.ndarray`</span>
-<span class="sd">        the stretched image.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># compute upper and lower percentiles defining the range of the stretch</span>
-    <span class="n">inf</span><span class="p">,</span> <span class="n">sup</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">percentile</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="p">(</span><span class="n">alpha</span><span class="p">,</span> <span class="mi">100</span> <span class="o">-</span> <span class="n">alpha</span><span class="p">))</span>
-
-    <span class="c1"># normalize image intensity distribution to</span>
-    <span class="c1"># (alpha, 100 - alpha) percentiles</span>
-    <span class="n">norm</span> <span class="o">=</span> <span class="p">((</span><span class="n">image</span> <span class="o">-</span> <span class="n">inf</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">image</span><span class="o">.</span><span class="n">max</span><span class="p">()</span> <span class="o">-</span> <span class="n">image</span><span class="o">.</span><span class="n">min</span><span class="p">())</span> <span class="o">/</span>
-            <span class="p">(</span><span class="n">sup</span> <span class="o">-</span> <span class="n">inf</span><span class="p">))</span> <span class="o">+</span> <span class="n">image</span><span class="o">.</span><span class="n">min</span><span class="p">()</span>
-
-    <span class="c1"># clip: values &lt; min = min, values &gt; max = max</span>
-    <span class="n">norm</span><span class="p">[</span><span class="n">norm</span> <span class="o">&lt;=</span> <span class="n">image</span><span class="o">.</span><span class="n">min</span><span class="p">()]</span> <span class="o">=</span> <span class="n">image</span><span class="o">.</span><span class="n">min</span><span class="p">()</span>
-    <span class="n">norm</span><span class="p">[</span><span class="n">norm</span> <span class="o">&gt;=</span> <span class="n">image</span><span class="o">.</span><span class="n">max</span><span class="p">()]</span> <span class="o">=</span> <span class="n">image</span><span class="o">.</span><span class="n">max</span><span class="p">()</span>
-
-    <span class="k">return</span> <span class="n">norm</span></div>
-
-
-<div class="viewcode-block" id="running_mean"><a class="viewcode-back" href="../../source/core.html#core.graphics.running_mean">[docs]</a><span class="k">def</span> <span class="nf">running_mean</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">w</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Compute a running mean of the input sequence.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    x : array_like</span>
-<span class="sd">        The sequence to compute a running mean on.</span>
-<span class="sd">    w : `int`</span>
-<span class="sd">        The window length of the running mean.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    rm : `numpy.ndarray`</span>
-<span class="sd">        The running mean of the sequence ``x``.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="n">cumsum</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">cumsum</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
-    <span class="k">return</span> <span class="p">(</span><span class="n">cumsum</span><span class="p">[</span><span class="n">w</span><span class="p">:]</span> <span class="o">-</span> <span class="n">cumsum</span><span class="p">[:</span><span class="o">-</span><span class="n">w</span><span class="p">])</span> <span class="o">/</span> <span class="n">w</span></div>
-
-
-<div class="viewcode-block" id="plot_sample"><a class="viewcode-back" href="../../source/core.html#core.graphics.plot_sample">[docs]</a><span class="k">def</span> <span class="nf">plot_sample</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">use_bands</span><span class="p">,</span> <span class="n">labels</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">y_pred</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">),</span>
-                <span class="n">bands</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;nir&#39;</span><span class="p">,</span> <span class="s1">&#39;red&#39;</span><span class="p">,</span> <span class="s1">&#39;green&#39;</span><span class="p">],</span> <span class="n">state</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-                <span class="n">outpath</span><span class="o">=</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">HERE</span><span class="p">,</span> <span class="s1">&#39;_samples/&#39;</span><span class="p">),</span> <span class="n">alpha</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Plot false color composite (FCC), ground truth and model prediction.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    x : `numpy.ndarray` or `torch.Tensor`, (b, h, w)</span>
-<span class="sd">        Array containing the raw data of the tile, shape=(bands, height, width)</span>
-<span class="sd">    use_bands : `list` of `str`</span>
-<span class="sd">        List describing the order of the bands in ``x``.</span>
-<span class="sd">    labels : `dict` [`int`, `dict`]</span>
-<span class="sd">        The label dictionary. The keys are the values of the class labels</span>
-<span class="sd">        in the ground truth ``y``. Each nested `dict` should have keys:</span>
-<span class="sd">            ``&#39;color&#39;``</span>
-<span class="sd">                A named color (`str`).</span>
-<span class="sd">            ``&#39;label&#39;``</span>
-<span class="sd">                The name of the class label (`str`).</span>
-<span class="sd">    y : `numpy.ndarray` or `torch.Tensor` or `None`, optional</span>
-<span class="sd">        Array containing the ground truth of tile ``x``, shape=(height, width).</span>
-<span class="sd">        The default is None.</span>
-<span class="sd">    y_pred : `numpy.ndarray` or `torch.Tensor` or `None`, optional</span>
-<span class="sd">        Array containing the prediction for tile ``x``, shape=(height, width).</span>
-<span class="sd">        The default is None.</span>
-<span class="sd">    figsize : `tuple`, optional</span>
-<span class="sd">        The figure size in centimeters. The default is (10, 10).</span>
-<span class="sd">    bands : `list` [`str`], optional</span>
-<span class="sd">        The bands to build the FCC. The default is [&#39;nir&#39;, &#39;red&#39;, &#39;green&#39;].</span>
-<span class="sd">    state : `str` or `None`, optional</span>
-<span class="sd">        Filename to save the plot to. ``state`` should be an existing model</span>
-<span class="sd">        state file ending with &#39;.pt&#39;. The default is None, i.e. plot is not</span>
-<span class="sd">        saved to disk.</span>
-<span class="sd">    outpath : `str` or `pathlib.Path`, optional</span>
-<span class="sd">        Output path. The default is &#39;pysegcnn/main/_samples&#39;.</span>
-<span class="sd">    alpha : `int`, optional</span>
-<span class="sd">        The level of the percentiles to increase constrast in the FCC.</span>
-<span class="sd">        The default is 0, i.e. no stretching.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    fig : `matplotlib.figure.Figure`</span>
-<span class="sd">        The figure handle.</span>
-<span class="sd">    ax : `numpy.ndarray` [`matplotlib.axes._subplots.AxesSubplot`]</span>
-<span class="sd">        An array of the axes handles.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># check whether to apply constrast stretching</span>
-    <span class="n">rgb</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">dstack</span><span class="p">([</span><span class="n">contrast_stretching</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">use_bands</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">band</span><span class="p">)],</span> <span class="n">alpha</span><span class="p">)</span>
-                     <span class="k">for</span> <span class="n">band</span> <span class="ow">in</span> <span class="n">bands</span><span class="p">])</span>
-
-    <span class="c1"># get labels and corresponding colors</span>
-    <span class="n">ulabels</span> <span class="o">=</span> <span class="p">[</span><span class="n">label</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">]</span> <span class="k">for</span> <span class="n">label</span> <span class="ow">in</span> <span class="n">labels</span><span class="o">.</span><span class="n">values</span><span class="p">()]</span>
-    <span class="n">colors</span> <span class="o">=</span> <span class="p">[</span><span class="n">label</span><span class="p">[</span><span class="s1">&#39;color&#39;</span><span class="p">]</span> <span class="k">for</span> <span class="n">label</span> <span class="ow">in</span> <span class="n">labels</span><span class="o">.</span><span class="n">values</span><span class="p">()]</span>
-
-    <span class="c1"># create a ListedColormap</span>
-    <span class="n">cmap</span> <span class="o">=</span> <span class="n">ListedColormap</span><span class="p">(</span><span class="n">colors</span><span class="p">)</span>
-    <span class="n">boundaries</span> <span class="o">=</span> <span class="p">[</span><span class="o">*</span><span class="n">labels</span><span class="o">.</span><span class="n">keys</span><span class="p">(),</span> <span class="n">cmap</span><span class="o">.</span><span class="n">N</span><span class="p">]</span>
-    <span class="n">norm</span> <span class="o">=</span> <span class="n">BoundaryNorm</span><span class="p">(</span><span class="n">boundaries</span><span class="p">,</span> <span class="n">cmap</span><span class="o">.</span><span class="n">N</span><span class="p">)</span>
-
-    <span class="c1"># create a patch (proxy artist) for every color</span>
-    <span class="n">patches</span> <span class="o">=</span> <span class="p">[</span><span class="n">mpatches</span><span class="o">.</span><span class="n">Patch</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="n">c</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="n">l</span><span class="p">)</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">l</span> <span class="ow">in</span>
-               <span class="nb">zip</span><span class="p">(</span><span class="n">colors</span><span class="p">,</span> <span class="n">ulabels</span><span class="p">)]</span>
-
-    <span class="c1"># initialize figure</span>
-    <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="n">figsize</span><span class="o">=</span><span class="n">figsize</span><span class="p">)</span>
-
-    <span class="c1"># plot false color composite</span>
-    <span class="n">ax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="n">rgb</span><span class="p">)</span>
-    <span class="n">ax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s1">&#39;R = </span><span class="si">{}</span><span class="s1">, G = </span><span class="si">{}</span><span class="s1">, B = </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">*</span><span class="n">bands</span><span class="p">),</span> <span class="n">pad</span><span class="o">=</span><span class="mi">15</span><span class="p">)</span>
-
-    <span class="c1"># check whether to plot ground truth</span>
-    <span class="n">acc</span> <span class="o">=</span> <span class="kc">None</span>
-    <span class="k">if</span> <span class="n">y</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-        <span class="c1"># remove axis to plot ground truth from figure</span>
-        <span class="n">fig</span><span class="o">.</span><span class="n">delaxes</span><span class="p">(</span><span class="n">ax</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
-    <span class="k">else</span><span class="p">:</span>
-        <span class="c1"># plot ground thruth mask</span>
-        <span class="n">ax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">cmap</span><span class="o">=</span><span class="n">cmap</span><span class="p">,</span> <span class="n">interpolation</span><span class="o">=</span><span class="s1">&#39;nearest&#39;</span><span class="p">,</span> <span class="n">norm</span><span class="o">=</span><span class="n">norm</span><span class="p">)</span>
-        <span class="n">ax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s1">&#39;Ground truth&#39;</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="mi">15</span><span class="p">)</span>
-
-    <span class="c1"># check whether to plot model prediction</span>
-    <span class="k">if</span> <span class="n">y_pred</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-        <span class="c1"># remove axis to plot model prediction from figure</span>
-        <span class="n">fig</span><span class="o">.</span><span class="n">delaxes</span><span class="p">(</span><span class="n">ax</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
-    <span class="k">else</span><span class="p">:</span>
-        <span class="c1"># plot model prediction</span>
-        <span class="n">ax</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="n">y_pred</span><span class="p">,</span> <span class="n">cmap</span><span class="o">=</span><span class="n">cmap</span><span class="p">,</span> <span class="n">interpolation</span><span class="o">=</span><span class="s1">&#39;nearest&#39;</span><span class="p">,</span> <span class="n">norm</span><span class="o">=</span><span class="n">norm</span><span class="p">)</span>
-
-        <span class="c1"># set title</span>
-        <span class="n">title</span> <span class="o">=</span> <span class="s1">&#39;Prediction&#39;</span>
-        <span class="k">if</span> <span class="n">y</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-            <span class="n">acc</span> <span class="o">=</span> <span class="n">accuracy_function</span><span class="p">(</span><span class="n">y_pred</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
-            <span class="n">title</span> <span class="o">+=</span> <span class="s1">&#39; (</span><span class="si">{:.2f}</span><span class="s1">%)&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">acc</span> <span class="o">*</span> <span class="mi">100</span><span class="p">)</span>
-        <span class="n">ax</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="mi">15</span><span class="p">)</span>
-
-    <span class="c1"># if a ground truth or a model prediction is plotted, add legend</span>
-    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">fig</span><span class="o">.</span><span class="n">axes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-        <span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">handles</span><span class="o">=</span><span class="n">patches</span><span class="p">,</span> <span class="n">bbox_to_anchor</span><span class="o">=</span><span class="p">(</span><span class="mf">1.05</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">loc</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
-                   <span class="n">frameon</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-
-    <span class="c1"># save figure</span>
-    <span class="k">if</span> <span class="n">state</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-        <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">outpath</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-        <span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">outpath</span><span class="p">,</span> <span class="n">state</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;.pt&#39;</span><span class="p">,</span> <span class="s1">&#39;.png&#39;</span><span class="p">)),</span>
-                    <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s1">&#39;tight&#39;</span><span class="p">)</span>
-
-    <span class="k">return</span> <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span></div>
-
-
-<div class="viewcode-block" id="plot_confusion_matrix"><a class="viewcode-back" href="../../source/core.html#core.graphics.plot_confusion_matrix">[docs]</a><span class="k">def</span> <span class="nf">plot_confusion_matrix</span><span class="p">(</span><span class="n">cm</span><span class="p">,</span> <span class="n">labels</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-                          <span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">),</span> <span class="n">cmap</span><span class="o">=</span><span class="s1">&#39;Blues&#39;</span><span class="p">,</span> <span class="n">state</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-                          <span class="n">outpath</span><span class="o">=</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">HERE</span><span class="p">,</span> <span class="s1">&#39;_graphics/&#39;</span><span class="p">)):</span>
-    <span class="sd">&quot;&quot;&quot;Plot the confusion matrix ``cm``.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    cm : `numpy.ndarray`</span>
-<span class="sd">        The confusion matrix.</span>
-<span class="sd">    labels : `dict` [`int`, `dict`]</span>
-<span class="sd">        The label dictionary. The keys are the values of the class labels</span>
-<span class="sd">        in the ground truth ``y``. Each nested `dict` should have keys:</span>
-<span class="sd">            ``&#39;color&#39;``</span>
-<span class="sd">                A named color (`str`).</span>
-<span class="sd">            ``&#39;label&#39;``</span>
-<span class="sd">                The name of the class label (`str`).</span>
-<span class="sd">    normalize : `bool`, optional</span>
-<span class="sd">        Whether to normalize the confusion matrix. The default is True.</span>
-<span class="sd">    figsize : `tuple`, optional</span>
-<span class="sd">        The figure size in centimeters. The default is (10, 10).</span>
-<span class="sd">    cmap : `str`, optional</span>
-<span class="sd">        A colormap in `matplotlib.pyplot.colormaps()`. The default is &#39;Blues&#39;.</span>
-<span class="sd">    state : `str` or `None`, optional</span>
-<span class="sd">        Filename to save the plot to. ``state`` should be an existing model</span>
-<span class="sd">        state file ending with &#39;.pt&#39;. The default is None, i.e. plot is not</span>
-<span class="sd">        saved to disk.</span>
-<span class="sd">    outpath : `str` or `pathlib.Path`, optional</span>
-<span class="sd">        Output path. The default is &#39;pysegcnn/main/_graphics/&#39;.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    fig : `matplotlib.figure.Figure`</span>
-<span class="sd">        The figure handle.</span>
-<span class="sd">    ax : `matplotlib.axes._subplots.AxesSubplot`</span>
-<span class="sd">        The axes handle.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># number of classes</span>
-    <span class="n">labels</span> <span class="o">=</span> <span class="p">[</span><span class="n">label</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">]</span> <span class="k">for</span> <span class="n">label</span> <span class="ow">in</span> <span class="n">labels</span><span class="o">.</span><span class="n">values</span><span class="p">()]</span>
-    <span class="n">nclasses</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">labels</span><span class="p">)</span>
-
-    <span class="c1"># string format to plot values of confusion matrix</span>
-    <span class="n">fmt</span> <span class="o">=</span> <span class="s1">&#39;.0f&#39;</span>
-
-    <span class="c1"># minimum and maximum values of the colorbar</span>
-    <span class="n">vmin</span><span class="p">,</span> <span class="n">vmax</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cm</span><span class="o">.</span><span class="n">max</span><span class="p">()</span>
-
-    <span class="c1"># check whether to normalize the confusion matrix</span>
-    <span class="k">if</span> <span class="n">normalize</span><span class="p">:</span>
-        <span class="c1"># normalize</span>
-        <span class="n">norm</span> <span class="o">=</span> <span class="n">cm</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">keepdims</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-
-        <span class="c1"># check for division by zero</span>
-        <span class="n">norm</span><span class="p">[</span><span class="n">norm</span> <span class="o">==</span> <span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
-        <span class="n">cm</span> <span class="o">=</span> <span class="n">cm</span> <span class="o">/</span> <span class="n">norm</span>
-
-        <span class="c1"># change string format to floating point</span>
-        <span class="n">fmt</span> <span class="o">=</span> <span class="s1">&#39;.2f&#39;</span>
-        <span class="n">vmin</span><span class="p">,</span> <span class="n">vmax</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span>
-
-    <span class="c1"># create figure</span>
-    <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">figsize</span><span class="o">=</span><span class="n">figsize</span><span class="p">)</span>
-
-    <span class="c1"># get colormap</span>
-    <span class="n">cmap</span> <span class="o">=</span> <span class="n">colormap</span><span class="o">.</span><span class="n">get_cmap</span><span class="p">(</span><span class="n">cmap</span><span class="p">,</span> <span class="mi">256</span><span class="p">)</span>
-
-    <span class="c1"># plot confusion matrix</span>
-    <span class="n">im</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="n">cm</span><span class="p">,</span> <span class="n">cmap</span><span class="o">=</span><span class="n">cmap</span><span class="p">,</span> <span class="n">vmin</span><span class="o">=</span><span class="n">vmin</span><span class="p">,</span> <span class="n">vmax</span><span class="o">=</span><span class="n">vmax</span><span class="p">)</span>
-
-    <span class="c1"># threshold determining the color of the values</span>
-    <span class="n">thresh</span> <span class="o">=</span> <span class="p">(</span><span class="n">cm</span><span class="o">.</span><span class="n">max</span><span class="p">()</span> <span class="o">+</span> <span class="n">cm</span><span class="o">.</span><span class="n">min</span><span class="p">())</span> <span class="o">/</span> <span class="mi">2</span>
-
-    <span class="c1"># brightest/darkest color of current colormap</span>
-    <span class="n">cmap_min</span><span class="p">,</span> <span class="n">cmap_max</span> <span class="o">=</span> <span class="n">cmap</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">cmap</span><span class="p">(</span><span class="mi">256</span><span class="p">)</span>
-
-    <span class="c1"># plot values of confusion matrix</span>
-    <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">product</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="n">nclasses</span><span class="p">),</span> <span class="nb">range</span><span class="p">(</span><span class="n">nclasses</span><span class="p">)):</span>
-        <span class="n">ax</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="nb">format</span><span class="p">(</span><span class="n">cm</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">],</span> <span class="n">fmt</span><span class="p">),</span> <span class="n">ha</span><span class="o">=</span><span class="s1">&#39;center&#39;</span><span class="p">,</span> <span class="n">va</span><span class="o">=</span><span class="s1">&#39;center&#39;</span><span class="p">,</span>
-                <span class="n">color</span><span class="o">=</span><span class="n">cmap_max</span> <span class="k">if</span> <span class="n">cm</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">]</span> <span class="o">&lt;</span> <span class="n">thresh</span> <span class="k">else</span> <span class="n">cmap_min</span><span class="p">)</span>
-
-    <span class="c1"># axes properties and labels</span>
-    <span class="n">ax</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">xticks</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">nclasses</span><span class="p">),</span>
-           <span class="n">yticks</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">nclasses</span><span class="p">),</span>
-           <span class="n">xticklabels</span><span class="o">=</span><span class="n">labels</span><span class="p">,</span>
-           <span class="n">yticklabels</span><span class="o">=</span><span class="n">labels</span><span class="p">,</span>
-           <span class="n">ylabel</span><span class="o">=</span><span class="s1">&#39;True&#39;</span><span class="p">,</span>
-           <span class="n">xlabel</span><span class="o">=</span><span class="s1">&#39;Predicted&#39;</span><span class="p">)</span>
-
-    <span class="c1"># add colorbar axes</span>
-    <span class="n">cax</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">add_axes</span><span class="p">([</span><span class="n">ax</span><span class="o">.</span><span class="n">get_position</span><span class="p">()</span><span class="o">.</span><span class="n">x1</span> <span class="o">+</span> <span class="mf">0.025</span><span class="p">,</span> <span class="n">ax</span><span class="o">.</span><span class="n">get_position</span><span class="p">()</span><span class="o">.</span><span class="n">y0</span><span class="p">,</span>
-                        <span class="mf">0.05</span><span class="p">,</span> <span class="n">ax</span><span class="o">.</span><span class="n">get_position</span><span class="p">()</span><span class="o">.</span><span class="n">y1</span> <span class="o">-</span> <span class="n">ax</span><span class="o">.</span><span class="n">get_position</span><span class="p">()</span><span class="o">.</span><span class="n">y0</span><span class="p">])</span>
-    <span class="n">fig</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">im</span><span class="p">,</span> <span class="n">cax</span><span class="o">=</span><span class="n">cax</span><span class="p">)</span>
-
-    <span class="c1"># save figure</span>
-    <span class="k">if</span> <span class="n">state</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-        <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">outpath</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-        <span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">outpath</span><span class="p">,</span> <span class="n">state</span><span class="p">),</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s1">&#39;tight&#39;</span><span class="p">)</span>
-
-    <span class="k">return</span> <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span></div>
-
-
-<div class="viewcode-block" id="plot_loss"><a class="viewcode-back" href="../../source/core.html#core.graphics.plot_loss">[docs]</a><span class="k">def</span> <span class="nf">plot_loss</span><span class="p">(</span><span class="n">state_file</span><span class="p">,</span> <span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">),</span> <span class="n">step</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span>
-              <span class="n">colors</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;lightgreen&#39;</span><span class="p">,</span> <span class="s1">&#39;green&#39;</span><span class="p">,</span> <span class="s1">&#39;skyblue&#39;</span><span class="p">,</span> <span class="s1">&#39;steelblue&#39;</span><span class="p">],</span>
-              <span class="n">outpath</span><span class="o">=</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">HERE</span><span class="p">,</span> <span class="s1">&#39;_graphics/&#39;</span><span class="p">)):</span>
-    <span class="sd">&quot;&quot;&quot;Plot the observed loss and accuracy of a model run.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    state_file : `str` or `pathlib.Path`</span>
-<span class="sd">        The model state file. Model state files are stored in</span>
-<span class="sd">        pysegcnn/main/_models.</span>
-<span class="sd">    figsize : `tuple`, optional</span>
-<span class="sd">        The figure size in centimeters. The default is (10, 10).</span>
-<span class="sd">    step : `int`, optional</span>
-<span class="sd">        The step of epochs for the x-axis labels. The default is 5, i.e. label</span>
-<span class="sd">        each fifth epoch.</span>
-<span class="sd">    colors : `list` [`str`], optional</span>
-<span class="sd">        A list of four named colors supported by `matplotlib`.</span>
-<span class="sd">        The default is [&#39;lightgreen&#39;, &#39;green&#39;, &#39;skyblue&#39;, &#39;steelblue&#39;].</span>
-<span class="sd">    outpath : `str` or `pathlib.Path`, optional</span>
-<span class="sd">        Output path. The default is &#39;pysegcnn/main/_graphics/&#39;.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    fig : `matplotlib.figure.Figure`</span>
-<span class="sd">        The figure handle.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># load the model state</span>
-    <span class="n">model_state</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">state_file</span><span class="p">)</span>
-
-    <span class="c1"># get all non-zero elements, i.e. get number of epochs trained before</span>
-    <span class="c1"># early stop</span>
-    <span class="n">loss</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">v</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">nonzero</span><span class="p">(</span><span class="n">v</span><span class="p">)]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span>
-            <span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;state&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
-
-    <span class="c1"># compute running mean with a window equal to the number of batches in</span>
-    <span class="c1"># an epoch</span>
-    <span class="n">rm</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">running_mean</span><span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">flatten</span><span class="p">(</span><span class="s1">&#39;F&#39;</span><span class="p">),</span> <span class="n">v</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">loss</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
-
-    <span class="c1"># sort the keys of the dictionary alphabetically</span>
-    <span class="n">rm</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">rm</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">rm</span><span class="p">)}</span>
-
-    <span class="c1"># number of epochs trained</span>
-    <span class="n">epochs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">loss</span><span class="p">[</span><span class="s1">&#39;tl&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
-
-    <span class="c1"># instanciate figure</span>
-    <span class="n">fig</span><span class="p">,</span> <span class="n">ax1</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">figsize</span><span class="o">=</span><span class="n">figsize</span><span class="p">)</span>
-
-    <span class="c1"># create axes for each parameter to plot</span>
-    <span class="n">ax2</span> <span class="o">=</span> <span class="n">ax1</span><span class="o">.</span><span class="n">twinx</span><span class="p">()</span>
-    <span class="n">ax3</span> <span class="o">=</span> <span class="n">ax1</span><span class="o">.</span><span class="n">twiny</span><span class="p">()</span>
-    <span class="n">ax4</span> <span class="o">=</span> <span class="n">ax2</span><span class="o">.</span><span class="n">twiny</span><span class="p">()</span>
-
-    <span class="c1"># list of axes</span>
-    <span class="n">axes</span> <span class="o">=</span> <span class="p">[</span><span class="n">ax2</span><span class="p">,</span> <span class="n">ax1</span><span class="p">,</span> <span class="n">ax4</span><span class="p">,</span> <span class="n">ax3</span><span class="p">]</span>
-
-    <span class="c1"># plot running mean loss and accuracy of the training dataset</span>
-    <span class="p">[</span><span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">c</span><span class="p">)</span> <span class="k">for</span> <span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">),</span> <span class="n">ax</span><span class="p">,</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">rm</span><span class="o">.</span><span class="n">items</span><span class="p">(),</span> <span class="n">axes</span><span class="p">,</span> <span class="n">colors</span><span class="p">)</span>
-     <span class="k">if</span> <span class="n">v</span><span class="o">.</span><span class="n">any</span><span class="p">()]</span>
-
-    <span class="c1"># axes properties and labels</span>
-    <span class="n">nbatches</span> <span class="o">=</span> <span class="n">loss</span><span class="p">[</span><span class="s1">&#39;tl&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-    <span class="n">ax3</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">xticks</span><span class="o">=</span><span class="p">[],</span> <span class="n">xticklabels</span><span class="o">=</span><span class="p">[])</span>
-    <span class="n">ax4</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">xticks</span><span class="o">=</span><span class="p">[],</span> <span class="n">xticklabels</span><span class="o">=</span><span class="p">[])</span>
-    <span class="n">ax1</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">xticks</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">nbatches</span> <span class="o">*</span> <span class="n">epochs</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">nbatches</span> <span class="o">*</span> <span class="n">step</span><span class="p">),</span>
-            <span class="n">xticklabels</span><span class="o">=</span><span class="n">epochs</span><span class="p">[::</span><span class="n">step</span><span class="p">],</span>
-            <span class="n">xlabel</span><span class="o">=</span><span class="s1">&#39;Epoch&#39;</span><span class="p">,</span>
-            <span class="n">ylabel</span><span class="o">=</span><span class="s1">&#39;Loss&#39;</span><span class="p">,</span>
-            <span class="n">ylim</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
-    <span class="n">ax2</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">ylabel</span><span class="o">=</span><span class="s1">&#39;Accuracy&#39;</span><span class="p">,</span>
-            <span class="n">ylim</span><span class="o">=</span><span class="p">(</span><span class="mf">0.5</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
-
-    <span class="c1"># compute early stopping point</span>
-    <span class="k">if</span> <span class="n">loss</span><span class="p">[</span><span class="s1">&#39;va&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">any</span><span class="p">():</span>
-        <span class="n">esepoch</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">argmax</span><span class="p">(</span><span class="n">loss</span><span class="p">[</span><span class="s1">&#39;va&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">))</span> <span class="o">*</span> <span class="n">nbatches</span> <span class="o">+</span> <span class="mi">1</span>
-        <span class="n">esacc</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">loss</span><span class="p">[</span><span class="s1">&#39;va&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">))</span>
-        <span class="n">ax1</span><span class="o">.</span><span class="n">vlines</span><span class="p">(</span><span class="n">esepoch</span><span class="p">,</span> <span class="n">ymin</span><span class="o">=</span><span class="n">ax1</span><span class="o">.</span><span class="n">get_ylim</span><span class="p">()[</span><span class="mi">0</span><span class="p">],</span> <span class="n">ymax</span><span class="o">=</span><span class="n">ax1</span><span class="o">.</span><span class="n">get_ylim</span><span class="p">()[</span><span class="mi">1</span><span class="p">],</span>
-                   <span class="n">ls</span><span class="o">=</span><span class="s1">&#39;--&#39;</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">&#39;grey&#39;</span><span class="p">)</span>
-        <span class="n">ax1</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">esepoch</span> <span class="o">-</span> <span class="n">nbatches</span><span class="p">,</span> <span class="n">ax1</span><span class="o">.</span><span class="n">get_ylim</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="mf">0.01</span><span class="p">,</span>
-                 <span class="s1">&#39;epoch = </span><span class="si">{}</span><span class="s1">, accuracy = </span><span class="si">{:.1f}</span><span class="s1">%&#39;</span>
-                 <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">esepoch</span> <span class="o">/</span> <span class="n">nbatches</span><span class="p">),</span> <span class="n">esacc</span> <span class="o">*</span> <span class="mi">100</span><span class="p">),</span>
-                 <span class="n">ha</span><span class="o">=</span><span class="s1">&#39;right&#39;</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">&#39;grey&#39;</span><span class="p">)</span>
-
-    <span class="c1"># create a patch (proxy artist) for every color</span>
-    <span class="n">ulabels</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;Training accuracy&#39;</span><span class="p">,</span> <span class="s1">&#39;Training loss&#39;</span><span class="p">,</span>
-               <span class="s1">&#39;Validation accuracy&#39;</span><span class="p">,</span> <span class="s1">&#39;Validation loss&#39;</span><span class="p">]</span>
-    <span class="n">patches</span> <span class="o">=</span> <span class="p">[</span><span class="n">mlines</span><span class="o">.</span><span class="n">Line2D</span><span class="p">([],</span> <span class="p">[],</span> <span class="n">color</span><span class="o">=</span><span class="n">c</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="n">l</span><span class="p">)</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">l</span> <span class="ow">in</span>
-               <span class="nb">zip</span><span class="p">(</span><span class="n">colors</span><span class="p">,</span> <span class="n">ulabels</span><span class="p">)]</span>
-    <span class="c1"># plot patches as legend</span>
-    <span class="n">ax1</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">handles</span><span class="o">=</span><span class="n">patches</span><span class="p">,</span> <span class="n">loc</span><span class="o">=</span><span class="s1">&#39;lower left&#39;</span><span class="p">,</span> <span class="n">frameon</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-
-    <span class="c1"># save figure</span>
-    <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">outpath</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-    <span class="n">fig</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-        <span class="n">outpath</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">state_file</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;.pt&#39;</span><span class="p">,</span> <span class="s1">&#39;.png&#39;</span><span class="p">)),</span>
-                <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s1">&#39;tight&#39;</span><span class="p">)</span>
-
-    <span class="k">return</span> <span class="n">fig</span></div>
-</pre></div>
-
-           </div>
-           
-          </div>
-          <footer>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/_modules/core/layers.html b/docs/_build/html/_modules/core/layers.html
deleted file mode 100644
index 81af4ab..0000000
--- a/docs/_build/html/_modules/core/layers.html
+++ /dev/null
@@ -1,954 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>core.layers &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
-        <script src="../../_static/jquery.js"></script>
-        <script src="../../_static/underscore.js"></script>
-        <script src="../../_static/doctools.js"></script>
-        <script src="../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul>
-<li class="toctree-l1"><a class="reference internal" href="../../source/requirements.html">Requirements</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/api.html">API Reference</a></li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../../index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-          <li><a href="../index.html">Module code</a> &raquo;</li>
-        
-      <li>core.layers</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <h1>Source code for core.layers</h1><div class="highlight"><pre>
-<span></span><span class="sd">&quot;&quot;&quot;Layers of a convolutional encoder-decoder network.</span>
-
-<span class="sd">License</span>
-<span class="sd">-------</span>
-
-<span class="sd">    Copyright (c) 2020 Daniel Frisinghelli</span>
-
-<span class="sd">    This source code is licensed under the GNU General Public License v3.</span>
-
-<span class="sd">    See the LICENSE file in the repository&#39;s root directory.</span>
-
-<span class="sd">&quot;&quot;&quot;</span>
-
-<span class="c1"># !/usr/bin/env python</span>
-<span class="c1"># -*- coding: utf-8 -*-</span>
-
-<span class="c1"># externals</span>
-<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
-<span class="kn">import</span> <span class="nn">torch</span>
-<span class="kn">import</span> <span class="nn">torch.nn</span> <span class="k">as</span> <span class="nn">nn</span>
-<span class="kn">import</span> <span class="nn">torch.nn.functional</span> <span class="k">as</span> <span class="nn">F</span>
-
-
-<div class="viewcode-block" id="Conv2dSame"><a class="viewcode-back" href="../../source/core.html#core.layers.Conv2dSame">[docs]</a><span class="k">class</span> <span class="nc">Conv2dSame</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Conv2d</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;A convolution preserving the shape of its input.</span>
-
-<span class="sd">    Given the kernel size, the dilation and a stride of 1, the padding is</span>
-<span class="sd">    calculated such that the output of the convolution has the same spatial</span>
-<span class="sd">    dimensions as the input.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    *args: `list` [`str`]</span>
-<span class="sd">        positional arguments passed to `torch.nn.Conv2d`:</span>
-<span class="sd">            ``&#39;in_channels&#39;``: `int`</span>
-<span class="sd">                Number of input channels.</span>
-<span class="sd">            ``&#39;out_channels&#39;``: `int`</span>
-<span class="sd">                Number of output channels.</span>
-<span class="sd">            ``&#39;kernel_size&#39;``: `int` or `tuple` [`int`]</span>
-<span class="sd">                Size of the convolving kernel.</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">        Additional keyword arguments passed to `torch.nn.Conv2d`_.</span>
-
-<span class="sd">    .. _torch.nn.Conv2d:</span>
-<span class="sd">        https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html#torch.nn.Conv2d</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-
-        <span class="c1"># define tensorflows &quot;SAME&quot; padding for stride = 1</span>
-        <span class="n">x_pad</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">same_padding</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dilation</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">kernel_size</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
-        <span class="n">y_pad</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">same_padding</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dilation</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">kernel_size</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
-
-        <span class="bp">self</span><span class="o">.</span><span class="n">padding</span> <span class="o">=</span> <span class="p">(</span><span class="n">y_pad</span><span class="p">,</span> <span class="n">x_pad</span><span class="p">)</span>
-
-<div class="viewcode-block" id="Conv2dSame.same_padding"><a class="viewcode-back" href="../../source/core.html#core.layers.Conv2dSame.same_padding">[docs]</a>    <span class="nd">@staticmethod</span>
-    <span class="k">def</span> <span class="nf">same_padding</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">k</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Calculate the amount of padding.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        d : `int`</span>
-<span class="sd">            The dilation of the convolution.</span>
-<span class="sd">        k : `int`</span>
-<span class="sd">            The kernel size.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        p : `int`</span>
-<span class="sd">            the amount of padding.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># calculates the padding so that the convolution</span>
-        <span class="c1"># conserves the shape of its input when stride = 1</span>
-        <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">d</span> <span class="o">*</span> <span class="p">(</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)</span></div></div>
-
-
-<div class="viewcode-block" id="conv_bn_relu"><a class="viewcode-back" href="../../source/core.html#core.layers.conv_bn_relu">[docs]</a><span class="k">def</span> <span class="nf">conv_bn_relu</span><span class="p">(</span><span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Block of convolution, batch normalization and rectified linear unit.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    in_channels : `int`</span>
-<span class="sd">        Number of input channels.</span>
-<span class="sd">    out_channels : `int`</span>
-<span class="sd">        Number of output channels.</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">        Additional arguments passed to `pysegcnn.core.layers.Conv2dSame`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    block : `torch.nn.Sequential` [`torch.nn.Module`]</span>
-<span class="sd">        An instance of `torch.nn.Sequential` containing a sequence of</span>
-<span class="sd">        convolution, batch normalization and rectified linear unit layers.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="k">return</span> <span class="n">nn</span><span class="o">.</span><span class="n">Sequential</span><span class="p">(</span>
-            <span class="n">Conv2dSame</span><span class="p">(</span><span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
-            <span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="n">out_channels</span><span class="p">),</span>
-            <span class="n">nn</span><span class="o">.</span><span class="n">ReLU</span><span class="p">(),</span>
-            <span class="n">Conv2dSame</span><span class="p">(</span><span class="n">out_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
-            <span class="n">nn</span><span class="o">.</span><span class="n">BatchNorm2d</span><span class="p">(</span><span class="n">out_channels</span><span class="p">),</span>
-            <span class="n">nn</span><span class="o">.</span><span class="n">ReLU</span><span class="p">()</span>
-            <span class="p">)</span></div>
-
-
-<div class="viewcode-block" id="Block"><a class="viewcode-back" href="../../source/core.html#core.layers.Block">[docs]</a><span class="k">class</span> <span class="nc">Block</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Module</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Basic convolutional block.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    in_channels : `int`</span>
-<span class="sd">        Number of input channels.</span>
-<span class="sd">    out_channels : `int`</span>
-<span class="sd">        Number of output channels.</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">         Additional arguments passed to `pysegcnn.core.layers.Conv2dSame`.</span>
-
-<span class="sd">    Raises</span>
-<span class="sd">    ------</span>
-<span class="sd">    TypeError</span>
-<span class="sd">        Raised if `~pysegcnn.core.layers.Block.layers` method does not return</span>
-<span class="sd">        an instance of `torch.nn.Sequential`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
-
-        <span class="c1"># number of input and output channels</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">in_channels</span> <span class="o">=</span> <span class="n">in_channels</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">out_channels</span> <span class="o">=</span> <span class="n">out_channels</span>
-
-        <span class="c1"># keyword arguments configuring convolutions</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span> <span class="o">=</span> <span class="n">kwargs</span>
-
-        <span class="c1"># the layers of the block</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">conv</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">layers</span><span class="p">()</span>
-        <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conv</span><span class="p">,</span> <span class="n">nn</span><span class="o">.</span><span class="n">Sequential</span><span class="p">):</span>
-            <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1">.layers() should return an instance of </span><span class="si">{}</span><span class="s1">.&#39;</span>
-                            <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span>
-                                    <span class="nb">repr</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Sequential</span><span class="p">)))</span>
-
-<div class="viewcode-block" id="Block.layers"><a class="viewcode-back" href="../../source/core.html#core.layers.Block.layers">[docs]</a>    <span class="k">def</span> <span class="nf">layers</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Define the layers of the block.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        NotImplementedError</span>
-<span class="sd">            Raised if `pysegcnn.core.layers.Block` is not inherited.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        layers : `torch.nn.Sequential` [`torch.nn.Module`]</span>
-<span class="sd">            Return an instance of `torch.nn.Sequential` containing a sequence</span>
-<span class="sd">            of layer (`torch.nn.Module` ) instances.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s1">&#39;Return an instance of </span><span class="si">{}</span><span class="s1">.&#39;</span>
-                                  <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Sequential</span><span class="p">)))</span></div>
-
-<div class="viewcode-block" id="Block.forward"><a class="viewcode-back" href="../../source/core.html#core.layers.Block.forward">[docs]</a>    <span class="k">def</span> <span class="nf">forward</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Forward pass of the block.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        NotImplementedError</span>
-<span class="sd">            Raised if `pysegcnn.core.layers.Block` is not inherited.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        None.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s1">&#39;Implement the forward pass.&#39;</span><span class="p">)</span></div></div>
-
-
-<div class="viewcode-block" id="EncoderBlock"><a class="viewcode-back" href="../../source/core.html#core.layers.EncoderBlock">[docs]</a><span class="k">class</span> <span class="nc">EncoderBlock</span><span class="p">(</span><span class="n">Block</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Block of a convolutional encoder.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    in_channels : `int`</span>
-<span class="sd">        Number of input channels.</span>
-<span class="sd">    out_channels : `int`</span>
-<span class="sd">        Number of output channels.</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">         Additional arguments passed to `pysegcnn.core.layers.Conv2dSame`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-
-<div class="viewcode-block" id="EncoderBlock.forward"><a class="viewcode-back" href="../../source/core.html#core.layers.EncoderBlock.forward">[docs]</a>    <span class="k">def</span> <span class="nf">forward</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Forward pass of an encoder block.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        x : `torch.Tensor`</span>
-<span class="sd">            Input tensor, e.g. output of the previous block/layer.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        y : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            Output of the encoder block.</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            Intermediate output before applying downsampling. Useful to</span>
-<span class="sd">            implement skip connections.</span>
-<span class="sd">        indices : `torch.Tensor` or `None`</span>
-<span class="sd">            Optional indices of the downsampling method, e.g. indices of the</span>
-<span class="sd">            maxima when using `torch.nn.functional.max_pool2d`. Useful for</span>
-<span class="sd">            upsampling later. If no indices are required to upsample, simply</span>
-<span class="sd">            return ``indices`` = `None`.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># the forward pass of the layers of the block</span>
-        <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
-
-        <span class="c1"># the downsampling layer</span>
-        <span class="n">y</span><span class="p">,</span> <span class="n">indices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">downsample</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
-
-        <span class="k">return</span> <span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">indices</span><span class="p">)</span></div>
-
-<div class="viewcode-block" id="EncoderBlock.downsample"><a class="viewcode-back" href="../../source/core.html#core.layers.EncoderBlock.downsample">[docs]</a>    <span class="k">def</span> <span class="nf">downsample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Define the downsampling method.</span>
-
-<span class="sd">        The `~pysegcnn.core.layers.EncoderBlock.downsample` method should</span>
-<span class="sd">        implement the spatial pooling operation.</span>
-
-<span class="sd">        Use one of the following functions to downsample:</span>
-<span class="sd">            - `torch.nn.functional.max_pool2d`</span>
-<span class="sd">            - `torch.nn.functional.interpolate`</span>
-
-<span class="sd">        See `pysegcnn.core.layers.ConvBnReluMaxPool` for an example</span>
-<span class="sd">        implementation.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            Input tensor, e.g. output of a convolutional block.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        NotImplementedError</span>
-<span class="sd">            Raised if `pysegcnn.core.layers.EncoderBlock` is not inherited.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            The spatially downsampled tensor.</span>
-<span class="sd">        indices : `torch.Tensor` or `None`</span>
-<span class="sd">            Optional indices of the downsampling method, e.g. indices of the</span>
-<span class="sd">            maxima when using `torch.nn.functional.max_pool2d`. Useful for</span>
-<span class="sd">            upsampling later. If no indices are required to upsample, simply</span>
-<span class="sd">            return ``indices`` = `None`.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s1">&#39;Implement the downsampling function.&#39;</span><span class="p">)</span></div></div>
-
-
-<div class="viewcode-block" id="DecoderBlock"><a class="viewcode-back" href="../../source/core.html#core.layers.DecoderBlock">[docs]</a><span class="k">class</span> <span class="nc">DecoderBlock</span><span class="p">(</span><span class="n">Block</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Block of a convolutional decoder.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    in_channels : `int`</span>
-<span class="sd">        Number of input channels.</span>
-<span class="sd">    out_channels : `int`</span>
-<span class="sd">        Number of output channels.</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">         Additional arguments passed to `pysegcnn.core.layers.Conv2dSame`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-
-<div class="viewcode-block" id="DecoderBlock.forward"><a class="viewcode-back" href="../../source/core.html#core.layers.DecoderBlock.forward">[docs]</a>    <span class="k">def</span> <span class="nf">forward</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">feature</span><span class="p">,</span> <span class="n">indices</span><span class="p">,</span> <span class="n">skip</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Forward pass of a decoder block.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            Input tensor.</span>
-<span class="sd">        feature : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            Intermediate output of a layer in the encoder.</span>
-<span class="sd">            If ``skip`` = True, ``feature`` is concatenated (along the channel</span>
-<span class="sd">            axis) to the output of the respective upsampling layer in the</span>
-<span class="sd">            decoder (skip connection).</span>
-<span class="sd">        indices : `torch.Tensor` or `None`</span>
-<span class="sd">            Indices of the encoder downsampling method.</span>
-<span class="sd">        skip : `bool`</span>
-<span class="sd">            Whether to apply the skip connection.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            Output of the decoder block.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># upsample</span>
-        <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">upsample</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">feature</span><span class="p">,</span> <span class="n">indices</span><span class="p">)</span>
-
-        <span class="c1"># check whether to apply the skip connection</span>
-        <span class="c1"># skip connection: concatenate the output of a layer in the encoder to</span>
-        <span class="c1"># the corresponding layer in the decoder (along the channel axis)</span>
-        <span class="k">if</span> <span class="n">skip</span><span class="p">:</span>
-            <span class="n">x</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">cat</span><span class="p">([</span><span class="n">x</span><span class="p">,</span> <span class="n">feature</span><span class="p">],</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
-
-        <span class="c1"># output of the convolutional layer</span>
-        <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">conv</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
-
-        <span class="k">return</span> <span class="n">x</span></div>
-
-<div class="viewcode-block" id="DecoderBlock.upsample"><a class="viewcode-back" href="../../source/core.html#core.layers.DecoderBlock.upsample">[docs]</a>    <span class="k">def</span> <span class="nf">upsample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">feature</span><span class="p">,</span> <span class="n">indices</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Define the upsampling method.</span>
-
-<span class="sd">        The `~pysegcnn.core.layers.DecoderBlock.upsample` method should</span>
-<span class="sd">        implement the spatial upsampling operation.</span>
-
-<span class="sd">        Use one of the following functions to upsample:</span>
-<span class="sd">            - `torch.nn.functional.max_unpool2d`</span>
-<span class="sd">            - `torch.nn.functional.interpolate`</span>
-
-<span class="sd">        See `pysegcnn.core.layers.ConvBnReluMaxUnpool` or</span>
-<span class="sd">        `pysegcnn.core.layers.ConvBnReluUpsample` for an example</span>
-<span class="sd">        implementation.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            Input tensor, e.g. output of a convolutional block.</span>
-<span class="sd">        feature : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            Intermediate output of a layer in the encoder. Used to implement</span>
-<span class="sd">            skip connections.</span>
-<span class="sd">        indices : `torch.Tensor` or `None`</span>
-<span class="sd">            Indices of the encoder downsampling method.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        NotImplementedError</span>
-<span class="sd">            Raised if `pysegcnn.core.layers.DecoderBlock` is not inherited.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            The spatially upsampled tensor.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s1">&#39;Implement the upsampling function&#39;</span><span class="p">)</span></div></div>
-
-
-<div class="viewcode-block" id="Encoder"><a class="viewcode-back" href="../../source/core.html#core.layers.Encoder">[docs]</a><span class="k">class</span> <span class="nc">Encoder</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Module</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Generic convolutional encoder.</span>
-
-<span class="sd">    When instanciating an encoder-decoder architechure, ``filters`` should be</span>
-<span class="sd">    the same for `pysegcnn.core.layers.Encoder` and</span>
-<span class="sd">    `pysegcnn.core.layers.Decoder`.</span>
-
-<span class="sd">    See `pysegcnn.core.models.UNet` for an example implementation.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    filters : `list` [`int`]</span>
-<span class="sd">        List of input channels to each convolutional block. The length of</span>
-<span class="sd">        ``filters`` determines the depth of the encoder. The first element of</span>
-<span class="sd">        ``filters`` has to be the number of channels of the input images.</span>
-<span class="sd">    block : `pysegcnn.core.layers.EncoderBlock`</span>
-<span class="sd">        The convolutional block defining a layer in the encoder.</span>
-<span class="sd">        A subclass of `pysegcnn.core.layers.EncoderBlock`, e.g.</span>
-<span class="sd">        `pysegcnn.core.layers.ConvBnReluMaxPool`.</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">        Additional arguments passed to `pysegcnn.core.layers.Conv2dSame`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filters</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
-
-        <span class="c1"># the number of filters for each block: the first element of filters</span>
-        <span class="c1"># has to be the number of input channels</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">features</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">filters</span><span class="p">)</span>
-
-        <span class="c1"># the block of operations defining a layer in the encoder</span>
-        <span class="k">if</span> <span class="ow">not</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">block</span><span class="p">,</span> <span class="n">EncoderBlock</span><span class="p">):</span>
-            <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;&quot;block&quot; expected to be a subclass of </span><span class="si">{}</span><span class="s1">.&#39;</span>
-                            <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">EncoderBlock</span><span class="p">)))</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">block</span> <span class="o">=</span> <span class="n">block</span>
-
-        <span class="c1"># construct the encoder layers</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">layers</span> <span class="o">=</span> <span class="p">[]</span>
-        <span class="k">for</span> <span class="n">lyr</span><span class="p">,</span> <span class="n">lyrp1</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">features</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">features</span><span class="p">[</span><span class="mi">1</span><span class="p">:]):</span>
-            <span class="c1"># append blocks to the encoder layers</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">layers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">block</span><span class="p">(</span><span class="n">lyr</span><span class="p">,</span> <span class="n">lyrp1</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">))</span>
-
-        <span class="c1"># convert list of layers to ModuleList</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">layers</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">ModuleList</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">layers</span><span class="p">])</span>
-
-<div class="viewcode-block" id="Encoder.forward"><a class="viewcode-back" href="../../source/core.html#core.layers.Encoder.forward">[docs]</a>    <span class="k">def</span> <span class="nf">forward</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Forward pass of the encoder.</span>
-
-<span class="sd">        Stores intermediate outputs in a dictionary. The keys of the dictionary</span>
-<span class="sd">        are the number of the network layers and the values are dictionaries</span>
-<span class="sd">        with the following (key, value) pairs:</span>
-<span class="sd">            ``&quot;feature&quot;``</span>
-<span class="sd">                The intermediate encoder outputs (`torch.Tensor`).</span>
-<span class="sd">            ``&quot;indices&quot;``</span>
-<span class="sd">                The indices of the max pooling layer, if required</span>
-<span class="sd">                (`torch.Tensor`).</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            Input image.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            Output of the encoder.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># initialize a dictionary that caches the intermediate outputs, i.e.</span>
-        <span class="c1"># features and pooling indices of each block in the encoder</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">cache</span> <span class="o">=</span> <span class="p">{}</span>
-        <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">layer</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">layers</span><span class="p">):</span>
-            <span class="c1"># apply current encoder layer forward pass</span>
-            <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">ind</span> <span class="o">=</span> <span class="n">layer</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
-
-            <span class="c1"># store intermediate outputs for optional skip connections</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">cache</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;feature&#39;</span><span class="p">:</span>  <span class="n">y</span><span class="p">,</span> <span class="s1">&#39;indices&#39;</span><span class="p">:</span> <span class="n">ind</span><span class="p">}</span>
-
-        <span class="k">return</span> <span class="n">x</span></div></div>
-
-
-<div class="viewcode-block" id="Decoder"><a class="viewcode-back" href="../../source/core.html#core.layers.Decoder">[docs]</a><span class="k">class</span> <span class="nc">Decoder</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Module</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Generic convolutional decoder.</span>
-
-<span class="sd">    When instanciating an encoder-decoder architechure, ``filters`` should be</span>
-<span class="sd">    the same for `pysegcnn.core.layers.Encoder` and</span>
-<span class="sd">    `pysegcnn.core.layers.Decoder`.</span>
-
-<span class="sd">    See `pysegcnn.core.models.UNet` for an example implementation.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    filters : `list` [`int`]</span>
-<span class="sd">        List of input channels to each convolutional block. The length of</span>
-<span class="sd">        ``filters`` determines the depth of the decoder. The first element of</span>
-<span class="sd">        ``filters`` has to be the number of channels of the input images.</span>
-<span class="sd">    block : `pysegcnn.core.layers.DecoderBlock`</span>
-<span class="sd">        The convolutional block defining a layer in the decoder.</span>
-<span class="sd">        A subclass of `pysegcnn.core.layers.DecoderBlock`, e.g.</span>
-<span class="sd">        `pysegcnn.core.layers.ConvBnReluMaxUnpool`.</span>
-<span class="sd">    skip : `bool`</span>
-<span class="sd">        Whether to apply skip connections from the encoder to the decoder.</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">        Additional arguments passed to `pysegcnn.core.layers.Conv2dSame`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filters</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="n">skip</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
-
-        <span class="c1"># the block of operations defining a layer in the decoder</span>
-        <span class="k">if</span> <span class="ow">not</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">block</span><span class="p">,</span> <span class="n">DecoderBlock</span><span class="p">):</span>
-            <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;&quot;block&quot; expected to be a subclass of </span><span class="si">{}</span><span class="s1">.&#39;</span>
-                            <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">DecoderBlock</span><span class="p">)))</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">block</span> <span class="o">=</span> <span class="n">block</span>
-
-        <span class="c1"># the number of filters for each block is symmetric to the encoder:</span>
-        <span class="c1"># the last two element of filters have to be equal in order to apply</span>
-        <span class="c1"># last skip connection</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">features</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">filters</span><span class="p">)[::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">features</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">features</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span>
-
-        <span class="c1"># whether to apply skip connections</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">skip</span> <span class="o">=</span> <span class="n">skip</span>
-
-        <span class="c1"># in case of skip connections, the number of input channels to</span>
-        <span class="c1"># each block of the decoder is doubled</span>
-        <span class="n">n_in</span> <span class="o">=</span> <span class="mi">2</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">skip</span> <span class="k">else</span> <span class="mi">1</span>
-
-        <span class="c1"># construct decoder layers</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">layers</span> <span class="o">=</span> <span class="p">[]</span>
-        <span class="k">for</span> <span class="n">lyr</span><span class="p">,</span> <span class="n">lyrp1</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">n_in</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">features</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">features</span><span class="p">[</span><span class="mi">1</span><span class="p">:]):</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">layers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">block</span><span class="p">(</span><span class="n">lyr</span><span class="p">,</span> <span class="n">lyrp1</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">))</span>
-
-        <span class="c1"># convert list of layers to ModuleList</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">layers</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">ModuleList</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">layers</span><span class="p">])</span>
-
-<div class="viewcode-block" id="Decoder.forward"><a class="viewcode-back" href="../../source/core.html#core.layers.Decoder.forward">[docs]</a>    <span class="k">def</span> <span class="nf">forward</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">enc_cache</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Forward pass of the decoder.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            Output of the encoder.</span>
-<span class="sd">        enc_cache : `dict` [`dict`]</span>
-<span class="sd">            Cache dictionary. The keys of the dictionary are the number of the</span>
-<span class="sd">            network layers and the values are dictionaries with the following</span>
-<span class="sd">            (key, value) pairs:</span>
-<span class="sd">                ``&quot;feature&quot;``</span>
-<span class="sd">                    The intermediate encoder outputs (`torch.Tensor`).</span>
-<span class="sd">                ``&quot;indices&quot;``</span>
-<span class="sd">                    The indices of the max pooling layer (`torch.Tensor`).</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            Output of the decoder.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># for each layer, upsample input and apply optional skip connection</span>
-        <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">layer</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">layers</span><span class="p">):</span>
-
-            <span class="c1"># get intermediate outputs from encoder: iterate the encoder cache</span>
-            <span class="c1"># in reversed direction, i.e. from last to first encoder layer</span>
-            <span class="n">cache</span> <span class="o">=</span> <span class="n">enc_cache</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">layers</span><span class="p">)</span> <span class="o">-</span> <span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)]</span>
-            <span class="n">feature</span><span class="p">,</span> <span class="n">indices</span> <span class="o">=</span> <span class="n">cache</span><span class="p">[</span><span class="s1">&#39;feature&#39;</span><span class="p">],</span> <span class="n">cache</span><span class="p">[</span><span class="s1">&#39;indices&#39;</span><span class="p">]</span>
-
-            <span class="c1"># apply current decoder layer forward pass</span>
-            <span class="n">x</span> <span class="o">=</span> <span class="n">layer</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">feature</span><span class="p">,</span> <span class="n">indices</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">skip</span><span class="p">)</span>
-
-        <span class="k">return</span> <span class="n">x</span></div></div>
-
-
-<div class="viewcode-block" id="ConvBnReluMaxPool"><a class="viewcode-back" href="../../source/core.html#core.layers.ConvBnReluMaxPool">[docs]</a><span class="k">class</span> <span class="nc">ConvBnReluMaxPool</span><span class="p">(</span><span class="n">EncoderBlock</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Block of convolution, batchnorm, relu and 2x2 max pool.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    in_channels : `int`</span>
-<span class="sd">        Number of input channels.</span>
-<span class="sd">    out_channels : `int`</span>
-<span class="sd">        Number of output channels.</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">        Additional keyword arguments passed to</span>
-<span class="sd">        `pysegcnn.core.layers.Conv2dSame`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-
-<div class="viewcode-block" id="ConvBnReluMaxPool.layers"><a class="viewcode-back" href="../../source/core.html#core.layers.ConvBnReluMaxPool.layers">[docs]</a>    <span class="k">def</span> <span class="nf">layers</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Sequence of convolution, batchnorm and relu layers.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        layers : `torch.nn.Sequential` [`torch.nn.Module`]</span>
-<span class="sd">            An instance of `torch.nn.Sequential` containing the sequence</span>
-<span class="sd">            of convolution, batchnorm and relu layer (`torch.nn.Module`)</span>
-<span class="sd">            instances.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">conv_bn_relu</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">in_channels</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">)</span></div>
-
-<div class="viewcode-block" id="ConvBnReluMaxPool.downsample"><a class="viewcode-back" href="../../source/core.html#core.layers.ConvBnReluMaxPool.downsample">[docs]</a>    <span class="k">def</span> <span class="nf">downsample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;2x2 max pooling layer, `torch.nn.functional.max_pool2d`.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            Input tensor.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height // 2, width // 2)</span>
-<span class="sd">            The 2x2 max pooled tensor.</span>
-<span class="sd">        indices : `torch.Tensor` or `None`</span>
-<span class="sd">            The indices of the maxima. Useful for upsampling with</span>
-<span class="sd">            `torch.nn.functional.max_unpool2d`.</span>
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="n">x</span><span class="p">,</span> <span class="n">indices</span> <span class="o">=</span> <span class="n">F</span><span class="o">.</span><span class="n">max_pool2d</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">return_indices</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-        <span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">indices</span></div>
-
-<div class="viewcode-block" id="ConvBnReluMaxPool.extra_repr"><a class="viewcode-back" href="../../source/core.html#core.layers.ConvBnReluMaxPool.extra_repr">[docs]</a>    <span class="k">def</span> <span class="nf">extra_repr</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Define optional extra information about this module.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        `str`</span>
-<span class="sd">            Extra representation string.</span>
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="p">(</span><span class="s1">&#39;(pool): MaxPool2d(kernel_size=2, stride=2, padding=0, &#39;</span>
-                <span class="s1">&#39;dilation=1, ceil_mode=False)&#39;</span><span class="p">)</span></div></div>
-
-
-<div class="viewcode-block" id="ConvBnReluMaxUnpool"><a class="viewcode-back" href="../../source/core.html#core.layers.ConvBnReluMaxUnpool">[docs]</a><span class="k">class</span> <span class="nc">ConvBnReluMaxUnpool</span><span class="p">(</span><span class="n">DecoderBlock</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Block of convolution, batchnorm, relu and 2x2 max unpool.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    in_channels : `int`</span>
-<span class="sd">        Number of input channels.</span>
-<span class="sd">    out_channels : `int`</span>
-<span class="sd">        Number of output channels</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">        Additional keyword arguments passed to</span>
-<span class="sd">        `pysegcnn.core.layers.Conv2dSame`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-
-<div class="viewcode-block" id="ConvBnReluMaxUnpool.layers"><a class="viewcode-back" href="../../source/core.html#core.layers.ConvBnReluMaxUnpool.layers">[docs]</a>    <span class="k">def</span> <span class="nf">layers</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Sequence of convolution, batchnorm and relu layers.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        layers : `torch.nn.Sequential` [`torch.nn.Module`]</span>
-<span class="sd">            An instance of `torch.nn.Sequential` containing the sequence</span>
-<span class="sd">            of convolution, batchnorm and relu layer (`torch.nn.Module`)</span>
-<span class="sd">            instances.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">conv_bn_relu</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">in_channels</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">)</span></div>
-
-<div class="viewcode-block" id="ConvBnReluMaxUnpool.upsample"><a class="viewcode-back" href="../../source/core.html#core.layers.ConvBnReluMaxUnpool.upsample">[docs]</a>    <span class="k">def</span> <span class="nf">upsample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">feature</span><span class="p">,</span> <span class="n">indices</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;2x2 max unpooling layer.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            Input tensor.</span>
-<span class="sd">        feature : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            Intermediate output of a layer in the encoder. Used to determine</span>
-<span class="sd">            the output shape of the upsampling operation.</span>
-<span class="sd">        indices : `torch.Tensor`</span>
-<span class="sd">            The indices of the maxima of the max pooling operation</span>
-<span class="sd">            (as returned by `torch.nn.functional.max_pool2d`).</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height * 2, width * 2)</span>
-<span class="sd">            The 2x2 max unpooled tensor.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">F</span><span class="o">.</span><span class="n">max_unpool2d</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">indices</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
-                              <span class="n">output_size</span><span class="o">=</span><span class="n">feature</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span></div>
-
-<div class="viewcode-block" id="ConvBnReluMaxUnpool.extra_repr"><a class="viewcode-back" href="../../source/core.html#core.layers.ConvBnReluMaxUnpool.extra_repr">[docs]</a>    <span class="k">def</span> <span class="nf">extra_repr</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Define optional extra information about this module.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        `str`</span>
-<span class="sd">            Extra representation string.</span>
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="p">(</span><span class="s1">&#39;(pool): MaxUnpool2d(kernel_size=(2, 2), stride=(2, 2), &#39;</span>
-                <span class="s1">&#39;padding=(0, 0))&#39;</span><span class="p">)</span></div></div>
-
-
-<div class="viewcode-block" id="ConvBnReluUpsample"><a class="viewcode-back" href="../../source/core.html#core.layers.ConvBnReluUpsample">[docs]</a><span class="k">class</span> <span class="nc">ConvBnReluUpsample</span><span class="p">(</span><span class="n">DecoderBlock</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Block of convolution, batchnorm, relu and nearest neighbor upsampling.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    in_channels : `int`</span>
-<span class="sd">        Number of input channels.</span>
-<span class="sd">    out_channels : `int`</span>
-<span class="sd">        Number of output channels</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">        Additional arguments passed to `pysegcnn.core.layers.Conv2dSame`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-
-<div class="viewcode-block" id="ConvBnReluUpsample.layers"><a class="viewcode-back" href="../../source/core.html#core.layers.ConvBnReluUpsample.layers">[docs]</a>    <span class="k">def</span> <span class="nf">layers</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Sequence of convolution, batchnorm and relu layers.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        layers : `torch.nn.Sequential` [`torch.nn.Module`]</span>
-<span class="sd">            An instance of `torch.nn.Sequential` containing the sequence</span>
-<span class="sd">            of convolution, batchnorm and relu layer (`torch.nn.Module`)</span>
-<span class="sd">            instances.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">conv_bn_relu</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">in_channels</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">)</span></div>
-
-<div class="viewcode-block" id="ConvBnReluUpsample.upsample"><a class="viewcode-back" href="../../source/core.html#core.layers.ConvBnReluUpsample.upsample">[docs]</a>    <span class="k">def</span> <span class="nf">upsample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">feature</span><span class="p">,</span> <span class="n">indices</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Nearest neighbor upsampling.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            Input tensor.</span>
-<span class="sd">        feature : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            Intermediate output of a layer in the encoder. Used to determine</span>
-<span class="sd">            the output shape of the upsampling operation.</span>
-<span class="sd">        indices : `None`, optional</span>
-<span class="sd">            The indices of the maxima of the max pooling operation</span>
-<span class="sd">            (as returned by `torch.nn.functional.max_pool2d`). Not required by</span>
-<span class="sd">            this upsampling method.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            The 2x2 upsampled tensor.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">F</span><span class="o">.</span><span class="n">interpolate</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">feature</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">2</span><span class="p">:],</span> <span class="n">mode</span><span class="o">=</span><span class="s1">&#39;nearest&#39;</span><span class="p">)</span></div>
-
-<div class="viewcode-block" id="ConvBnReluUpsample.extra_repr"><a class="viewcode-back" href="../../source/core.html#core.layers.ConvBnReluUpsample.extra_repr">[docs]</a>    <span class="k">def</span> <span class="nf">extra_repr</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Define optional extra information about this module.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        `str`</span>
-<span class="sd">            Extra representation string.</span>
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="s1">&#39;(pool): Upsample(mode=&quot;nearest&quot;)&#39;</span></div></div>
-</pre></div>
-
-           </div>
-           
-          </div>
-          <footer>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/_modules/core/logging.html b/docs/_build/html/_modules/core/logging.html
deleted file mode 100644
index 11127c5..0000000
--- a/docs/_build/html/_modules/core/logging.html
+++ /dev/null
@@ -1,282 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>core.logging &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
-        <script src="../../_static/jquery.js"></script>
-        <script src="../../_static/underscore.js"></script>
-        <script src="../../_static/doctools.js"></script>
-        <script src="../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul>
-<li class="toctree-l1"><a class="reference internal" href="../../source/requirements.html">Requirements</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/api.html">API Reference</a></li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../../index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-          <li><a href="../index.html">Module code</a> &raquo;</li>
-        
-      <li>core.logging</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <h1>Source code for core.logging</h1><div class="highlight"><pre>
-<span></span><span class="sd">&quot;&quot;&quot;Logging configuration.</span>
-
-<span class="sd">License</span>
-<span class="sd">-------</span>
-
-<span class="sd">    Copyright (c) 2020 Daniel Frisinghelli</span>
-
-<span class="sd">    This source code is licensed under the GNU General Public License v3.</span>
-
-<span class="sd">    See the LICENSE file in the repository&#39;s root directory.</span>
-
-<span class="sd">&quot;&quot;&quot;</span>
-
-<span class="c1"># !/usr/bin/env python</span>
-<span class="c1"># -*- coding: utf-8 -*-</span>
-
-<span class="c1"># builtins</span>
-<span class="kn">import</span> <span class="nn">pathlib</span>
-
-
-<span class="c1"># the logging configuration dictionary</span>
-<div class="viewcode-block" id="log_conf"><a class="viewcode-back" href="../../source/core.html#core.logging.log_conf">[docs]</a><span class="k">def</span> <span class="nf">log_conf</span><span class="p">(</span><span class="n">logfile</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Set basic logging configuration passed to `logging.config.dictConfig`.</span>
-
-<span class="sd">    See the logging `docs`_ for a detailed description of the configuration</span>
-<span class="sd">    dictionary.</span>
-
-<span class="sd">    .. _docs:</span>
-<span class="sd">        https://docs.python.org/3/library/logging.config.html#dictionary-schema-details</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    logfile : `str` or `pathlib.Path`</span>
-<span class="sd">        The file to save the logs to.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    LOGGING_CONFIG : `dict`</span>
-<span class="sd">        The logging configuration.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># check if the parent directory of the log file exists</span>
-    <span class="n">logfile</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">logfile</span><span class="p">)</span>
-    <span class="k">if</span> <span class="ow">not</span> <span class="n">logfile</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
-        <span class="n">logfile</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-
-    <span class="n">LOGGING_CONFIG</span> <span class="o">=</span> <span class="p">{</span>
-        <span class="s1">&#39;version&#39;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
-        <span class="s1">&#39;disable_existing_loggers&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-        <span class="s1">&#39;formatters&#39;</span><span class="p">:</span> <span class="p">{</span>
-            <span class="s1">&#39;brief&#39;</span><span class="p">:</span> <span class="p">{</span>
-                <span class="s1">&#39;format&#39;</span><span class="p">:</span> <span class="s1">&#39;</span><span class="si">%(name)s</span><span class="s1">: </span><span class="si">%(message)s</span><span class="s1">&#39;</span>
-                <span class="p">},</span>
-            <span class="s1">&#39;standard&#39;</span><span class="p">:</span> <span class="p">{</span>
-                <span class="s1">&#39;format&#39;</span><span class="p">:</span> <span class="s1">&#39;</span><span class="si">%(asctime)s</span><span class="s1"> [</span><span class="si">%(levelname)s</span><span class="s1">] </span><span class="si">%(name)s</span><span class="s1">: </span><span class="si">%(message)s</span><span class="s1">&#39;</span><span class="p">,</span>
-                <span class="s1">&#39;datefmt&#39;</span><span class="p">:</span> <span class="s1">&#39;%Y-%m-</span><span class="si">%d</span><span class="s1">T%H:%M:%S&#39;</span>
-                <span class="p">},</span>
-        <span class="p">},</span>
-        <span class="s1">&#39;handlers&#39;</span><span class="p">:</span> <span class="p">{</span>
-            <span class="s1">&#39;console&#39;</span><span class="p">:</span> <span class="p">{</span>
-                <span class="s1">&#39;class&#39;</span><span class="p">:</span> <span class="s1">&#39;logging.StreamHandler&#39;</span><span class="p">,</span>
-                <span class="s1">&#39;formatter&#39;</span><span class="p">:</span> <span class="s1">&#39;brief&#39;</span><span class="p">,</span>
-                <span class="s1">&#39;level&#39;</span><span class="p">:</span> <span class="s1">&#39;INFO&#39;</span><span class="p">,</span>
-                <span class="s1">&#39;stream&#39;</span><span class="p">:</span> <span class="s1">&#39;ext://sys.stderr&#39;</span><span class="p">,</span>
-            <span class="p">},</span>
-
-            <span class="s1">&#39;file&#39;</span><span class="p">:</span> <span class="p">{</span>
-                <span class="s1">&#39;class&#39;</span><span class="p">:</span> <span class="s1">&#39;logging.FileHandler&#39;</span><span class="p">,</span>
-                <span class="s1">&#39;formatter&#39;</span><span class="p">:</span> <span class="s1">&#39;standard&#39;</span><span class="p">,</span>
-                <span class="s1">&#39;level&#39;</span><span class="p">:</span> <span class="s1">&#39;INFO&#39;</span><span class="p">,</span>
-                <span class="s1">&#39;filename&#39;</span><span class="p">:</span> <span class="n">logfile</span><span class="p">,</span>
-                <span class="s1">&#39;mode&#39;</span><span class="p">:</span> <span class="s1">&#39;a&#39;</span>
-            <span class="p">}</span>
-        <span class="p">},</span>
-        <span class="s1">&#39;loggers&#39;</span><span class="p">:</span> <span class="p">{</span>
-            <span class="s1">&#39;&#39;</span><span class="p">:</span> <span class="p">{</span>
-                <span class="s1">&#39;handlers&#39;</span><span class="p">:</span> <span class="p">[</span><span class="s1">&#39;console&#39;</span><span class="p">,</span> <span class="s1">&#39;file&#39;</span><span class="p">],</span>
-                <span class="s1">&#39;level&#39;</span><span class="p">:</span> <span class="s1">&#39;INFO&#39;</span><span class="p">,</span>
-            <span class="p">},</span>
-        <span class="p">}</span>
-    <span class="p">}</span>
-
-    <span class="k">return</span> <span class="n">LOGGING_CONFIG</span></div>
-</pre></div>
-
-           </div>
-           
-          </div>
-          <footer>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/_modules/core/models.html b/docs/_build/html/_modules/core/models.html
deleted file mode 100644
index a9f1a46..0000000
--- a/docs/_build/html/_modules/core/models.html
+++ /dev/null
@@ -1,532 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>core.models &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
-        <script src="../../_static/jquery.js"></script>
-        <script src="../../_static/underscore.js"></script>
-        <script src="../../_static/doctools.js"></script>
-        <script src="../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul>
-<li class="toctree-l1"><a class="reference internal" href="../../source/requirements.html">Requirements</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/api.html">API Reference</a></li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../../index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-          <li><a href="../index.html">Module code</a> &raquo;</li>
-        
-      <li>core.models</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <h1>Source code for core.models</h1><div class="highlight"><pre>
-<span></span><span class="sd">&quot;&quot;&quot;Neural networks for semantic image segmentation.</span>
-
-<span class="sd">License</span>
-<span class="sd">-------</span>
-
-<span class="sd">    Copyright (c) 2020 Daniel Frisinghelli</span>
-
-<span class="sd">    This source code is licensed under the GNU General Public License v3.</span>
-
-<span class="sd">    See the LICENSE file in the repository&#39;s root directory.</span>
-
-<span class="sd">&quot;&quot;&quot;</span>
-
-<span class="c1"># !/usr/bin/env python</span>
-<span class="c1"># -*- coding: utf-8 -*-</span>
-
-<span class="c1"># builtins</span>
-<span class="kn">import</span> <span class="nn">enum</span>
-<span class="kn">import</span> <span class="nn">logging</span>
-<span class="kn">import</span> <span class="nn">pathlib</span>
-
-<span class="c1"># externals</span>
-<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
-<span class="kn">import</span> <span class="nn">torch</span>
-<span class="kn">import</span> <span class="nn">torch.nn</span> <span class="k">as</span> <span class="nn">nn</span>
-<span class="kn">import</span> <span class="nn">torch.optim</span> <span class="k">as</span> <span class="nn">optim</span>
-
-<span class="c1"># locals</span>
-<span class="kn">from</span> <span class="nn">pysegcnn.core.layers</span> <span class="kn">import</span> <span class="p">(</span><span class="n">Encoder</span><span class="p">,</span> <span class="n">Decoder</span><span class="p">,</span> <span class="n">ConvBnReluMaxPool</span><span class="p">,</span>
-                                  <span class="n">ConvBnReluMaxUnpool</span><span class="p">,</span> <span class="n">Conv2dSame</span><span class="p">)</span>
-
-<span class="c1"># module level logger</span>
-<span class="n">LOGGER</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
-
-
-<div class="viewcode-block" id="Network"><a class="viewcode-back" href="../../source/core.html#core.models.Network">[docs]</a><span class="k">class</span> <span class="nc">Network</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Module</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Generic Network class.</span>
-
-<span class="sd">    The base class for each model. If you want to implement a new model,</span>
-<span class="sd">    inherit the ``~pysegcnn.core.models.Network`` class.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
-
-        <span class="c1"># initialize state file</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">state_file</span> <span class="o">=</span> <span class="kc">None</span>
-
-<div class="viewcode-block" id="Network.freeze"><a class="viewcode-back" href="../../source/core.html#core.models.Network.freeze">[docs]</a>    <span class="k">def</span> <span class="nf">freeze</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Freeze the weights of a model.</span>
-
-<span class="sd">        Disables gradient computation: useful when using a pretrained model for</span>
-<span class="sd">        inference.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        None.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">():</span>
-            <span class="n">param</span><span class="o">.</span><span class="n">requires_grad</span> <span class="o">=</span> <span class="kc">False</span></div>
-
-<div class="viewcode-block" id="Network.unfreeze"><a class="viewcode-back" href="../../source/core.html#core.models.Network.unfreeze">[docs]</a>    <span class="k">def</span> <span class="nf">unfreeze</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Unfreeze the weights of a model.</span>
-
-<span class="sd">        Enables gradient computation: useful when adjusting a pretrained model</span>
-<span class="sd">        to a new dataset.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        None.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">():</span>
-            <span class="n">param</span><span class="o">.</span><span class="n">requires_grad</span> <span class="o">=</span> <span class="kc">True</span></div>
-
-<div class="viewcode-block" id="Network.save"><a class="viewcode-back" href="../../source/core.html#core.models.Network.save">[docs]</a>    <span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state_file</span><span class="p">,</span> <span class="n">optimizer</span><span class="p">,</span> <span class="n">bands</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Save the model state.</span>
-
-<span class="sd">        Saves the model and optimizer states together with the model</span>
-<span class="sd">        construction parameters, to easily re-instanciate the model.</span>
-
-<span class="sd">        Optional ``kwargs`` are also saved.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        state_file : `str` or `pathlib.Path`</span>
-<span class="sd">            Path to save the model state.</span>
-<span class="sd">        optimizer : `torch.optim.Optimizer`</span>
-<span class="sd">            The optimizer used to train the model.</span>
-<span class="sd">        bands : `list` [`str`] or `None`, optional</span>
-<span class="sd">            List of bands the model is trained with. The default is None.</span>
-<span class="sd">        **kwargs</span>
-<span class="sd">            Arbitrary keyword arguments. Each keyword argument will be saved</span>
-<span class="sd">            as (key, value) pair in ``state_file``.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        model_state : `dict`</span>
-<span class="sd">            A dictionary containing the model and optimizer state</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># check if the output path exists and if not, create it</span>
-        <span class="n">state_file</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">state_file</span><span class="p">)</span>
-        <span class="k">if</span> <span class="ow">not</span> <span class="n">state_file</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
-            <span class="n">state_file</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-
-        <span class="c1"># initialize dictionary to store network parameters</span>
-        <span class="n">model_state</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">kwargs</span><span class="p">}</span>
-
-        <span class="c1"># store the spectral bands the model is trained with</span>
-        <span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;bands&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">bands</span>
-
-        <span class="c1"># store model and optimizer class</span>
-        <span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;cls&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span>
-        <span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;optim_cls&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">optimizer</span><span class="o">.</span><span class="vm">__class__</span>
-
-        <span class="c1"># store construction parameters to instanciate the network</span>
-        <span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-            <span class="s1">&#39;skip&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">skip</span><span class="p">,</span>
-            <span class="s1">&#39;filters&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">nfilters</span><span class="p">,</span>
-            <span class="s1">&#39;nclasses&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">nclasses</span><span class="p">,</span>
-            <span class="s1">&#39;in_channels&#39;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_channels</span>
-            <span class="p">}</span>
-
-        <span class="c1"># store optimizer construction parameters</span>
-        <span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;optim_params&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">optimizer</span><span class="o">.</span><span class="n">defaults</span>
-
-        <span class="c1"># store optional keyword arguments</span>
-        <span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">],</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">}</span>
-
-        <span class="c1"># store model epoch</span>
-        <span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;epoch&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">epoch</span>
-
-        <span class="c1"># store model and optimizer state</span>
-        <span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;model_state_dict&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">state_dict</span><span class="p">()</span>
-        <span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;optim_state_dict&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">optimizer</span><span class="o">.</span><span class="n">state_dict</span><span class="p">()</span>
-
-        <span class="c1"># model state dictionary stores the values of all trainable parameters</span>
-        <span class="n">torch</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">model_state</span><span class="p">,</span> <span class="n">state_file</span><span class="p">)</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Network parameters saved in </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">state_file</span><span class="p">))</span>
-
-        <span class="k">return</span> <span class="n">model_state</span></div>
-
-<div class="viewcode-block" id="Network.load"><a class="viewcode-back" href="../../source/core.html#core.models.Network.load">[docs]</a>    <span class="nd">@staticmethod</span>
-    <span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="n">state_file</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Load a model state.</span>
-
-<span class="sd">        Returns the model in ``state_file`` with the pretrained model and</span>
-<span class="sd">        optimizer weights. Useful when resuming training an existing model.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        state_file : `str` or `pathlib.Path`</span>
-<span class="sd">           The model state file. Model state files are stored in</span>
-<span class="sd">           pysegcnn/main/_models.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        FileNotFoundError</span>
-<span class="sd">            Raised if ``state_file`` does not exist.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        model : `pysegcnn.core.models.Network`</span>
-<span class="sd">            The pretrained model.</span>
-<span class="sd">        optimizer : `torch.optim.Optimizer`</span>
-<span class="sd">           The optimizer used to train the model.</span>
-<span class="sd">        model_state : &#39;`dict`</span>
-<span class="sd">            A dictionary containing the model and optimizer state, as</span>
-<span class="sd">            constructed by `~pysegcnn.core.Network.save`.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># load the pretrained model</span>
-        <span class="n">state_file</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">state_file</span><span class="p">)</span>
-        <span class="k">if</span> <span class="ow">not</span> <span class="n">state_file</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-            <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1"> does not exist.&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">state_file</span><span class="p">))</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Loading pretrained weights from: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">state_file</span><span class="p">))</span>
-
-        <span class="c1"># load the model state</span>
-        <span class="n">model_state</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">state_file</span><span class="p">)</span>
-
-        <span class="c1"># the model and optimizer class</span>
-        <span class="n">model_class</span> <span class="o">=</span> <span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;cls&#39;</span><span class="p">]</span>
-        <span class="n">optim_class</span> <span class="o">=</span> <span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;optim_cls&#39;</span><span class="p">]</span>
-
-        <span class="c1"># instanciate pretrained model architecture</span>
-        <span class="n">model</span> <span class="o">=</span> <span class="n">model_class</span><span class="p">(</span><span class="o">**</span><span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">])</span>
-
-        <span class="c1"># store state file as instance attribute</span>
-        <span class="n">model</span><span class="o">.</span><span class="n">state_file</span> <span class="o">=</span> <span class="n">state_file</span>
-
-        <span class="c1"># load pretrained model weights</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Loading model parameters ...&#39;</span><span class="p">)</span>
-        <span class="n">model</span><span class="o">.</span><span class="n">load_state_dict</span><span class="p">(</span><span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;model_state_dict&#39;</span><span class="p">])</span>
-        <span class="n">model</span><span class="o">.</span><span class="n">epoch</span> <span class="o">=</span> <span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;epoch&#39;</span><span class="p">]</span>
-
-        <span class="c1"># resume optimizer parameters</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Loading optimizer parameters ...&#39;</span><span class="p">)</span>
-        <span class="n">optimizer</span> <span class="o">=</span> <span class="n">optim_class</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">parameters</span><span class="p">(),</span>
-                                <span class="o">**</span><span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;optim_params&#39;</span><span class="p">])</span>
-        <span class="n">optimizer</span><span class="o">.</span><span class="n">load_state_dict</span><span class="p">(</span><span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;optim_state_dict&#39;</span><span class="p">])</span>
-
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Model epoch: </span><span class="si">{:d}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">epoch</span><span class="p">))</span>
-
-        <span class="k">return</span> <span class="n">model</span><span class="p">,</span> <span class="n">optimizer</span><span class="p">,</span> <span class="n">model_state</span></div>
-
-    <span class="nd">@property</span>
-    <span class="k">def</span> <span class="nf">state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Return the model state file.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        state_file : `pathlib.Path` or `None`</span>
-<span class="sd">            The model state file.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">state_file</span></div>
-
-
-<div class="viewcode-block" id="UNet"><a class="viewcode-back" href="../../source/core.html#core.models.UNet">[docs]</a><span class="k">class</span> <span class="nc">UNet</span><span class="p">(</span><span class="n">Network</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;A PyTorch implementation of `U-Net`_.</span>
-
-<span class="sd">    Slightly modified version of U-Net:</span>
-<span class="sd">        - each convolution is followed by a batch normalization layer</span>
-<span class="sd">        - the upsampling is implemented by a 2x2 max unpooling operation</span>
-
-<span class="sd">    .. _U-Net:</span>
-<span class="sd">        https://arxiv.org/abs/1505.04597</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    in_channels : `int`</span>
-<span class="sd">        Number of channels of the input images.</span>
-<span class="sd">    nclasses : `int`</span>
-<span class="sd">        Number of classes.</span>
-<span class="sd">    filters : `list` [`int`]</span>
-<span class="sd">        List of input channels to each convolutional block.</span>
-<span class="sd">    skip : `bool`</span>
-<span class="sd">        Whether to apply skip connections from the encoder to the decoder.</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">        Additional keyword arguments passed to</span>
-<span class="sd">        `pysegcnn.core.layers.Conv2dSame`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_channels</span><span class="p">,</span> <span class="n">nclasses</span><span class="p">,</span> <span class="n">filters</span><span class="p">,</span> <span class="n">skip</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
-
-        <span class="c1"># number of input channels</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">in_channels</span> <span class="o">=</span> <span class="n">in_channels</span>
-
-        <span class="c1"># number of classes</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">nclasses</span> <span class="o">=</span> <span class="n">nclasses</span>
-
-        <span class="c1"># configuration of the convolutional layers in the network</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span> <span class="o">=</span> <span class="n">kwargs</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">nfilters</span> <span class="o">=</span> <span class="n">filters</span>
-
-        <span class="c1"># convolutional layers of the encoder</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">filters</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">hstack</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">in_channels</span><span class="p">),</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">filters</span><span class="p">)])</span>
-
-        <span class="c1"># whether to apply skip connections</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">skip</span> <span class="o">=</span> <span class="n">skip</span>
-
-        <span class="c1"># number of epochs trained</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">epoch</span> <span class="o">=</span> <span class="mi">0</span>
-
-        <span class="c1"># construct the encoder</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">encoder</span> <span class="o">=</span> <span class="n">Encoder</span><span class="p">(</span><span class="n">filters</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">filters</span><span class="p">,</span> <span class="n">block</span><span class="o">=</span><span class="n">ConvBnReluMaxPool</span><span class="p">,</span>
-                               <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-
-        <span class="c1"># construct the decoder</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">decoder</span> <span class="o">=</span> <span class="n">Decoder</span><span class="p">(</span><span class="n">filters</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">filters</span><span class="p">,</span> <span class="n">block</span><span class="o">=</span><span class="n">ConvBnReluMaxUnpool</span><span class="p">,</span>
-                               <span class="n">skip</span><span class="o">=</span><span class="n">skip</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-
-        <span class="c1"># construct the classifier</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">classifier</span> <span class="o">=</span> <span class="n">Conv2dSame</span><span class="p">(</span><span class="n">in_channels</span><span class="o">=</span><span class="n">filters</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
-                                     <span class="n">out_channels</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">nclasses</span><span class="p">,</span>
-                                     <span class="n">kernel_size</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
-
-<div class="viewcode-block" id="UNet.forward"><a class="viewcode-back" href="../../source/core.html#core.models.UNet.forward">[docs]</a>    <span class="k">def</span> <span class="nf">forward</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Forward propagation of U-Net.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        x : `torch.Tensor`</span>
-<span class="sd">            The input image, shape=(batch_size, channels, height, width).</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        y : &#39;torch.tensor&#39;</span>
-<span class="sd">            The classified image, shape=(batch_size, height, width).</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># forward pass: encoder</span>
-        <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">encoder</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
-
-        <span class="c1"># forward pass: decoder</span>
-        <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">decoder</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">encoder</span><span class="o">.</span><span class="n">cache</span><span class="p">)</span>
-
-        <span class="c1"># clear intermediate outputs</span>
-        <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">encoder</span><span class="o">.</span><span class="n">cache</span>
-
-        <span class="c1"># classification</span>
-        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">classifier</span><span class="p">(</span><span class="n">x</span><span class="p">)</span></div></div>
-
-
-<div class="viewcode-block" id="SupportedModels"><a class="viewcode-back" href="../../source/core.html#core.models.SupportedModels">[docs]</a><span class="k">class</span> <span class="nc">SupportedModels</span><span class="p">(</span><span class="n">enum</span><span class="o">.</span><span class="n">Enum</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Names and corresponding classes of the implemented models.&quot;&quot;&quot;</span>
-
-    <span class="n">Unet</span> <span class="o">=</span> <span class="n">UNet</span></div>
-
-
-<div class="viewcode-block" id="SupportedOptimizers"><a class="viewcode-back" href="../../source/core.html#core.models.SupportedOptimizers">[docs]</a><span class="k">class</span> <span class="nc">SupportedOptimizers</span><span class="p">(</span><span class="n">enum</span><span class="o">.</span><span class="n">Enum</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Names and corresponding classes of the tested optimizers.&quot;&quot;&quot;</span>
-
-    <span class="n">Adam</span> <span class="o">=</span> <span class="n">optim</span><span class="o">.</span><span class="n">Adam</span></div>
-
-
-<div class="viewcode-block" id="SupportedLossFunctions"><a class="viewcode-back" href="../../source/core.html#core.models.SupportedLossFunctions">[docs]</a><span class="k">class</span> <span class="nc">SupportedLossFunctions</span><span class="p">(</span><span class="n">enum</span><span class="o">.</span><span class="n">Enum</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Names and corresponding classes of the tested loss functions.&quot;&quot;&quot;</span>
-
-    <span class="n">CrossEntropy</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">CrossEntropyLoss</span></div>
-</pre></div>
-
-           </div>
-           
-          </div>
-          <footer>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/_modules/core/predict.html b/docs/_build/html/_modules/core/predict.html
deleted file mode 100644
index b8c6d48..0000000
--- a/docs/_build/html/_modules/core/predict.html
+++ /dev/null
@@ -1,504 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>core.predict &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
-        <script src="../../_static/jquery.js"></script>
-        <script src="../../_static/underscore.js"></script>
-        <script src="../../_static/doctools.js"></script>
-        <script src="../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul>
-<li class="toctree-l1"><a class="reference internal" href="../../source/requirements.html">Requirements</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/api.html">API Reference</a></li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../../index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-          <li><a href="../index.html">Module code</a> &raquo;</li>
-        
-      <li>core.predict</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <h1>Source code for core.predict</h1><div class="highlight"><pre>
-<span></span><span class="sd">&quot;&quot;&quot;Functions for model inference.</span>
-
-<span class="sd">License</span>
-<span class="sd">-------</span>
-
-<span class="sd">    Copyright (c) 2020 Daniel Frisinghelli</span>
-
-<span class="sd">    This source code is licensed under the GNU General Public License v3.</span>
-
-<span class="sd">    See the LICENSE file in the repository&#39;s root directory.</span>
-
-<span class="sd">&quot;&quot;&quot;</span>
-
-<span class="c1"># !/usr/bin/env python</span>
-<span class="c1"># -*- coding: utf-8 -*-</span>
-
-<span class="c1"># builtins</span>
-<span class="kn">import</span> <span class="nn">logging</span>
-
-<span class="c1"># externals</span>
-<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
-<span class="kn">import</span> <span class="nn">torch</span>
-<span class="kn">from</span> <span class="nn">torch.utils.data</span> <span class="kn">import</span> <span class="n">DataLoader</span>
-<span class="kn">from</span> <span class="nn">torch.utils.data.dataset</span> <span class="kn">import</span> <span class="n">Subset</span>
-<span class="kn">import</span> <span class="nn">torch.nn.functional</span> <span class="k">as</span> <span class="nn">F</span>
-
-<span class="c1"># locals</span>
-<span class="kn">from</span> <span class="nn">pysegcnn.core.utils</span> <span class="kn">import</span> <span class="n">reconstruct_scene</span><span class="p">,</span> <span class="n">accuracy_function</span>
-<span class="kn">from</span> <span class="nn">pysegcnn.core.graphics</span> <span class="kn">import</span> <span class="n">plot_sample</span>
-<span class="kn">from</span> <span class="nn">pysegcnn.core.split</span> <span class="kn">import</span> <span class="n">RandomSubset</span><span class="p">,</span> <span class="n">SceneSubset</span>
-
-<span class="c1"># module level logger</span>
-<span class="n">LOGGER</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
-
-
-<span class="k">def</span> <span class="nf">_get_scene_tiles</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="n">scene_id</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Return the tiles of the scene with id = ``scene_id``.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    ds : `pysegcnn.core.split.RandomSubset` or</span>
-<span class="sd">    `pysegcnn.core.split.SceneSubset`</span>
-<span class="sd">        An instance of `~pysegcnn.core.split.RandomSubset` or</span>
-<span class="sd">        `~pysegcnn.core.split.SceneSubset`.</span>
-<span class="sd">    scene_id : `str`</span>
-<span class="sd">        A valid scene identifier.</span>
-
-<span class="sd">    Raises</span>
-<span class="sd">    ------</span>
-<span class="sd">    ValueError</span>
-<span class="sd">        Raised if ``scene_id`` is not a valid scene identifier for the dataset</span>
-<span class="sd">        ``ds``.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    indices : `list` [`int`]</span>
-<span class="sd">        List of indices of the tiles from scene with id ``scene_id`` in ``ds``.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># check if the scene id is valid</span>
-    <span class="n">scene_meta</span> <span class="o">=</span> <span class="n">ds</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">parse_scene_id</span><span class="p">(</span><span class="n">scene_id</span><span class="p">)</span>
-    <span class="k">if</span> <span class="n">scene_meta</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1"> is not a valid scene identifier&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">scene_id</span><span class="p">))</span>
-
-    <span class="c1"># iterate over the scenes of the dataset</span>
-    <span class="n">indices</span> <span class="o">=</span> <span class="p">[]</span>
-    <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">scene</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">ds</span><span class="o">.</span><span class="n">scenes</span><span class="p">):</span>
-        <span class="c1"># if the scene id matches a given id, save the index of the scene</span>
-        <span class="k">if</span> <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="n">scene_id</span><span class="p">:</span>
-            <span class="n">indices</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
-
-    <span class="k">return</span> <span class="n">indices</span>
-
-
-<div class="viewcode-block" id="predict_samples"><a class="viewcode-back" href="../../source/core.html#core.predict.predict_samples">[docs]</a><span class="k">def</span> <span class="nf">predict_samples</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="n">model</span><span class="p">,</span> <span class="n">cm</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">plot</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Classify each sample in ``ds`` with model ``model``.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    ds : `pysegcnn.core.split.RandomSubset` or</span>
-<span class="sd">    `pysegcnn.core.split.SceneSubset`</span>
-<span class="sd">        An instance of `~pysegcnn.core.split.RandomSubset` or</span>
-<span class="sd">        `~pysegcnn.core.split.SceneSubset`.</span>
-<span class="sd">    model : `pysegcnn.core.models.Network`</span>
-<span class="sd">        An instance of `~pysegcnn.core.models.Network`.</span>
-<span class="sd">    cm : `bool`, optional</span>
-<span class="sd">        Whether to compute the confusion matrix. The default is False.</span>
-<span class="sd">    plot : `bool`, optional</span>
-<span class="sd">        Whether to plot a false color composite, ground truth and model</span>
-<span class="sd">        prediction for each sample. The default is False.</span>
-<span class="sd">    **kwargs</span>
-<span class="sd">        Additional keyword arguments passed to</span>
-<span class="sd">        `pysegcnn.core.graphics.plot_sample`.</span>
-
-<span class="sd">    Raises</span>
-<span class="sd">    ------</span>
-<span class="sd">    TypeError</span>
-<span class="sd">        Raised if ``ds`` is not an instance of</span>
-<span class="sd">        `~pysegcnn.core.split.RandomSubset` or</span>
-<span class="sd">        `~pysegcnn.core.split.SceneSubset`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    output : `dict`</span>
-<span class="sd">        Output dictionary with keys:</span>
-<span class="sd">            ``&#39;input&#39;``</span>
-<span class="sd">                Model input data</span>
-<span class="sd">            ``&#39;labels&#39;``</span>
-<span class="sd">                The ground truth</span>
-<span class="sd">            ``&#39;prediction&#39;``</span>
-<span class="sd">                Model prediction</span>
-<span class="sd">    conf_mat : `numpy.ndarray`</span>
-<span class="sd">        The confusion matrix. Note that the confusion matrix ``conf_mat`` is</span>
-<span class="sd">        only computed if ``cm`` = True.</span>
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># check whether the dataset is a valid subset, i.e.</span>
-    <span class="c1"># an instance of pysegcnn.core.split.SceneSubset or</span>
-    <span class="c1"># an instance of pysegcnn.core.split.RandomSubset</span>
-    <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="n">RandomSubset</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="n">SceneSubset</span><span class="p">):</span>
-        <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;ds should be an instance of </span><span class="si">{}</span><span class="s1"> or of </span><span class="si">{}</span><span class="s1">.&#39;</span>
-                        <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">RandomSubset</span><span class="p">),</span> <span class="nb">repr</span><span class="p">(</span><span class="n">SceneSubset</span><span class="p">)))</span>
-
-    <span class="c1"># the device to compute on, use gpu if available</span>
-    <span class="n">device</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">device</span><span class="p">(</span><span class="s2">&quot;cuda:0&quot;</span> <span class="k">if</span> <span class="n">torch</span><span class="o">.</span><span class="n">cuda</span><span class="o">.</span><span class="n">is_available</span><span class="p">()</span> <span class="k">else</span> <span class="s2">&quot;cpu&quot;</span><span class="p">)</span>
-
-    <span class="c1"># set the model to evaluation mode</span>
-    <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Setting model to evaluation mode ...&#39;</span><span class="p">)</span>
-    <span class="n">model</span><span class="o">.</span><span class="n">eval</span><span class="p">()</span>
-    <span class="n">model</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="n">device</span><span class="p">)</span>
-
-    <span class="c1"># base filename for each sample</span>
-    <span class="n">fname</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">state_file</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;.pt&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
-
-    <span class="c1"># initialize confusion matrix</span>
-    <span class="n">conf_mat</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">shape</span><span class="o">=</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">nclasses</span><span class="p">,</span> <span class="n">model</span><span class="o">.</span><span class="n">nclasses</span><span class="p">))</span>
-
-    <span class="c1"># create the dataloader</span>
-    <span class="n">dataloader</span> <span class="o">=</span> <span class="n">DataLoader</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="n">batch_size</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">shuffle</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">drop_last</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-
-    <span class="c1"># iterate over the samples and plot inputs, ground truth and</span>
-    <span class="c1"># model predictions</span>
-    <span class="n">output</span> <span class="o">=</span> <span class="p">{}</span>
-    <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Predicting samples of the </span><span class="si">{}</span><span class="s1"> dataset ...&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ds</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
-    <span class="k">for</span> <span class="n">batch</span><span class="p">,</span> <span class="p">(</span><span class="n">inputs</span><span class="p">,</span> <span class="n">labels</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">dataloader</span><span class="p">):</span>
-
-        <span class="c1"># send inputs and labels to device</span>
-        <span class="n">inputs</span> <span class="o">=</span> <span class="n">inputs</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="n">device</span><span class="p">)</span>
-        <span class="n">labels</span> <span class="o">=</span> <span class="n">labels</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="n">device</span><span class="p">)</span>
-
-        <span class="c1"># compute model predictions</span>
-        <span class="k">with</span> <span class="n">torch</span><span class="o">.</span><span class="n">no_grad</span><span class="p">():</span>
-            <span class="n">prd</span> <span class="o">=</span> <span class="n">F</span><span class="o">.</span><span class="n">softmax</span><span class="p">(</span><span class="n">model</span><span class="p">(</span><span class="n">inputs</span><span class="p">),</span> <span class="n">dim</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">argmax</span><span class="p">(</span><span class="n">dim</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">squeeze</span><span class="p">()</span>
-
-        <span class="c1"># store output for current batch</span>
-        <span class="n">output</span><span class="p">[</span><span class="n">batch</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;input&#39;</span><span class="p">:</span> <span class="n">inputs</span><span class="p">,</span> <span class="s1">&#39;labels&#39;</span><span class="p">:</span> <span class="n">labels</span><span class="p">,</span> <span class="s1">&#39;prediction&#39;</span><span class="p">:</span> <span class="n">prd</span><span class="p">}</span>
-
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Sample: </span><span class="si">{:d}</span><span class="s1">/</span><span class="si">{:d}</span><span class="s1">, Accuracy: </span><span class="si">{:.2f}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
-            <span class="n">batch</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">dataloader</span><span class="p">),</span> <span class="n">accuracy_function</span><span class="p">(</span><span class="n">prd</span><span class="p">,</span> <span class="n">labels</span><span class="p">)))</span>
-
-        <span class="c1"># update confusion matrix</span>
-        <span class="k">if</span> <span class="n">cm</span><span class="p">:</span>
-            <span class="k">for</span> <span class="n">ytrue</span><span class="p">,</span> <span class="n">ypred</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">labels</span><span class="o">.</span><span class="n">view</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span> <span class="n">prd</span><span class="o">.</span><span class="n">view</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)):</span>
-                <span class="n">conf_mat</span><span class="p">[</span><span class="n">ytrue</span><span class="o">.</span><span class="n">long</span><span class="p">(),</span> <span class="n">ypred</span><span class="o">.</span><span class="n">long</span><span class="p">()]</span> <span class="o">+=</span> <span class="mi">1</span>
-
-        <span class="c1"># save plot of current batch to disk</span>
-        <span class="k">if</span> <span class="n">plot</span><span class="p">:</span>
-
-            <span class="c1"># plot inputs, ground truth and model predictions</span>
-            <span class="n">sname</span> <span class="o">=</span> <span class="n">fname</span> <span class="o">+</span> <span class="s1">&#39;_</span><span class="si">{}</span><span class="s1">_</span><span class="si">{}</span><span class="s1">.pt&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ds</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">batch</span><span class="p">)</span>
-            <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plot_sample</span><span class="p">(</span><span class="n">inputs</span><span class="o">.</span><span class="n">numpy</span><span class="p">()</span><span class="o">.</span><span class="n">clip</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-                                  <span class="n">ds</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">use_bands</span><span class="p">,</span>
-                                  <span class="n">ds</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">labels</span><span class="p">,</span>
-                                  <span class="n">y</span><span class="o">=</span><span class="n">labels</span><span class="p">,</span>
-                                  <span class="n">y_pred</span><span class="o">=</span><span class="n">prd</span><span class="p">,</span>
-                                  <span class="n">state</span><span class="o">=</span><span class="n">sname</span><span class="p">,</span>
-                                  <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-
-    <span class="k">return</span> <span class="n">output</span><span class="p">,</span> <span class="n">conf_mat</span></div>
-
-
-<div class="viewcode-block" id="predict_scenes"><a class="viewcode-back" href="../../source/core.html#core.predict.predict_scenes">[docs]</a><span class="k">def</span> <span class="nf">predict_scenes</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="n">model</span><span class="p">,</span> <span class="n">scene_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">cm</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">plot</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Classify each scene in ``ds`` with model ``model``.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    ds : `pysegcnn.core.split.SceneSubset`</span>
-<span class="sd">        An instance of `~pysegcnn.core.split.SceneSubset`.</span>
-<span class="sd">    model : `pysegcnn.core.models.Network`</span>
-<span class="sd">        An instance of `~pysegcnn.core.models.Network`.</span>
-<span class="sd">    scene_id : `str` or `None`</span>
-<span class="sd">        A valid scene identifier.</span>
-<span class="sd">    cm : `bool`, optional</span>
-<span class="sd">        Whether to compute the confusion matrix. The default is False.</span>
-<span class="sd">    plot : `bool`, optional</span>
-<span class="sd">        Whether to plot a false color composite, ground truth and model</span>
-<span class="sd">        prediction for each scene. The default is False.</span>
-<span class="sd">    **kwargs</span>
-<span class="sd">        Additional keyword arguments passed to</span>
-<span class="sd">        `pysegcnn.core.graphics.plot_sample`.</span>
-
-<span class="sd">    Raises</span>
-<span class="sd">    ------</span>
-<span class="sd">    TypeError</span>
-<span class="sd">        Raised if ``ds`` is not an instance of</span>
-<span class="sd">        `~pysegcnn.core.split.SceneSubset`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    output : `dict`</span>
-<span class="sd">        Output dictionary with keys:</span>
-<span class="sd">            ``&#39;input&#39;``</span>
-<span class="sd">                Model input data</span>
-<span class="sd">            ``&#39;labels&#39;``</span>
-<span class="sd">                The ground truth</span>
-<span class="sd">            ``&#39;prediction&#39;``</span>
-<span class="sd">                Model prediction</span>
-<span class="sd">    conf_mat : `numpy.ndarray`</span>
-<span class="sd">        The confusion matrix. Note that the confusion matrix ``conf_mat`` is</span>
-<span class="sd">        only computed if ``cm`` = True.</span>
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># check whether the dataset is a valid subset, i.e. an instance of</span>
-    <span class="c1"># pysegcnn.core.split.SceneSubset</span>
-    <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="n">SceneSubset</span><span class="p">):</span>
-        <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;ds should be an instance of </span><span class="si">{}</span><span class="s1">.&#39;</span>
-                        <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">SceneSubset</span><span class="p">)))</span>
-
-    <span class="c1"># the device to compute on, use gpu if available</span>
-    <span class="n">device</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">device</span><span class="p">(</span><span class="s2">&quot;cuda:0&quot;</span> <span class="k">if</span> <span class="n">torch</span><span class="o">.</span><span class="n">cuda</span><span class="o">.</span><span class="n">is_available</span><span class="p">()</span> <span class="k">else</span> <span class="s2">&quot;cpu&quot;</span><span class="p">)</span>
-
-    <span class="c1"># set the model to evaluation mode</span>
-    <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Setting model to evaluation mode ...&#39;</span><span class="p">)</span>
-    <span class="n">model</span><span class="o">.</span><span class="n">eval</span><span class="p">()</span>
-    <span class="n">model</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="n">device</span><span class="p">)</span>
-
-    <span class="c1"># base filename for each scene</span>
-    <span class="n">fname</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">state_file</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;.pt&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
-
-    <span class="c1"># initialize confusion matrix</span>
-    <span class="n">conf_mat</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">shape</span><span class="o">=</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">nclasses</span><span class="p">,</span> <span class="n">model</span><span class="o">.</span><span class="n">nclasses</span><span class="p">))</span>
-
-    <span class="c1"># check whether a scene id is provided</span>
-    <span class="k">if</span> <span class="n">scene_id</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-        <span class="n">scene_ids</span> <span class="o">=</span> <span class="n">ds</span><span class="o">.</span><span class="n">ids</span>
-    <span class="k">else</span><span class="p">:</span>
-        <span class="c1"># the name of the selected scene</span>
-        <span class="n">scene_ids</span> <span class="o">=</span> <span class="p">[</span><span class="n">scene_id</span><span class="p">]</span>
-
-    <span class="c1"># iterate over the scenes</span>
-    <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Predicting scenes of the </span><span class="si">{}</span><span class="s1"> dataset ...&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ds</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
-    <span class="n">output</span> <span class="o">=</span> <span class="p">{}</span>
-    <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">sid</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">scene_ids</span><span class="p">):</span>
-
-        <span class="c1"># filename for the current scene</span>
-        <span class="n">sname</span> <span class="o">=</span> <span class="n">fname</span> <span class="o">+</span> <span class="s1">&#39;_</span><span class="si">{}</span><span class="s1">_</span><span class="si">{}</span><span class="s1">.pt&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ds</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">sid</span><span class="p">)</span>
-
-        <span class="c1"># get the indices of the tiles of the scene</span>
-        <span class="n">indices</span> <span class="o">=</span> <span class="n">_get_scene_tiles</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="n">sid</span><span class="p">)</span>
-        <span class="n">indices</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
-
-        <span class="c1"># create a subset of the dataset</span>
-        <span class="n">scene_ds</span> <span class="o">=</span> <span class="n">Subset</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="n">indices</span><span class="p">)</span>
-
-        <span class="c1"># create the dataloader</span>
-        <span class="n">scene_dl</span> <span class="o">=</span> <span class="n">DataLoader</span><span class="p">(</span><span class="n">scene_ds</span><span class="p">,</span> <span class="n">batch_size</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">scene_ds</span><span class="p">),</span>
-                              <span class="n">shuffle</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">drop_last</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-
-        <span class="c1"># predict the current scene</span>
-        <span class="k">for</span> <span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">inp</span><span class="p">,</span> <span class="n">lab</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">scene_dl</span><span class="p">):</span>
-
-            <span class="c1"># send inputs and labels to device</span>
-            <span class="n">inp</span> <span class="o">=</span> <span class="n">inp</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="n">device</span><span class="p">)</span>
-            <span class="n">lab</span> <span class="o">=</span> <span class="n">lab</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="n">device</span><span class="p">)</span>
-
-            <span class="c1"># apply forward pass: model prediction</span>
-            <span class="k">with</span> <span class="n">torch</span><span class="o">.</span><span class="n">no_grad</span><span class="p">():</span>
-                <span class="n">prd</span> <span class="o">=</span> <span class="n">F</span><span class="o">.</span><span class="n">softmax</span><span class="p">(</span><span class="n">model</span><span class="p">(</span><span class="n">inp</span><span class="p">),</span> <span class="n">dim</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">argmax</span><span class="p">(</span><span class="n">dim</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">squeeze</span><span class="p">()</span>
-
-            <span class="c1"># update confusion matrix</span>
-            <span class="k">if</span> <span class="n">cm</span><span class="p">:</span>
-                <span class="k">for</span> <span class="n">ytrue</span><span class="p">,</span> <span class="n">ypred</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">lab</span><span class="o">.</span><span class="n">view</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span> <span class="n">prd</span><span class="o">.</span><span class="n">view</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)):</span>
-                    <span class="n">conf_mat</span><span class="p">[</span><span class="n">ytrue</span><span class="o">.</span><span class="n">long</span><span class="p">(),</span> <span class="n">ypred</span><span class="o">.</span><span class="n">long</span><span class="p">()]</span> <span class="o">+=</span> <span class="mi">1</span>
-
-        <span class="c1"># reconstruct the entire scene</span>
-        <span class="n">inputs</span> <span class="o">=</span> <span class="n">reconstruct_scene</span><span class="p">(</span><span class="n">inp</span><span class="p">)</span>
-        <span class="n">labels</span> <span class="o">=</span> <span class="n">reconstruct_scene</span><span class="p">(</span><span class="n">lab</span><span class="p">)</span>
-        <span class="n">prdtcn</span> <span class="o">=</span> <span class="n">reconstruct_scene</span><span class="p">(</span><span class="n">prd</span><span class="p">)</span>
-
-        <span class="c1"># print progress</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Scene </span><span class="si">{:d}</span><span class="s1">/</span><span class="si">{:d}</span><span class="s1">, Id: </span><span class="si">{}</span><span class="s1">, Accuracy: </span><span class="si">{:.2f}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
-            <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">scene_ids</span><span class="p">),</span> <span class="n">sid</span><span class="p">,</span> <span class="n">accuracy_function</span><span class="p">(</span><span class="n">prdtcn</span><span class="p">,</span> <span class="n">labels</span><span class="p">)))</span>
-
-        <span class="c1"># save outputs to dictionary</span>
-        <span class="n">output</span><span class="p">[</span><span class="n">sid</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;input&#39;</span><span class="p">:</span> <span class="n">inputs</span><span class="p">,</span> <span class="s1">&#39;labels&#39;</span><span class="p">:</span> <span class="n">labels</span><span class="p">,</span> <span class="s1">&#39;prediction&#39;</span><span class="p">:</span> <span class="n">prdtcn</span><span class="p">}</span>
-
-        <span class="c1"># plot current scene</span>
-        <span class="k">if</span> <span class="n">plot</span><span class="p">:</span>
-            <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plot_sample</span><span class="p">(</span><span class="n">inputs</span><span class="o">.</span><span class="n">clip</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-                                  <span class="n">ds</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">use_bands</span><span class="p">,</span>
-                                  <span class="n">ds</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">labels</span><span class="p">,</span>
-                                  <span class="n">y</span><span class="o">=</span><span class="n">labels</span><span class="p">,</span>
-                                  <span class="n">y_pred</span><span class="o">=</span><span class="n">prdtcn</span><span class="p">,</span>
-                                  <span class="n">state</span><span class="o">=</span><span class="n">sname</span><span class="p">,</span>
-                                  <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-
-    <span class="k">return</span> <span class="n">output</span><span class="p">,</span> <span class="n">conf_mat</span></div>
-</pre></div>
-
-           </div>
-           
-          </div>
-          <footer>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/_modules/core/split.html b/docs/_build/html/_modules/core/split.html
deleted file mode 100644
index 4521038..0000000
--- a/docs/_build/html/_modules/core/split.html
+++ /dev/null
@@ -1,885 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>core.split &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
-        <script src="../../_static/jquery.js"></script>
-        <script src="../../_static/underscore.js"></script>
-        <script src="../../_static/doctools.js"></script>
-        <script src="../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul>
-<li class="toctree-l1"><a class="reference internal" href="../../source/requirements.html">Requirements</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/api.html">API Reference</a></li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../../index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-          <li><a href="../index.html">Module code</a> &raquo;</li>
-        
-      <li>core.split</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <h1>Source code for core.split</h1><div class="highlight"><pre>
-<span></span><span class="sd">&quot;&quot;&quot;Split the dataset into training, validation and test set.</span>
-
-<span class="sd">License</span>
-<span class="sd">-------</span>
-
-<span class="sd">    Copyright (c) 2020 Daniel Frisinghelli</span>
-
-<span class="sd">    This source code is licensed under the GNU General Public License v3.</span>
-
-<span class="sd">    See the LICENSE file in the repository&#39;s root directory.</span>
-
-<span class="sd">&quot;&quot;&quot;</span>
-
-<span class="c1"># !/usr/bin/env python</span>
-<span class="c1"># -*- coding: utf-8 -*-</span>
-
-<span class="c1"># builtins</span>
-<span class="kn">import</span> <span class="nn">datetime</span>
-<span class="kn">import</span> <span class="nn">enum</span>
-
-<span class="c1"># externals</span>
-<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
-<span class="kn">from</span> <span class="nn">torch.utils.data.dataset</span> <span class="kn">import</span> <span class="n">Subset</span>
-
-<span class="c1"># the names of the subsets</span>
-<span class="n">SUBSET_NAMES</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;train&#39;</span><span class="p">,</span> <span class="s1">&#39;valid&#39;</span><span class="p">,</span> <span class="s1">&#39;test&#39;</span><span class="p">]</span>
-
-
-<span class="k">def</span> <span class="nf">_ds_len</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="n">ratio</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Calcute number of samples in a dataset given a ratio.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    ds : `collections.Sized`</span>
-<span class="sd">        An object with a __len__ attribute.</span>
-<span class="sd">    ratio : `float`</span>
-<span class="sd">        A ratio to multiply with the length of ``ds``.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    n_samples: `int`</span>
-<span class="sd">        Length of ``ds`` * ``ratio``.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">round</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">ds</span><span class="p">)</span> <span class="o">*</span> <span class="n">ratio</span><span class="p">))</span>
-
-
-<div class="viewcode-block" id="random_tile_split"><a class="viewcode-back" href="../../source/core.html#core.split.random_tile_split">[docs]</a><span class="k">def</span> <span class="nf">random_tile_split</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="n">tvratio</span><span class="p">,</span> <span class="n">ttratio</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Randomly split the tiles of a dataset.</span>
-
-<span class="sd">    For each scene, the tiles of the scene can be distributed among the</span>
-<span class="sd">    training, validation and test set.</span>
-
-<span class="sd">    The parameters ``ttratio`` and ``tvratio`` control the size of the</span>
-<span class="sd">    training, validation and test datasets.</span>
-
-<span class="sd">    Test dataset size      : (1 - ``ttratio``) * len(``ds``)</span>
-<span class="sd">    Train dataset size     : ``ttratio`` * ``tvratio`` * len(``ds``)</span>
-<span class="sd">    Validation dataset size: ``ttratio`` * (1 - ``tvratio``) * len(``ds``)</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    ds : `pysegcnn.core.dataset.ImageDataset`</span>
-<span class="sd">        An instance of `~pysegcnn.core.dataset.ImageDataset`.</span>
-<span class="sd">    tvratio : `float`</span>
-<span class="sd">        The ratio of training data to validation data, e.g. ``tvratio`` = 0.8</span>
-<span class="sd">        means 80% training, 20% validation.</span>
-<span class="sd">    ttratio : `float`, optional</span>
-<span class="sd">        The ratio of training and validation data to test data, e.g.</span>
-<span class="sd">        ``ttratio`` = 0.6 means 60% for training and validation, 40% for</span>
-<span class="sd">        testing. The default is 1.</span>
-<span class="sd">    seed : `int`, optional</span>
-<span class="sd">        The random seed for reproducibility. The default is 0.</span>
-
-<span class="sd">    Raises</span>
-<span class="sd">    ------</span>
-<span class="sd">    AssertionError</span>
-<span class="sd">        Raised if the splits are not pairwise disjoint.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    subsets : `dict`</span>
-<span class="sd">        Subset dictionary with keys:</span>
-<span class="sd">            ``&#39;train&#39;``</span>
-<span class="sd">                dictionary containing the training scenes.</span>
-<span class="sd">            ``&#39;valid&#39;``</span>
-<span class="sd">                dictionary containing the validation scenes.</span>
-<span class="sd">            ``&#39;test&#39;``</span>
-<span class="sd">                dictionary containing the test scenes.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># set the random seed for reproducibility</span>
-    <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span><span class="n">seed</span><span class="p">)</span>
-
-    <span class="c1"># randomly permute indices to access dataset</span>
-    <span class="n">indices</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">permutation</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">ds</span><span class="p">))</span>
-
-    <span class="c1"># length of the training and validation dataset</span>
-    <span class="c1"># number of samples: (ttratio * len(ds))</span>
-    <span class="n">trav_len</span> <span class="o">=</span> <span class="n">_ds_len</span><span class="p">(</span><span class="n">indices</span><span class="p">,</span> <span class="n">ttratio</span><span class="p">)</span>
-    <span class="n">trav_indices</span> <span class="o">=</span> <span class="n">indices</span><span class="p">[:</span><span class="n">trav_len</span><span class="p">]</span>
-
-    <span class="c1"># length of the training dataset</span>
-    <span class="c1"># number of samples: (ttratio * tvratio * len(ds))</span>
-    <span class="n">train_len</span> <span class="o">=</span> <span class="n">_ds_len</span><span class="p">(</span><span class="n">trav_indices</span><span class="p">,</span> <span class="n">tvratio</span><span class="p">)</span>
-    <span class="n">train_ind</span> <span class="o">=</span> <span class="n">trav_indices</span><span class="p">[:</span><span class="n">train_len</span><span class="p">]</span>
-
-    <span class="c1"># length of the validation dataset</span>
-    <span class="c1"># number of samples: (ttratio * (1- tvratio) * len(ds))</span>
-    <span class="n">valid_ind</span> <span class="o">=</span> <span class="n">trav_indices</span><span class="p">[</span><span class="n">train_len</span><span class="p">:]</span>
-
-    <span class="c1"># length of the test dataset</span>
-    <span class="c1"># number of samples: ((1 - ttratio) * len(ds))</span>
-    <span class="n">test_ind</span> <span class="o">=</span> <span class="n">indices</span><span class="p">[</span><span class="n">trav_len</span><span class="p">:]</span>
-
-    <span class="c1"># get the tiles of the scenes of each dataset</span>
-    <span class="n">subsets</span> <span class="o">=</span> <span class="p">{}</span>
-    <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">dataset</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">([</span><span class="n">train_ind</span><span class="p">,</span> <span class="n">valid_ind</span><span class="p">,</span> <span class="n">test_ind</span><span class="p">]):</span>
-
-        <span class="c1"># store the indices and corresponding tiles of the current subset to</span>
-        <span class="c1"># dictionary</span>
-        <span class="n">subsets</span><span class="p">[</span><span class="n">SUBSET_NAMES</span><span class="p">[</span><span class="n">name</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">ds</span><span class="o">.</span><span class="n">scenes</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">dataset</span><span class="p">}</span>
-
-    <span class="c1"># check if the splits are disjoint</span>
-    <span class="k">assert</span> <span class="n">pairwise_disjoint</span><span class="p">([</span><span class="n">s</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">subsets</span><span class="o">.</span><span class="n">values</span><span class="p">()])</span>
-
-    <span class="k">return</span> <span class="n">subsets</span></div>
-
-
-<div class="viewcode-block" id="random_scene_split"><a class="viewcode-back" href="../../source/core.html#core.split.random_scene_split">[docs]</a><span class="k">def</span> <span class="nf">random_scene_split</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="n">tvratio</span><span class="p">,</span> <span class="n">ttratio</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Randomly split the tiles of a dataset.</span>
-
-<span class="sd">    For each scene, all the tiles of the scene are included in either the</span>
-<span class="sd">    training, validation or test set, respectively.</span>
-
-<span class="sd">    The parameters ``ttratio`` and ``tvratio`` control the size of the</span>
-<span class="sd">    training, validation and test datasets.</span>
-
-<span class="sd">    Test dataset size      : (1 - ``ttratio``) * len(``ds``)</span>
-<span class="sd">    Train dataset size     : ``ttratio`` * ``tvratio`` * len(``ds``)</span>
-<span class="sd">    Validation dataset size: ``ttratio`` * (1 - ``tvratio``) * len(``ds``)</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    ds : `pysegcnn.core.dataset.ImageDataset`</span>
-<span class="sd">        An instance of `~pysegcnn.core.dataset.ImageDataset`.</span>
-<span class="sd">    tvratio : `float`</span>
-<span class="sd">        The ratio of training data to validation data, e.g. ``tvratio`` = 0.8</span>
-<span class="sd">        means 80% training, 20% validation.</span>
-<span class="sd">    ttratio : `float`, optional</span>
-<span class="sd">        The ratio of training and validation data to test data, e.g.</span>
-<span class="sd">        ``ttratio`` = 0.6 means 60% for training and validation, 40% for</span>
-<span class="sd">        testing. The default is 1.</span>
-<span class="sd">    seed : `int`, optional</span>
-<span class="sd">        The random seed for reproducibility. The default is 0.</span>
-
-<span class="sd">    Raises</span>
-<span class="sd">    ------</span>
-<span class="sd">    AssertionError</span>
-<span class="sd">        Raised if the splits are not pairwise disjoint.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    subsets : `dict`</span>
-<span class="sd">        Subset dictionary with keys:</span>
-<span class="sd">            ``&#39;train&#39;``</span>
-<span class="sd">                dictionary containing the training scenes.</span>
-<span class="sd">            ``&#39;valid&#39;``</span>
-<span class="sd">                dictionary containing the validation scenes.</span>
-<span class="sd">            ``&#39;test&#39;``</span>
-<span class="sd">                dictionary containing the test scenes.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># set the random seed for reproducibility</span>
-    <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span><span class="n">seed</span><span class="p">)</span>
-
-    <span class="c1"># get the names of the scenes and generate random permutation</span>
-    <span class="n">scene_ids</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">permutation</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">unique</span><span class="p">([</span><span class="n">s</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">]</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">ds</span><span class="o">.</span><span class="n">scenes</span><span class="p">]))</span>
-
-    <span class="c1"># the training and validation scenes</span>
-    <span class="c1"># number of samples: (ttratio * nscenes)</span>
-    <span class="n">trav_len</span> <span class="o">=</span> <span class="n">_ds_len</span><span class="p">(</span><span class="n">scene_ids</span><span class="p">,</span> <span class="n">ttratio</span><span class="p">)</span>
-    <span class="n">trav_scenes</span> <span class="o">=</span> <span class="n">scene_ids</span><span class="p">[:</span><span class="n">trav_len</span><span class="p">]</span>
-
-    <span class="c1"># the training scenes</span>
-    <span class="c1"># number of samples: (ttratio * tvratio * nscenes)</span>
-    <span class="n">train_len</span> <span class="o">=</span> <span class="n">_ds_len</span><span class="p">(</span><span class="n">trav_scenes</span><span class="p">,</span> <span class="n">tvratio</span><span class="p">)</span>
-    <span class="n">train_scenes</span> <span class="o">=</span> <span class="n">trav_scenes</span><span class="p">[:</span><span class="n">train_len</span><span class="p">]</span>
-
-    <span class="c1"># the validation scenes</span>
-    <span class="c1"># number of samples: (ttratio * (1- tvratio) * nscenes)</span>
-    <span class="n">valid_scenes</span> <span class="o">=</span> <span class="n">trav_scenes</span><span class="p">[</span><span class="n">train_len</span><span class="p">:]</span>
-
-    <span class="c1"># the test scenes</span>
-    <span class="c1"># number of samples:((1 - ttratio) * nscenes)</span>
-    <span class="n">test_scenes</span> <span class="o">=</span> <span class="n">scene_ids</span><span class="p">[</span><span class="n">trav_len</span><span class="p">:]</span>
-
-    <span class="c1"># get the tiles of the scenes of each dataset</span>
-    <span class="n">subsets</span> <span class="o">=</span> <span class="p">{}</span>
-    <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">dataset</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">([</span><span class="n">train_scenes</span><span class="p">,</span> <span class="n">valid_scenes</span><span class="p">,</span> <span class="n">test_scenes</span><span class="p">]):</span>
-
-        <span class="c1"># store the indices and corresponding tiles of the current subset to</span>
-        <span class="c1"># dictionary</span>
-        <span class="n">subsets</span><span class="p">[</span><span class="n">SUBSET_NAMES</span><span class="p">[</span><span class="n">name</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">v</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">ds</span><span class="o">.</span><span class="n">scenes</span><span class="p">)</span>
-                                       <span class="k">if</span> <span class="n">v</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">]</span> <span class="ow">in</span> <span class="n">dataset</span><span class="p">}</span>
-
-    <span class="c1"># check if the splits are disjoint</span>
-    <span class="k">assert</span> <span class="n">pairwise_disjoint</span><span class="p">([</span><span class="n">s</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">subsets</span><span class="o">.</span><span class="n">values</span><span class="p">()])</span>
-
-    <span class="k">return</span> <span class="n">subsets</span></div>
-
-
-<span class="c1"># split the scenes of a dataset based on a date, useful for time series data</span>
-<span class="c1"># scenes before date build the training set, scenes after the date build the</span>
-<span class="c1"># validation set, the test set is empty</span>
-<div class="viewcode-block" id="date_scene_split"><a class="viewcode-back" href="../../source/core.html#core.split.date_scene_split">[docs]</a><span class="k">def</span> <span class="nf">date_scene_split</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="n">date</span><span class="p">,</span> <span class="n">dateformat</span><span class="o">=</span><span class="s1">&#39;%Y%m</span><span class="si">%d</span><span class="s1">&#39;</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Split the dataset based on a date.</span>
-
-<span class="sd">    Scenes before ``date`` build the training set, scenes after ``date`` build</span>
-<span class="sd">    the validation set, the test set is empty.</span>
-
-<span class="sd">    Useful for time series data.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    ds : `pysegcnn.core.dataset.ImageDataset`</span>
-<span class="sd">        An instance of `~pysegcnn.core.dataset.ImageDataset`.</span>
-<span class="sd">    date : `str`</span>
-<span class="sd">        A date.</span>
-<span class="sd">    dateformat : `str`, optional</span>
-<span class="sd">        The format of ``date``. ``dateformat`` is used by</span>
-<span class="sd">        `datetime.datetime.strptime&#39; to parse ``date`` to a `datetime.datetime`</span>
-<span class="sd">        object. The default is &#39;%Y%m%d&#39;.</span>
-
-<span class="sd">    Raises</span>
-<span class="sd">    ------</span>
-<span class="sd">    AssertionError</span>
-<span class="sd">        Raised if the splits are not pairwise disjoint.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    subsets : `dict`</span>
-<span class="sd">        Subset dictionary with keys:</span>
-<span class="sd">            ``&#39;train&#39;``</span>
-<span class="sd">                dictionary containing the training scenes.</span>
-<span class="sd">            ``&#39;valid&#39;``</span>
-<span class="sd">                dictionary containing the validation scenes.</span>
-<span class="sd">            ``&#39;test&#39;``</span>
-<span class="sd">                dictionary containing the test scenes, empty.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># convert date to datetime object</span>
-    <span class="n">date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">date</span><span class="p">,</span> <span class="n">dateformat</span><span class="p">)</span>
-
-    <span class="c1"># the training, validation and test scenes</span>
-    <span class="n">train_scenes</span> <span class="o">=</span> <span class="p">{</span><span class="n">i</span><span class="p">:</span> <span class="n">s</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">s</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">ds</span><span class="o">.</span><span class="n">scenes</span><span class="p">)</span> <span class="k">if</span> <span class="n">s</span><span class="p">[</span><span class="s1">&#39;date&#39;</span><span class="p">]</span> <span class="o">&lt;=</span> <span class="n">date</span><span class="p">}</span>
-    <span class="n">valid_scenes</span> <span class="o">=</span> <span class="p">{</span><span class="n">i</span><span class="p">:</span> <span class="n">s</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">s</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">ds</span><span class="o">.</span><span class="n">scenes</span><span class="p">)</span> <span class="k">if</span> <span class="n">s</span><span class="p">[</span><span class="s1">&#39;date&#39;</span><span class="p">]</span> <span class="o">&gt;</span> <span class="n">date</span><span class="p">}</span>
-    <span class="n">test_scenes</span> <span class="o">=</span> <span class="p">{}</span>
-
-    <span class="c1"># build the training and test datasets</span>
-    <span class="n">subsets</span> <span class="o">=</span> <span class="p">{}</span>
-    <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">scenes</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">([</span><span class="n">train_scenes</span><span class="p">,</span> <span class="n">valid_scenes</span><span class="p">,</span> <span class="n">test_scenes</span><span class="p">]):</span>
-
-        <span class="c1"># store the indices and corresponding tiles of the current subset to</span>
-        <span class="c1"># dictionary</span>
-        <span class="n">subsets</span><span class="p">[</span><span class="n">SUBSET_NAMES</span><span class="p">[</span><span class="n">name</span><span class="p">]]</span> <span class="o">=</span> <span class="n">scenes</span>
-
-    <span class="c1"># check if the splits are disjoint</span>
-    <span class="k">assert</span> <span class="n">pairwise_disjoint</span><span class="p">([</span><span class="n">s</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">subsets</span><span class="o">.</span><span class="n">values</span><span class="p">()])</span>
-
-    <span class="k">return</span> <span class="n">subsets</span></div>
-
-
-<div class="viewcode-block" id="pairwise_disjoint"><a class="viewcode-back" href="../../source/core.html#core.split.pairwise_disjoint">[docs]</a><span class="k">def</span> <span class="nf">pairwise_disjoint</span><span class="p">(</span><span class="n">sets</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Check if ``sets`` are pairwise disjoint.</span>
-
-<span class="sd">    Sets are pairwise disjoint if the length of their union equals the sum of</span>
-<span class="sd">    their lengths.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    sets : `list` [`collections.Sized`]</span>
-<span class="sd">        A list of sized objects.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    disjoint : `bool`</span>
-<span class="sd">        Whether the sets are pairwise disjoint.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="n">union</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="o">*</span><span class="n">sets</span><span class="p">)</span>
-    <span class="n">n</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="k">for</span> <span class="n">u</span> <span class="ow">in</span> <span class="n">sets</span><span class="p">)</span>
-    <span class="k">return</span> <span class="n">n</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">union</span><span class="p">)</span></div>
-
-
-<div class="viewcode-block" id="CustomSubset"><a class="viewcode-back" href="../../source/core.html#core.split.CustomSubset">[docs]</a><span class="k">class</span> <span class="nc">CustomSubset</span><span class="p">(</span><span class="n">Subset</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Custom subset inheriting `torch.utils.data.Subset`.&quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Representation of ``~pysegcnn.core.split.CustomSubset``.&quot;&quot;&quot;</span>
-        <span class="c1"># representation string</span>
-        <span class="n">fs</span> <span class="o">=</span> <span class="s1">&#39;- </span><span class="si">{}</span><span class="s1">: </span><span class="si">{:d}</span><span class="s1"> tiles (</span><span class="si">{:.2f}</span><span class="s1">%)&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">scenes</span><span class="p">),</span> <span class="mi">100</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">scenes</span><span class="p">)</span> <span class="o">/</span>
-            <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dataset</span><span class="p">))</span>
-
-        <span class="k">return</span> <span class="n">fs</span></div>
-
-
-<div class="viewcode-block" id="SceneSubset"><a class="viewcode-back" href="../../source/core.html#core.split.SceneSubset">[docs]</a><span class="k">class</span> <span class="nc">SceneSubset</span><span class="p">(</span><span class="n">CustomSubset</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;A custom subset for dataset splits where the scenes are preserved.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    ds : `pysegcnn.core.dataset.ImageDataset`</span>
-<span class="sd">        An instance of `~pysegcnn.core.dataset.ImageDataset`.</span>
-<span class="sd">    indices : `list` [`int`]</span>
-<span class="sd">        List of the subset indices to access ``ds``.</span>
-<span class="sd">    name : `str`</span>
-<span class="sd">        Name of the subset.</span>
-<span class="sd">    scenes : `list` [`dict`]</span>
-<span class="sd">        List of the subset tiles.</span>
-<span class="sd">    scene_ids : `list` or `numpy.ndarray`</span>
-<span class="sd">        Container of the scene ids.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ds</span><span class="p">,</span> <span class="n">indices</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">scenes</span><span class="p">,</span> <span class="n">scene_ids</span><span class="p">):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">dataset</span><span class="o">=</span><span class="n">ds</span><span class="p">,</span> <span class="n">indices</span><span class="o">=</span><span class="n">indices</span><span class="p">)</span>
-
-        <span class="c1"># the name of the subset</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
-
-        <span class="c1"># the scene in the subset</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">scenes</span> <span class="o">=</span> <span class="n">scenes</span>
-
-        <span class="c1"># the names of the scenes</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">ids</span> <span class="o">=</span> <span class="n">scene_ids</span></div>
-
-
-<div class="viewcode-block" id="RandomSubset"><a class="viewcode-back" href="../../source/core.html#core.split.RandomSubset">[docs]</a><span class="k">class</span> <span class="nc">RandomSubset</span><span class="p">(</span><span class="n">CustomSubset</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;A custom subset for random dataset splits.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    ds : `pysegcnn.core.dataset.ImageDataset`</span>
-<span class="sd">        An instance of `~pysegcnn.core.dataset.ImageDataset`.</span>
-<span class="sd">    indices : `list` [`int`]</span>
-<span class="sd">        List of the subset indices to access ``ds``.</span>
-<span class="sd">    name : `str`</span>
-<span class="sd">        Name of the subset.</span>
-<span class="sd">    scenes : `list` [`dict`]</span>
-<span class="sd">        List of the subset tiles.</span>
-<span class="sd">    scene_ids : `list` or `numpy.ndarray`</span>
-<span class="sd">        Container of the scene ids.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ds</span><span class="p">,</span> <span class="n">indices</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">scenes</span><span class="p">,</span> <span class="n">scene_ids</span><span class="p">):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">dataset</span><span class="o">=</span><span class="n">ds</span><span class="p">,</span> <span class="n">indices</span><span class="o">=</span><span class="n">indices</span><span class="p">)</span>
-
-        <span class="c1"># the name of the subset</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
-
-        <span class="c1"># the scene in the subset</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">scenes</span> <span class="o">=</span> <span class="n">scenes</span></div>
-
-
-<div class="viewcode-block" id="Split"><a class="viewcode-back" href="../../source/core.html#core.split.Split">[docs]</a><span class="k">class</span> <span class="nc">Split</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Generic class handling how ``ds`` is split.</span>
-
-<span class="sd">    Inherit `~pysegcnn.core.split.Split` and implement the</span>
-<span class="sd">    `~pysegcnn.core.split.Split.subsets` and</span>
-<span class="sd">    `~pysegcnn.core.split.Split.subset_type` method.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    ds : `pysegcnn.core.dataset.ImageDataset`</span>
-<span class="sd">        An instance of `~pysegcnn.core.dataset.ImageDataset`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ds</span><span class="p">):</span>
-
-        <span class="c1"># the dataset to split</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">ds</span> <span class="o">=</span> <span class="n">ds</span>
-
-<div class="viewcode-block" id="Split.split"><a class="viewcode-back" href="../../source/core.html#core.split.Split.split">[docs]</a>    <span class="k">def</span> <span class="nf">split</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Split dataset into training, validation and test set.</span>
-
-<span class="sd">        `~pysegcnn.core.split.Split.split` works only if</span>
-<span class="sd">        `~pysegcnn.core.split.Split.subsets` and</span>
-<span class="sd">        `~pysegcnn.core.split.Split.subset_type` are implemented.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># build the subsets</span>
-        <span class="n">ds_split</span> <span class="o">=</span> <span class="p">[]</span>
-        <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">sub</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">subsets</span><span class="p">()</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-
-            <span class="c1"># the scene identifiers of the current subset</span>
-            <span class="n">ids</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">unique</span><span class="p">([</span><span class="n">s</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">]</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">sub</span><span class="o">.</span><span class="n">values</span><span class="p">()])</span>
-
-            <span class="c1"># build the subset</span>
-            <span class="n">sbst</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">subset_type</span><span class="p">()(</span><span class="bp">self</span><span class="o">.</span><span class="n">ds</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="n">sub</span><span class="o">.</span><span class="n">keys</span><span class="p">()),</span> <span class="n">name</span><span class="p">,</span>
-                                      <span class="nb">list</span><span class="p">(</span><span class="n">sub</span><span class="o">.</span><span class="n">values</span><span class="p">()),</span> <span class="n">ids</span><span class="p">)</span>
-            <span class="n">ds_split</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sbst</span><span class="p">)</span>
-
-        <span class="k">return</span> <span class="n">ds_split</span></div>
-
-<div class="viewcode-block" id="Split.subsets"><a class="viewcode-back" href="../../source/core.html#core.split.Split.subsets">[docs]</a>    <span class="k">def</span> <span class="nf">subsets</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Define training, validation and test sets.</span>
-
-<span class="sd">        Wrapper method for</span>
-<span class="sd">        `pysegcnn.core.split.Split.random_tile_split`,</span>
-<span class="sd">        `pysegcnn.core.split.Split.random_scene_split` or</span>
-<span class="sd">        `pysegcnn.core.split.Split.date_scene_split`.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        NotImplementedError</span>
-<span class="sd">            Raised if `pysegcnn.core.split.Split` is not inherited.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        None.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">raise</span> <span class="ne">NotImplementedError</span></div>
-
-<div class="viewcode-block" id="Split.subset_type"><a class="viewcode-back" href="../../source/core.html#core.split.Split.subset_type">[docs]</a>    <span class="k">def</span> <span class="nf">subset_type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Define the type of each subset.</span>
-
-<span class="sd">        Wrapper method for</span>
-<span class="sd">        `pysegcnn.core.split.RandomSubset` or</span>
-<span class="sd">        `pysegcnn.core.split.SceneSubset`.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        NotImplementedError</span>
-<span class="sd">            Raised if `pysegcnn.core.split.Split` is not inherited.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        None.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">raise</span> <span class="ne">NotImplementedError</span></div></div>
-
-
-<div class="viewcode-block" id="DateSplit"><a class="viewcode-back" href="../../source/core.html#core.split.DateSplit">[docs]</a><span class="k">class</span> <span class="nc">DateSplit</span><span class="p">(</span><span class="n">Split</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Split the dataset based on a date.</span>
-
-<span class="sd">    Class wrapper for `pysegcnn.core.split.Split.date_scene_split`.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    ds : `pysegcnn.core.dataset.ImageDataset`</span>
-<span class="sd">        An instance of `~pysegcnn.core.dataset.ImageDataset`.</span>
-<span class="sd">    date : &#39;str&#39;</span>
-<span class="sd">        A date.</span>
-<span class="sd">    dateformat : &#39;str&#39;, optional</span>
-<span class="sd">        The format of ``date``. ``dateformat`` is used by</span>
-<span class="sd">        `datetime.datetime.strptime&#39; to parse ``date`` to a `datetime.datetime`</span>
-<span class="sd">        object. The default is &#39;%Y%m%d&#39;.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ds</span><span class="p">,</span> <span class="n">date</span><span class="p">,</span> <span class="n">dateformat</span><span class="p">):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">ds</span><span class="p">)</span>
-
-        <span class="c1"># the date to split the dataset</span>
-        <span class="c1"># before: training set</span>
-        <span class="c1"># after : validation set</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">date</span> <span class="o">=</span> <span class="n">date</span>
-
-        <span class="c1"># the format of the date</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">dateformat</span> <span class="o">=</span> <span class="n">dateformat</span>
-
-<div class="viewcode-block" id="DateSplit.subsets"><a class="viewcode-back" href="../../source/core.html#core.split.DateSplit.subsets">[docs]</a>    <span class="k">def</span> <span class="nf">subsets</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Wrap `pysegcnn.core.split.Split.date_scene_split`.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        subsets : `dict`</span>
-<span class="sd">            Subset dictionary with keys:</span>
-<span class="sd">                ``&#39;train&#39;``</span>
-<span class="sd">                    dictionary containing the training scenes.</span>
-<span class="sd">                ``&#39;valid&#39;``</span>
-<span class="sd">                    dictionary containing the validation scenes.</span>
-<span class="sd">                ``&#39;test&#39;``</span>
-<span class="sd">                    dictionary containing the test scenes, empty.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">date_scene_split</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ds</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">date</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dateformat</span><span class="p">)</span></div>
-
-<div class="viewcode-block" id="DateSplit.subset_type"><a class="viewcode-back" href="../../source/core.html#core.split.DateSplit.subset_type">[docs]</a>    <span class="k">def</span> <span class="nf">subset_type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Wrap `pysegcnn.core.split.SceneSubset`.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        SceneSubset : `pysegcnn.core.split.SceneSubset`</span>
-<span class="sd">            The subset type.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">SceneSubset</span></div></div>
-
-
-<div class="viewcode-block" id="RandomSplit"><a class="viewcode-back" href="../../source/core.html#core.split.RandomSplit">[docs]</a><span class="k">class</span> <span class="nc">RandomSplit</span><span class="p">(</span><span class="n">Split</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Randomly split the dataset.</span>
-
-<span class="sd">    Generic class for random dataset splits.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    ds : `pysegcnn.core.dataset.ImageDataset`</span>
-<span class="sd">        An instance of `~pysegcnn.core.dataset.ImageDataset`.</span>
-<span class="sd">    tvratio : `float`</span>
-<span class="sd">        The ratio of training data to validation data, e.g. ``tvratio`` = 0.8</span>
-<span class="sd">        means 80% training, 20% validation.</span>
-<span class="sd">    ttratio : `float`, optional</span>
-<span class="sd">        The ratio of training and validation data to test data, e.g.</span>
-<span class="sd">        ``ttratio`` = 0.6 means 60% for training and validation, 40% for</span>
-<span class="sd">        testing. The default is 1.</span>
-<span class="sd">    seed : `int`, optional</span>
-<span class="sd">        The random seed for reproducibility. The default is 0.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ds</span><span class="p">,</span> <span class="n">ttratio</span><span class="p">,</span> <span class="n">tvratio</span><span class="p">,</span> <span class="n">seed</span><span class="p">):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">ds</span><span class="p">)</span>
-
-        <span class="c1"># the training, validation and test set ratios</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">ttratio</span> <span class="o">=</span> <span class="n">ttratio</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">tvratio</span> <span class="o">=</span> <span class="n">tvratio</span>
-
-        <span class="c1"># the random seed: useful for reproducibility</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">seed</span> <span class="o">=</span> <span class="n">seed</span></div>
-
-
-<div class="viewcode-block" id="RandomTileSplit"><a class="viewcode-back" href="../../source/core.html#core.split.RandomTileSplit">[docs]</a><span class="k">class</span> <span class="nc">RandomTileSplit</span><span class="p">(</span><span class="n">RandomSplit</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Randomly split the dataset.</span>
-
-<span class="sd">    For each scene, the tiles of the scene can be distributed among the</span>
-<span class="sd">    training, validation and test set.</span>
-
-<span class="sd">    Class wrapper for `pysegcnn.core.split.Split.random_tile_split`.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    ds : `pysegcnn.core.dataset.ImageDataset`</span>
-<span class="sd">        An instance of `~pysegcnn.core.dataset.ImageDataset`.</span>
-<span class="sd">    tvratio : `float`</span>
-<span class="sd">        The ratio of training data to validation data, e.g. ``tvratio`` = 0.8</span>
-<span class="sd">        means 80% training, 20% validation.</span>
-<span class="sd">    ttratio : `float`, optional</span>
-<span class="sd">        The ratio of training and validation data to test data, e.g.</span>
-<span class="sd">        ``ttratio`` = 0.6 means 60% for training and validation, 40% for</span>
-<span class="sd">        testing. The default is 1.</span>
-<span class="sd">    seed : `int`, optional</span>
-<span class="sd">        The random seed for reproducibility. The default is 0.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ds</span><span class="p">,</span> <span class="n">ttratio</span><span class="p">,</span> <span class="n">tvratio</span><span class="p">,</span> <span class="n">seed</span><span class="p">):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="n">ttratio</span><span class="p">,</span> <span class="n">tvratio</span><span class="p">,</span> <span class="n">seed</span><span class="p">)</span>
-
-<div class="viewcode-block" id="RandomTileSplit.subsets"><a class="viewcode-back" href="../../source/core.html#core.split.RandomTileSplit.subsets">[docs]</a>    <span class="k">def</span> <span class="nf">subsets</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Wrap `pysegcnn.core.split.Split.random_tile_split`.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        subsets : `dict`</span>
-<span class="sd">            Subset dictionary with keys:</span>
-<span class="sd">                ``&#39;train&#39;``</span>
-<span class="sd">                    dictionary containing the training scenes.</span>
-<span class="sd">                ``&#39;valid&#39;``</span>
-<span class="sd">                    dictionary containing the validation scenes.</span>
-<span class="sd">                ``&#39;test&#39;``</span>
-<span class="sd">                    dictionary containing the test scenes, empty.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">random_tile_split</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ds</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tvratio</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ttratio</span><span class="p">,</span>
-                                 <span class="bp">self</span><span class="o">.</span><span class="n">seed</span><span class="p">)</span></div>
-
-<div class="viewcode-block" id="RandomTileSplit.subset_type"><a class="viewcode-back" href="../../source/core.html#core.split.RandomTileSplit.subset_type">[docs]</a>    <span class="k">def</span> <span class="nf">subset_type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Wrap `pysegcnn.core.split.RandomSubset`.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        SceneSubset : `pysegcnn.core.split.RandomSubset`</span>
-<span class="sd">            The subset type.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">RandomSubset</span></div></div>
-
-
-<div class="viewcode-block" id="RandomSceneSplit"><a class="viewcode-back" href="../../source/core.html#core.split.RandomSceneSplit">[docs]</a><span class="k">class</span> <span class="nc">RandomSceneSplit</span><span class="p">(</span><span class="n">RandomSplit</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Randomly split the dataset.</span>
-
-<span class="sd">    For each scene, all the tiles of the scene are included in either the</span>
-<span class="sd">    training, validation or test set, respectively.</span>
-
-<span class="sd">    Class wrapper for `pysegcnn.core.split.Split.random_scene_split`.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    ds : `pysegcnn.core.dataset.ImageDataset`</span>
-<span class="sd">        An instance of `~pysegcnn.core.dataset.ImageDataset`.</span>
-<span class="sd">    tvratio : `float`</span>
-<span class="sd">        The ratio of training data to validation data, e.g. ``tvratio`` = 0.8</span>
-<span class="sd">        means 80% training, 20% validation.</span>
-<span class="sd">    ttratio : `float`, optional</span>
-<span class="sd">        The ratio of training and validation data to test data, e.g.</span>
-<span class="sd">        ``ttratio`` = 0.6 means 60% for training and validation, 40% for</span>
-<span class="sd">        testing. The default is 1.</span>
-<span class="sd">    seed : `int`, optional</span>
-<span class="sd">        The random seed for reproducibility. The default is 0.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ds</span><span class="p">,</span> <span class="n">ttratio</span><span class="p">,</span> <span class="n">tvratio</span><span class="p">,</span> <span class="n">seed</span><span class="p">):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="n">ttratio</span><span class="p">,</span> <span class="n">tvratio</span><span class="p">,</span> <span class="n">seed</span><span class="p">)</span>
-
-<div class="viewcode-block" id="RandomSceneSplit.subsets"><a class="viewcode-back" href="../../source/core.html#core.split.RandomSceneSplit.subsets">[docs]</a>    <span class="k">def</span> <span class="nf">subsets</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Wrap `pysegcnn.core.split.Split.random_scene_split`.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        subsets : `dict`</span>
-<span class="sd">            Subset dictionary with keys:</span>
-<span class="sd">                ``&#39;train&#39;``</span>
-<span class="sd">                    dictionary containing the training scenes.</span>
-<span class="sd">                ``&#39;valid&#39;``</span>
-<span class="sd">                    dictionary containing the validation scenes.</span>
-<span class="sd">                ``&#39;test&#39;``</span>
-<span class="sd">                    dictionary containing the test scenes, empty.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">random_scene_split</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ds</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tvratio</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ttratio</span><span class="p">,</span>
-                                  <span class="bp">self</span><span class="o">.</span><span class="n">seed</span><span class="p">)</span></div>
-
-<div class="viewcode-block" id="RandomSceneSplit.subset_type"><a class="viewcode-back" href="../../source/core.html#core.split.RandomSceneSplit.subset_type">[docs]</a>    <span class="k">def</span> <span class="nf">subset_type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Wrap `pysegcnn.core.split.SceneSubset`.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        SceneSubset : `pysegcnn.core.split.SceneSubset`</span>
-<span class="sd">            The subset type.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">SceneSubset</span></div></div>
-
-
-<div class="viewcode-block" id="SupportedSplits"><a class="viewcode-back" href="../../source/core.html#core.split.SupportedSplits">[docs]</a><span class="k">class</span> <span class="nc">SupportedSplits</span><span class="p">(</span><span class="n">enum</span><span class="o">.</span><span class="n">Enum</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Names and corresponding classes of the implemented split modes.&quot;&quot;&quot;</span>
-
-    <span class="n">random</span> <span class="o">=</span> <span class="n">RandomTileSplit</span>
-    <span class="n">scene</span> <span class="o">=</span> <span class="n">RandomSceneSplit</span>
-    <span class="n">date</span> <span class="o">=</span> <span class="n">DateSplit</span></div>
-</pre></div>
-
-           </div>
-           
-          </div>
-          <footer>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/_modules/core/trainer.html b/docs/_build/html/_modules/core/trainer.html
deleted file mode 100644
index 1822007..0000000
--- a/docs/_build/html/_modules/core/trainer.html
+++ /dev/null
@@ -1,1760 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>core.trainer &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
-        <script src="../../_static/jquery.js"></script>
-        <script src="../../_static/underscore.js"></script>
-        <script src="../../_static/doctools.js"></script>
-        <script src="../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul>
-<li class="toctree-l1"><a class="reference internal" href="../../source/requirements.html">Requirements</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/api.html">API Reference</a></li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../../index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-          <li><a href="../index.html">Module code</a> &raquo;</li>
-        
-      <li>core.trainer</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <h1>Source code for core.trainer</h1><div class="highlight"><pre>
-<span></span><span class="sd">&quot;&quot;&quot;Model configuration and training.</span>
-
-<span class="sd">This module provides an end-to-end framework of dataclasses designed to train</span>
-<span class="sd">segmentation models on image datasets.</span>
-
-<span class="sd">See pysegcnn/main/train.py for a complete walkthrough.</span>
-
-<span class="sd">License</span>
-<span class="sd">-------</span>
-
-<span class="sd">    Copyright (c) 2020 Daniel Frisinghelli</span>
-
-<span class="sd">    This source code is licensed under the GNU General Public License v3.</span>
-
-<span class="sd">    See the LICENSE file in the repository&#39;s root directory.</span>
-
-<span class="sd">&quot;&quot;&quot;</span>
-
-<span class="c1"># !/usr/bin/env python</span>
-<span class="c1"># -*- coding: utf-8 -*-</span>
-
-<span class="c1"># builtins</span>
-<span class="kn">import</span> <span class="nn">dataclasses</span>
-<span class="kn">import</span> <span class="nn">pathlib</span>
-<span class="kn">import</span> <span class="nn">logging</span>
-<span class="kn">import</span> <span class="nn">datetime</span>
-
-<span class="c1"># externals</span>
-<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
-<span class="kn">import</span> <span class="nn">torch</span>
-<span class="kn">import</span> <span class="nn">torch.nn</span> <span class="k">as</span> <span class="nn">nn</span>
-<span class="kn">import</span> <span class="nn">torch.nn.functional</span> <span class="k">as</span> <span class="nn">F</span>
-<span class="kn">from</span> <span class="nn">torch.utils.data</span> <span class="kn">import</span> <span class="n">DataLoader</span><span class="p">,</span> <span class="n">Dataset</span>
-<span class="kn">from</span> <span class="nn">torch.optim</span> <span class="kn">import</span> <span class="n">Optimizer</span>
-
-<span class="c1"># locals</span>
-<span class="kn">from</span> <span class="nn">pysegcnn.core.dataset</span> <span class="kn">import</span> <span class="n">SupportedDatasets</span><span class="p">,</span> <span class="n">ImageDataset</span>
-<span class="kn">from</span> <span class="nn">pysegcnn.core.transforms</span> <span class="kn">import</span> <span class="n">Augment</span>
-<span class="kn">from</span> <span class="nn">pysegcnn.core.utils</span> <span class="kn">import</span> <span class="n">img2np</span><span class="p">,</span> <span class="n">item_in_enum</span><span class="p">,</span> <span class="n">accuracy_function</span>
-<span class="kn">from</span> <span class="nn">pysegcnn.core.split</span> <span class="kn">import</span> <span class="n">SupportedSplits</span>
-<span class="kn">from</span> <span class="nn">pysegcnn.core.models</span> <span class="kn">import</span> <span class="p">(</span><span class="n">SupportedModels</span><span class="p">,</span> <span class="n">SupportedOptimizers</span><span class="p">,</span>
-                                  <span class="n">SupportedLossFunctions</span><span class="p">,</span> <span class="n">Network</span><span class="p">)</span>
-<span class="kn">from</span> <span class="nn">pysegcnn.core.layers</span> <span class="kn">import</span> <span class="n">Conv2dSame</span>
-<span class="kn">from</span> <span class="nn">pysegcnn.main.config</span> <span class="kn">import</span> <span class="n">HERE</span>
-
-<span class="c1"># module level logger</span>
-<span class="n">LOGGER</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
-
-
-<div class="viewcode-block" id="BaseConfig"><a class="viewcode-back" href="../../source/core.html#core.trainer.BaseConfig">[docs]</a><span class="nd">@dataclasses</span><span class="o">.</span><span class="n">dataclass</span>
-<span class="k">class</span> <span class="nc">BaseConfig</span><span class="p">:</span>
-    <span class="sd">&quot;&quot;&quot;Base `dataclasses.dataclass` for each configuration.&quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="nf">__post_init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Check the type of each argument.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        TypeError</span>
-<span class="sd">            Raised if the conversion to the specified type of the argument</span>
-<span class="sd">            fails.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        None.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># check input types</span>
-        <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">dataclasses</span><span class="o">.</span><span class="n">fields</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-            <span class="c1"># the value of the current field</span>
-            <span class="n">value</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-
-            <span class="c1"># check whether the value is of the correct type</span>
-            <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">field</span><span class="o">.</span><span class="n">type</span><span class="p">):</span>
-                <span class="c1"># try to convert the value to the correct type</span>
-                <span class="k">try</span><span class="p">:</span>
-                    <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">field</span><span class="o">.</span><span class="n">type</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
-                <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
-                    <span class="c1"># raise an exception if the conversion fails</span>
-                    <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;Expected </span><span class="si">{}</span><span class="s1"> to be </span><span class="si">{}</span><span class="s1">, got </span><span class="si">{}</span><span class="s1">.&#39;</span>
-                                    <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">field</span><span class="o">.</span><span class="n">type</span><span class="p">,</span>
-                                            <span class="nb">type</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span></div>
-
-
-<div class="viewcode-block" id="DatasetConfig"><a class="viewcode-back" href="../../source/core.html#core.trainer.DatasetConfig">[docs]</a><span class="nd">@dataclasses</span><span class="o">.</span><span class="n">dataclass</span>
-<span class="k">class</span> <span class="nc">DatasetConfig</span><span class="p">(</span><span class="n">BaseConfig</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Dataset configuration class.</span>
-
-<span class="sd">    Instanciate a dataset.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    dataset_name : `str`</span>
-<span class="sd">        The name of the dataset.</span>
-<span class="sd">    root_dir : `pathlib.Path`</span>
-<span class="sd">        The root directory, path to the dataset.</span>
-<span class="sd">    bands : `list` [`str`]</span>
-<span class="sd">        A list of the spectral bands to use.</span>
-<span class="sd">    tile_size : `int`</span>
-<span class="sd">        The size of the tiles. Each scene is divided into square tiles of shape</span>
-<span class="sd">        (tile_size, tile_size).</span>
-<span class="sd">    gt_pattern : `str`</span>
-<span class="sd">        A pattern to match the ground truth naming convention. All directories</span>
-<span class="sd">        and subdirectories in ``root_dir`` are searched for files matching</span>
-<span class="sd">        ``gt_pattern``.</span>
-<span class="sd">    seed : `int`</span>
-<span class="sd">        The random seed. Used to split the dataset into training, validation</span>
-<span class="sd">        and test set. Useful for reproducibility. The default is 0.</span>
-<span class="sd">    sort : `bool`, optional</span>
-<span class="sd">        Whether to chronologically sort the samples. Useful for time series</span>
-<span class="sd">        data. The default is False.</span>
-<span class="sd">    transforms : `list` [`pysegcnn.core.split.Augment`], optional</span>
-<span class="sd">        List of `pysegcnn.core.split.Augment` instances. Each item in</span>
-<span class="sd">        ``transforms`` generates a distinct transformed version of the dataset.</span>
-<span class="sd">        The total dataset is composed of the original untransformed dataset</span>
-<span class="sd">        together with each transformed version of it.</span>
-<span class="sd">        If ``transforms`` = [], only the original dataset is used.</span>
-<span class="sd">        The default is [].</span>
-<span class="sd">    pad : `bool`, optional</span>
-<span class="sd">        Whether to center pad the input image. Set ``pad`` = True, if the</span>
-<span class="sd">        images are not evenly divisible by the ``tile_size``. The image data is</span>
-<span class="sd">        padded with a constant padding value of zero. For each image, the</span>
-<span class="sd">        corresponding ground truth image is padded with a &quot;no data&quot; label.</span>
-<span class="sd">        The default is False.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="n">dataset_name</span><span class="p">:</span> <span class="nb">str</span>
-    <span class="n">root_dir</span><span class="p">:</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span>
-    <span class="n">bands</span><span class="p">:</span> <span class="nb">list</span>
-    <span class="n">tile_size</span><span class="p">:</span> <span class="nb">int</span>
-    <span class="n">gt_pattern</span><span class="p">:</span> <span class="nb">str</span>
-    <span class="n">seed</span><span class="p">:</span> <span class="nb">int</span>
-    <span class="n">sort</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-    <span class="n">transforms</span><span class="p">:</span> <span class="nb">list</span> <span class="o">=</span> <span class="n">dataclasses</span><span class="o">.</span><span class="n">field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="nb">list</span><span class="p">)</span>
-    <span class="n">pad</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-
-    <span class="k">def</span> <span class="nf">__post_init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Check the type of each argument.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        ValueError</span>
-<span class="sd">            Raised if ``dataset_name`` is not supported.</span>
-<span class="sd">        FileNotFoundError</span>
-<span class="sd">            Raised if ``root_dir`` does not exist.</span>
-<span class="sd">        TypeError</span>
-<span class="sd">            Raised if not each item in ``transforms`` is an instance of</span>
-<span class="sd">            `pysegcnn.core.split.Augment` in case ``transforms`` is not empty.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        None.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># check input types</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">__post_init__</span><span class="p">()</span>
-
-        <span class="c1"># check whether the dataset is currently supported</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">dataset_class</span> <span class="o">=</span> <span class="n">item_in_enum</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dataset_name</span><span class="p">,</span> <span class="n">SupportedDatasets</span><span class="p">)</span>
-
-        <span class="c1"># check whether the root directory exists</span>
-        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">root_dir</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-            <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1"> does not exist.&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">root_dir</span><span class="p">))</span>
-
-        <span class="c1"># check whether the transformations inherit from the correct class</span>
-        <span class="k">if</span> <span class="ow">not</span> <span class="nb">all</span><span class="p">([</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">Augment</span><span class="p">)</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">transforms</span> <span class="k">if</span>
-                    <span class="bp">self</span><span class="o">.</span><span class="n">transforms</span><span class="p">]):</span>
-            <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;Each transformation is expected to be an instance&#39;</span>
-                            <span class="s1">&#39; of </span><span class="si">{}</span><span class="s1">.&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">Augment</span><span class="o">.</span><span class="vm">__module__</span><span class="p">,</span>
-                                                       <span class="n">Augment</span><span class="o">.</span><span class="vm">__name__</span><span class="p">])))</span>
-
-<div class="viewcode-block" id="DatasetConfig.init_dataset"><a class="viewcode-back" href="../../source/core.html#core.trainer.DatasetConfig.init_dataset">[docs]</a>    <span class="k">def</span> <span class="nf">init_dataset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Instanciate the dataset.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        dataset : `pysegcnn.core.dataset.ImageDataset`</span>
-<span class="sd">            An instance of `pysegcnn.core.dataset.ImageDataset`.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># instanciate the dataset</span>
-        <span class="n">dataset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dataset_class</span><span class="p">(</span>
-                    <span class="n">root_dir</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">root_dir</span><span class="p">),</span>
-                    <span class="n">use_bands</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">bands</span><span class="p">,</span>
-                    <span class="n">tile_size</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">tile_size</span><span class="p">,</span>
-                    <span class="n">seed</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">seed</span><span class="p">,</span>
-                    <span class="n">sort</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sort</span><span class="p">,</span>
-                    <span class="n">transforms</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">transforms</span><span class="p">,</span>
-                    <span class="n">pad</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">pad</span><span class="p">,</span>
-                    <span class="n">gt_pattern</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">gt_pattern</span>
-                    <span class="p">)</span>
-
-        <span class="k">return</span> <span class="n">dataset</span></div></div>
-
-
-<div class="viewcode-block" id="SplitConfig"><a class="viewcode-back" href="../../source/core.html#core.trainer.SplitConfig">[docs]</a><span class="nd">@dataclasses</span><span class="o">.</span><span class="n">dataclass</span>
-<span class="k">class</span> <span class="nc">SplitConfig</span><span class="p">(</span><span class="n">BaseConfig</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Dataset split configuration class.</span>
-
-<span class="sd">    Split a dataset into training, validation and test set.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    split_mode : `str`</span>
-<span class="sd">        The mode to split the dataset.</span>
-<span class="sd">    ttratio : `float`</span>
-<span class="sd">        The ratio of training and validation data to test data, e.g.</span>
-<span class="sd">        ``ttratio`` = 0.6 means 60% for training and validation, 40% for</span>
-<span class="sd">        testing.</span>
-<span class="sd">    tvratio : `float`</span>
-<span class="sd">        The ratio of training data to validation data, e.g. ``tvratio`` = 0.8</span>
-<span class="sd">        means 80% training, 20% validation.</span>
-<span class="sd">    date : `str`, optional</span>
-<span class="sd">        A date. Used if ``split_mode`` = &#39;date&#39;. The default is &#39;yyyymmdd&#39;.</span>
-<span class="sd">    dateformat : `str`, optional</span>
-<span class="sd">        The format of ``date``. ``dateformat`` is used by</span>
-<span class="sd">        `datetime.datetime.strptime&#39; to parse ``date`` to a `datetime.datetime`</span>
-<span class="sd">        object. The default is &#39;%Y%m%d&#39;.</span>
-<span class="sd">    drop : `float`, optional</span>
-<span class="sd">        Whether to drop samples (during training only) with a fraction of</span>
-<span class="sd">        pixels equal to the constant padding value &gt;= ``drop``. ``drop`` = 0</span>
-<span class="sd">        means, do not drop any samples. The default is 0.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="n">split_mode</span><span class="p">:</span> <span class="nb">str</span>
-    <span class="n">ttratio</span><span class="p">:</span> <span class="nb">float</span>
-    <span class="n">tvratio</span><span class="p">:</span> <span class="nb">float</span>
-    <span class="n">date</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;yyyymmdd&#39;</span>
-    <span class="n">dateformat</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;%Y%m</span><span class="si">%d</span><span class="s1">&#39;</span>
-    <span class="n">drop</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mi">0</span>
-
-    <span class="k">def</span> <span class="nf">__post_init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Check the type of each argument.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        ValueError</span>
-<span class="sd">            Raised if ``split_mode`` is not supported.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        None.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># check input types</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">__post_init__</span><span class="p">()</span>
-
-        <span class="c1"># check if the split mode is valid</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">split_class</span> <span class="o">=</span> <span class="n">item_in_enum</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">split_mode</span><span class="p">,</span> <span class="n">SupportedSplits</span><span class="p">)</span>
-
-    <span class="nd">@staticmethod</span>
-    <span class="k">def</span> <span class="nf">_drop_samples</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="n">drop_threshold</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Drop samples with a fraction of pixels equal to the padding value.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        ds : `pysegcnn.core.split.RandomSubset` or</span>
-<span class="sd">        `pysegcnn.core.split.SceneSubset`.</span>
-<span class="sd">            An instance of `pysegcnn.core.split.RandomSubset` or</span>
-<span class="sd">            `pysegcnn.core.split.SceneSubset`.</span>
-<span class="sd">        drop_threshold : `float`, optional</span>
-<span class="sd">            The threshold above which samples are dropped. ``drop_threshold`` =</span>
-<span class="sd">            1 means a sample is dropped, if all pixels are equal to the padding</span>
-<span class="sd">            value. ``drop_threshold`` = 0.8 means, drop a sample if 80% of the</span>
-<span class="sd">            pixels are equal to the padding value, etc. The default is 1.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        dropped : `list` [`dict`]</span>
-<span class="sd">            List of the dropped samples.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># iterate over the scenes returned by self.compose_scenes()</span>
-        <span class="n">dropped</span> <span class="o">=</span> <span class="p">[]</span>
-        <span class="k">for</span> <span class="n">pos</span><span class="p">,</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">ds</span><span class="o">.</span><span class="n">indices</span><span class="p">):</span>
-
-            <span class="c1"># the current scene</span>
-            <span class="n">s</span> <span class="o">=</span> <span class="n">ds</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">scenes</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
-
-            <span class="c1"># the current tile in the ground truth</span>
-            <span class="n">tile_gt</span> <span class="o">=</span> <span class="n">img2np</span><span class="p">(</span><span class="n">s</span><span class="p">[</span><span class="s1">&#39;gt&#39;</span><span class="p">],</span> <span class="n">ds</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">tile_size</span><span class="p">,</span> <span class="n">s</span><span class="p">[</span><span class="s1">&#39;tile&#39;</span><span class="p">],</span>
-                             <span class="n">ds</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">pad</span><span class="p">,</span> <span class="n">ds</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">cval</span><span class="p">)</span>
-
-            <span class="c1"># percent of pixels equal to the constant padding value</span>
-            <span class="n">npixels</span> <span class="o">=</span> <span class="p">(</span><span class="n">tile_gt</span><span class="p">[</span><span class="n">tile_gt</span> <span class="o">==</span> <span class="n">ds</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">cval</span><span class="p">]</span><span class="o">.</span><span class="n">size</span> <span class="o">/</span> <span class="n">tile_gt</span><span class="o">.</span><span class="n">size</span><span class="p">)</span>
-
-            <span class="c1"># drop samples where npixels &gt;= self.drop</span>
-            <span class="k">if</span> <span class="n">npixels</span> <span class="o">&gt;=</span> <span class="n">drop_threshold</span><span class="p">:</span>
-                <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Skipping scene </span><span class="si">{}</span><span class="s1">, tile </span><span class="si">{}</span><span class="s1">: </span><span class="si">{:.2f}</span><span class="s1">% padded pixels&#39;</span>
-                            <span class="s1">&#39; ...&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">s</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">],</span> <span class="n">s</span><span class="p">[</span><span class="s1">&#39;tile&#39;</span><span class="p">],</span> <span class="n">npixels</span> <span class="o">*</span> <span class="mi">100</span><span class="p">))</span>
-                <span class="n">dropped</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
-                <span class="n">_</span> <span class="o">=</span> <span class="n">ds</span><span class="o">.</span><span class="n">indices</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">pos</span><span class="p">)</span>
-
-        <span class="k">return</span> <span class="n">dropped</span>
-
-<div class="viewcode-block" id="SplitConfig.train_val_test_split"><a class="viewcode-back" href="../../source/core.html#core.trainer.SplitConfig.train_val_test_split">[docs]</a>    <span class="k">def</span> <span class="nf">train_val_test_split</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ds</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Split ``ds`` into training, validation and test set.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        ds : `pysegcnn.core.dataset.ImageDataset`</span>
-<span class="sd">            An instance of `pysegcnn.core.dataset.ImageDataset`.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        TypeError</span>
-<span class="sd">            Raised if ``ds`` is not an instance of</span>
-<span class="sd">            `pysegcnn.core.dataset.ImageDataset`.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        train_ds : `pysegcnn.core.split.RandomSubset` or</span>
-<span class="sd">        `pysegcnn.core.split.SceneSubset`.</span>
-<span class="sd">            The training set.</span>
-<span class="sd">        valid_ds : `pysegcnn.core.split.RandomSubset` or</span>
-<span class="sd">        `pysegcnn.core.split.SceneSubset`.</span>
-<span class="sd">            The validation set.</span>
-<span class="sd">        test_ds : `pysegcnn.core.split.RandomSubset` or</span>
-<span class="sd">        `pysegcnn.core.split.SceneSubset`.</span>
-<span class="sd">            The test set.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="n">ImageDataset</span><span class="p">):</span>
-            <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;Expected &quot;ds&quot; to be </span><span class="si">{}</span><span class="s1">.&#39;</span>
-                            <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">ImageDataset</span><span class="o">.</span><span class="vm">__module__</span><span class="p">,</span>
-                                              <span class="n">ImageDataset</span><span class="o">.</span><span class="vm">__name__</span><span class="p">])))</span>
-
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">split_mode</span> <span class="o">==</span> <span class="s1">&#39;random&#39;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">split_mode</span> <span class="o">==</span> <span class="s1">&#39;scene&#39;</span><span class="p">:</span>
-            <span class="n">subset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">split_class</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span>
-                                      <span class="bp">self</span><span class="o">.</span><span class="n">ttratio</span><span class="p">,</span>
-                                      <span class="bp">self</span><span class="o">.</span><span class="n">tvratio</span><span class="p">,</span>
-                                      <span class="n">ds</span><span class="o">.</span><span class="n">seed</span><span class="p">)</span>
-
-        <span class="k">else</span><span class="p">:</span>
-            <span class="n">subset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">split_class</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">date</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dateformat</span><span class="p">)</span>
-
-        <span class="c1"># the training, validation and test dataset</span>
-        <span class="n">train_ds</span><span class="p">,</span> <span class="n">valid_ds</span><span class="p">,</span> <span class="n">test_ds</span> <span class="o">=</span> <span class="n">subset</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
-
-        <span class="c1"># whether to drop training samples with a fraction of pixels equal to</span>
-        <span class="c1"># the constant padding value cval &gt;= drop</span>
-        <span class="k">if</span> <span class="n">ds</span><span class="o">.</span><span class="n">pad</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">drop</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">dropped</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_drop_samples</span><span class="p">(</span><span class="n">train_ds</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">drop</span><span class="p">)</span>
-
-        <span class="k">return</span> <span class="n">train_ds</span><span class="p">,</span> <span class="n">valid_ds</span><span class="p">,</span> <span class="n">test_ds</span></div>
-
-<div class="viewcode-block" id="SplitConfig.dataloaders"><a class="viewcode-back" href="../../source/core.html#core.trainer.SplitConfig.dataloaders">[docs]</a>    <span class="nd">@staticmethod</span>
-    <span class="k">def</span> <span class="nf">dataloaders</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Build `torch.utils.data.DataLoader` instances.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        *args : `list` [`torch.utils.data.Dataset`]</span>
-<span class="sd">            List of instances of `torch.utils.data.Dataset`.</span>
-<span class="sd">        **kwargs</span>
-<span class="sd">            Additional keyword arguments passed to</span>
-<span class="sd">            `torch.utils.data.DataLoader`.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        TypeError</span>
-<span class="sd">            Raised if not each item in ``args`` is an instance of</span>
-<span class="sd">            `torch.utils.data.Dataset`.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        loaders : `list` [`torch.utils.data.DataLoader`]</span>
-<span class="sd">            List of instances of `torch.utils.data.DataLoader`. If an instance</span>
-<span class="sd">            of `torch.utils.data.Dataset` in ``args`` is empty, `None` is</span>
-<span class="sd">            appended to ``loaders`` instead of an instance of</span>
-<span class="sd">            `torch.utils.data.DataLoader`.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># check whether each dataset in args has the correct type</span>
-        <span class="n">loaders</span> <span class="o">=</span> <span class="p">[]</span>
-        <span class="k">for</span> <span class="n">ds</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
-            <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="n">Dataset</span><span class="p">):</span>
-                <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;Expected </span><span class="si">{}</span><span class="s1">, got </span><span class="si">{}</span><span class="s1">.&#39;</span>
-                                <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">Dataset</span><span class="p">),</span> <span class="nb">type</span><span class="p">(</span><span class="n">ds</span><span class="p">)))</span>
-
-            <span class="c1"># check if the dataset is not empty</span>
-            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">ds</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-                <span class="c1"># build the dataloader</span>
-                <span class="n">loader</span> <span class="o">=</span> <span class="n">DataLoader</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-            <span class="k">else</span><span class="p">:</span>
-                <span class="n">loader</span> <span class="o">=</span> <span class="kc">None</span>
-            <span class="n">loaders</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">loader</span><span class="p">)</span>
-
-        <span class="k">return</span> <span class="n">loaders</span></div></div>
-
-
-<div class="viewcode-block" id="ModelConfig"><a class="viewcode-back" href="../../source/core.html#core.trainer.ModelConfig">[docs]</a><span class="nd">@dataclasses</span><span class="o">.</span><span class="n">dataclass</span>
-<span class="k">class</span> <span class="nc">ModelConfig</span><span class="p">(</span><span class="n">BaseConfig</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Model configuration class.</span>
-
-<span class="sd">    Instanciate a (pretrained) model.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    model_name : `str`</span>
-<span class="sd">        The name of the model.</span>
-<span class="sd">    filters : `list` [`int`]</span>
-<span class="sd">        List of input channels to the convolutional layers.</span>
-<span class="sd">    torch_seed : `int`</span>
-<span class="sd">        The random seed to initialize the model weights.</span>
-<span class="sd">        Useful for reproducibility.</span>
-<span class="sd">    optim_name : `str`</span>
-<span class="sd">        The name of the optimizer to update the model weights.</span>
-<span class="sd">    loss_name : `str`</span>
-<span class="sd">        The name of the loss function measuring the model error.</span>
-<span class="sd">    skip_connection : `bool`, optional</span>
-<span class="sd">        Whether to apply skip connections. The defaul is True.</span>
-<span class="sd">    kwargs: `dict`, optional</span>
-<span class="sd">        The configuration for each convolution in the model. The default is</span>
-<span class="sd">        {&#39;kernel_size&#39;: 3, &#39;stride&#39;: 1, &#39;dilation&#39;: 1}.</span>
-<span class="sd">    batch_size : `int`, optional</span>
-<span class="sd">        The model batch size. Determines the number of samples to process</span>
-<span class="sd">        before updating the model weights. The default is 64.</span>
-<span class="sd">    checkpoint : `bool`, optional</span>
-<span class="sd">        Whether to resume training from an existing model checkpoint. The</span>
-<span class="sd">        default is False.</span>
-<span class="sd">    transfer : `bool`, optional</span>
-<span class="sd">        Whether to use a model for transfer learning on a new dataset. If True,</span>
-<span class="sd">        the model architecture of ``pretrained_model`` is adjusted to a new</span>
-<span class="sd">        dataset. The default is False.</span>
-<span class="sd">    pretrained_model : `str`, optional</span>
-<span class="sd">        The name of the pretrained model to use for transfer learning.</span>
-<span class="sd">        The default is &#39;&#39;.</span>
-<span class="sd">    lr : `float`, optional</span>
-<span class="sd">        The learning rate used by the gradient descent algorithm.</span>
-<span class="sd">        The default is 0.001.</span>
-<span class="sd">    early_stop : `bool`, optional</span>
-<span class="sd">        Whether to apply `early stopping`_. The default is False.</span>
-<span class="sd">    mode : `str`, optional</span>
-<span class="sd">        The mode of the early stopping. Depends on the metric measuring</span>
-<span class="sd">        performance. When using model loss as metric, use ``mode`` = &#39;min&#39;,</span>
-<span class="sd">        however, when using accuracy as metric, use ``mode`` = &#39;max&#39;. For now,</span>
-<span class="sd">        only ``mode`` = &#39;max&#39; is supported. Only used if ``early_stop`` = True.</span>
-<span class="sd">        The default is &#39;max&#39;.</span>
-<span class="sd">    delta : `float`, optional</span>
-<span class="sd">        Minimum change in early stopping metric to be considered as an</span>
-<span class="sd">        improvement. Only used if ``early_stop`` = True. The default is 0.</span>
-<span class="sd">    patience : `int`, optional</span>
-<span class="sd">        The number of epochs to wait for an improvement in the early stopping</span>
-<span class="sd">        metric. If the model does not improve over more than ``patience``</span>
-<span class="sd">        epochs, quit training. Only used if ``early_stop`` = True.</span>
-<span class="sd">        The default is 10.</span>
-<span class="sd">    epochs : `int`, optional</span>
-<span class="sd">        The maximum number of epochs to train. The default is 50.</span>
-<span class="sd">    nthreads : `int`, optional</span>
-<span class="sd">        The number of cpu threads to use during training. The default is</span>
-<span class="sd">        torch.get_num_threads().</span>
-<span class="sd">    save : `bool`, optional</span>
-<span class="sd">        Whether to save the model state to disk. Model states are saved in</span>
-<span class="sd">        pysegcnn/main/_models. The default is True.</span>
-
-<span class="sd">    .. _early stopping:</span>
-<span class="sd">        https://en.wikipedia.org/wiki/Early_stopping</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="n">model_name</span><span class="p">:</span> <span class="nb">str</span>
-    <span class="n">filters</span><span class="p">:</span> <span class="nb">list</span>
-    <span class="n">torch_seed</span><span class="p">:</span> <span class="nb">int</span>
-    <span class="n">optim_name</span><span class="p">:</span> <span class="nb">str</span>
-    <span class="n">loss_name</span><span class="p">:</span> <span class="nb">str</span>
-    <span class="n">skip_connection</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-    <span class="n">kwargs</span><span class="p">:</span> <span class="nb">dict</span> <span class="o">=</span> <span class="n">dataclasses</span><span class="o">.</span><span class="n">field</span><span class="p">(</span>
-        <span class="n">default_factory</span><span class="o">=</span><span class="k">lambda</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;kernel_size&#39;</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> <span class="s1">&#39;stride&#39;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;dilation&#39;</span><span class="p">:</span> <span class="mi">1</span><span class="p">})</span>
-    <span class="n">batch_size</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">64</span>
-    <span class="n">checkpoint</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-    <span class="n">transfer</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-    <span class="n">pretrained_model</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
-    <span class="n">lr</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">0.001</span>
-    <span class="n">early_stop</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-    <span class="n">mode</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;max&#39;</span>
-    <span class="n">delta</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mi">0</span>
-    <span class="n">patience</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">10</span>
-    <span class="n">epochs</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">50</span>
-    <span class="n">nthreads</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">get_num_threads</span><span class="p">()</span>
-    <span class="n">save</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-
-    <span class="k">def</span> <span class="nf">__post_init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Check the type of each argument.</span>
-
-<span class="sd">        Configure path to save model state.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        ValueError</span>
-<span class="sd">            Raised if the model ``model_name``, the optimizer ``optim_name`` or</span>
-<span class="sd">            the loss function ``loss_name`` is not supported.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        None.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># check input types</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">__post_init__</span><span class="p">()</span>
-
-        <span class="c1"># check whether the model is currently supported</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">model_class</span> <span class="o">=</span> <span class="n">item_in_enum</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">model_name</span><span class="p">,</span> <span class="n">SupportedModels</span><span class="p">)</span>
-
-        <span class="c1"># check whether the optimizer is currently supported</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">optim_class</span> <span class="o">=</span> <span class="n">item_in_enum</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">optim_name</span><span class="p">,</span> <span class="n">SupportedOptimizers</span><span class="p">)</span>
-
-        <span class="c1"># check whether the loss function is currently supported</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">loss_class</span> <span class="o">=</span> <span class="n">item_in_enum</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">loss_name</span><span class="p">,</span> <span class="n">SupportedLossFunctions</span><span class="p">)</span>
-
-        <span class="c1"># path to model states</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">state_path</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">HERE</span><span class="p">)</span><span class="o">.</span><span class="n">joinpath</span><span class="p">(</span><span class="s1">&#39;_models/&#39;</span><span class="p">)</span>
-
-        <span class="c1"># path to pretrained model</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">pretrained_path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">state_path</span><span class="o">.</span><span class="n">joinpath</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pretrained_model</span><span class="p">)</span>
-
-<div class="viewcode-block" id="ModelConfig.init_optimizer"><a class="viewcode-back" href="../../source/core.html#core.trainer.ModelConfig.init_optimizer">[docs]</a>    <span class="k">def</span> <span class="nf">init_optimizer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">model</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Instanciate the optimizer.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        model : `torch.nn.Module`</span>
-<span class="sd">            An instance of `torch.nn.Module`.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        optimizer : `torch.optim.Optimizer`</span>
-<span class="sd">            An instance of `torch.optim.Optimizer`.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Optimizer: </span><span class="si">{}</span><span class="s1">.&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">optim_class</span><span class="p">)))</span>
-
-        <span class="c1"># initialize the optimizer for the specified model</span>
-        <span class="n">optimizer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">optim_class</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">parameters</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">lr</span><span class="p">)</span>
-
-        <span class="k">return</span> <span class="n">optimizer</span></div>
-
-<div class="viewcode-block" id="ModelConfig.init_loss_function"><a class="viewcode-back" href="../../source/core.html#core.trainer.ModelConfig.init_loss_function">[docs]</a>    <span class="k">def</span> <span class="nf">init_loss_function</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Instanciate the loss function.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        loss_function : `torch.nn.Module`</span>
-<span class="sd">            An instance of `torch.nn.Module`.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Loss function: </span><span class="si">{}</span><span class="s1">.&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">loss_class</span><span class="p">)))</span>
-
-        <span class="c1"># instanciate the loss function</span>
-        <span class="n">loss_function</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">loss_class</span><span class="p">()</span>
-
-        <span class="k">return</span> <span class="n">loss_function</span></div>
-
-<div class="viewcode-block" id="ModelConfig.init_model"><a class="viewcode-back" href="../../source/core.html#core.trainer.ModelConfig.init_model">[docs]</a>    <span class="k">def</span> <span class="nf">init_model</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ds</span><span class="p">,</span> <span class="n">state_file</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Instanciate the model and the optimizer.</span>
-
-<span class="sd">        If the model checkpoint ``state_file`` exists, the pretrained model and</span>
-<span class="sd">        optimizer states are loaded, otherwise the model and the optimizer are</span>
-<span class="sd">        initialized from scratch.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        ds : `pysegcnn.core.dataset.ImageDataset`</span>
-<span class="sd">            An instance of `pysegcnn.core.dataset.ImageDataset`.</span>
-<span class="sd">        state_file : `pathlib.Path`</span>
-<span class="sd">            Path to a model checkpoint.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        model : `pysegcnn.core.models.Network`</span>
-<span class="sd">            An instance of `pysegcnn.core.models.Network`.</span>
-<span class="sd">        optimizer : `torch.optim.Optimizer`</span>
-<span class="sd">            An instance of `torch.optim.Optimizer`.</span>
-<span class="sd">        checkpoint_state : `dict` [`str`, `numpy.ndarray`]</span>
-<span class="sd">            If the model checkpoint ``state_file`` exists, ``checkpoint_state``</span>
-<span class="sd">            has keys:</span>
-<span class="sd">                ``&#39;ta&#39;``</span>
-<span class="sd">                    The accuracy on the training set (`numpy.ndarray`).</span>
-<span class="sd">                ``&#39;tl&#39;``</span>
-<span class="sd">                    The loss on the training set (`numpy.ndarray`).</span>
-<span class="sd">                ``&#39;va&#39;``</span>
-<span class="sd">                    The accuracy on the validation set (`numpy.ndarray`).</span>
-<span class="sd">                ``&#39;vl&#39;``</span>
-<span class="sd">                    The loss on the validation set (`numpy.ndarray`).</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># write an initialization string to the log file</span>
-        <span class="n">LogConfig</span><span class="o">.</span><span class="n">init_log</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1">: Initializing model run. &#39;</span><span class="p">)</span>
-
-        <span class="c1"># case (1): build a new model</span>
-        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">transfer</span><span class="p">:</span>
-
-            <span class="c1"># set the random seed for reproducibility</span>
-            <span class="n">torch</span><span class="o">.</span><span class="n">manual_seed</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">torch_seed</span><span class="p">)</span>
-            <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Initializing model: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">state_file</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
-
-            <span class="c1"># instanciate the model</span>
-            <span class="n">model</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">model_class</span><span class="p">(</span>
-                <span class="n">in_channels</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">ds</span><span class="o">.</span><span class="n">use_bands</span><span class="p">),</span>
-                <span class="n">nclasses</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">ds</span><span class="o">.</span><span class="n">labels</span><span class="p">),</span>
-                <span class="n">filters</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">filters</span><span class="p">,</span>
-                <span class="n">skip</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">skip_connection</span><span class="p">,</span>
-                <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">)</span>
-
-        <span class="c1"># case (2): load a pretrained model for transfer learning</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="c1"># load pretrained model</span>
-            <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Loading pretrained model for transfer learning from: &#39;</span>
-                        <span class="s1">&#39;</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pretrained_path</span><span class="p">))</span>
-            <span class="n">model</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">transfer_model</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pretrained_path</span><span class="p">,</span> <span class="n">ds</span><span class="p">)</span>
-
-        <span class="c1"># initialize the optimizer</span>
-        <span class="n">optimizer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">init_optimizer</span><span class="p">(</span><span class="n">model</span><span class="p">)</span>
-
-        <span class="c1"># whether to resume training from an existing model checkpoint</span>
-        <span class="n">checkpoint_state</span> <span class="o">=</span> <span class="p">{}</span>
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">checkpoint</span><span class="p">:</span>
-            <span class="n">model</span><span class="p">,</span> <span class="n">optimizer</span><span class="p">,</span> <span class="n">checkpoint_state</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">load_checkpoint</span><span class="p">(</span>
-                <span class="n">model</span><span class="p">,</span> <span class="n">optimizer</span><span class="p">,</span> <span class="n">state_file</span><span class="p">)</span>
-
-        <span class="k">return</span> <span class="n">model</span><span class="p">,</span> <span class="n">optimizer</span><span class="p">,</span> <span class="n">checkpoint_state</span></div>
-
-<div class="viewcode-block" id="ModelConfig.load_checkpoint"><a class="viewcode-back" href="../../source/core.html#core.trainer.ModelConfig.load_checkpoint">[docs]</a>    <span class="nd">@staticmethod</span>
-    <span class="k">def</span> <span class="nf">load_checkpoint</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">optimizer</span><span class="p">,</span> <span class="n">state_file</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Load an existing model checkpoint.</span>
-
-<span class="sd">        If the model checkpoint ``state_file`` exists, the pretrained model and</span>
-<span class="sd">        optimizer states are loaded.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        model : `pysegcnn.core.models.Network`</span>
-<span class="sd">            An instance of `pysegcnn.core.models.Network`.</span>
-<span class="sd">        optimizer : `torch.optim.Optimizer`</span>
-<span class="sd">            An instance of `torch.optim.Optimizer`.</span>
-<span class="sd">        state_file : `pathlib.Path`</span>
-<span class="sd">            Path to the model checkpoint.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        model : `pysegcnn.core.models.Network`</span>
-<span class="sd">            An instance of `pysegcnn.core.models.Network`.</span>
-<span class="sd">        optimizer : `torch.optim.Optimizer`</span>
-<span class="sd">            An instance of `torch.optim.Optimizer`.</span>
-<span class="sd">        checkpoint_state : `dict` [`str`, `numpy.ndarray`]</span>
-<span class="sd">            If the model checkpoint ``state_file`` exists, ``checkpoint_state``</span>
-<span class="sd">            has keys:</span>
-<span class="sd">                ``&#39;ta&#39;``</span>
-<span class="sd">                    The accuracy on the training set (`numpy.ndarray`).</span>
-<span class="sd">                ``&#39;tl&#39;``</span>
-<span class="sd">                    The loss on the training set (`numpy.ndarray`).</span>
-<span class="sd">                ``&#39;va&#39;``</span>
-<span class="sd">                    The accuracy on the validation set (`numpy.ndarray`).</span>
-<span class="sd">                ``&#39;vl&#39;``</span>
-<span class="sd">                    The loss on the validation set (`numpy.ndarray`).</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># whether to resume training from an existing model checkpoint</span>
-        <span class="n">checkpoint_state</span> <span class="o">=</span> <span class="p">{}</span>
-
-        <span class="c1"># if no checkpoint exists, file a warning and continue with a model</span>
-        <span class="c1"># initialized from scratch</span>
-        <span class="k">if</span> <span class="ow">not</span> <span class="n">state_file</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-            <span class="n">LOGGER</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s1">&#39;Checkpoint for model </span><span class="si">{}</span><span class="s1"> does not exist. &#39;</span>
-                           <span class="s1">&#39;Initializing new model.&#39;</span>
-                           <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">state_file</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="c1"># load model checkpoint</span>
-            <span class="n">model</span><span class="p">,</span> <span class="n">optimizer</span><span class="p">,</span> <span class="n">model_state</span> <span class="o">=</span> <span class="n">Network</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">state_file</span><span class="p">)</span>
-
-            <span class="c1"># load model loss and accuracy</span>
-
-            <span class="c1"># get all non-zero elements, i.e. get number of epochs trained</span>
-            <span class="c1"># before the early stop</span>
-            <span class="n">checkpoint_state</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">v</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">nonzero</span><span class="p">(</span><span class="n">v</span><span class="p">)]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">v</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
-                                <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;state&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
-
-        <span class="k">return</span> <span class="n">model</span><span class="p">,</span> <span class="n">optimizer</span><span class="p">,</span> <span class="n">checkpoint_state</span></div>
-
-<div class="viewcode-block" id="ModelConfig.transfer_model"><a class="viewcode-back" href="../../source/core.html#core.trainer.ModelConfig.transfer_model">[docs]</a>    <span class="nd">@staticmethod</span>
-    <span class="k">def</span> <span class="nf">transfer_model</span><span class="p">(</span><span class="n">state_file</span><span class="p">,</span> <span class="n">ds</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Adjust a pretrained model to a new dataset.</span>
-
-<span class="sd">        The classification layer of the pretrained model in ``state_file`` is</span>
-<span class="sd">        initilialized from scratch with the classes of the new dataset ``ds``.</span>
-
-<span class="sd">        The remaining model weights are preserved.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        state_file : `pathlib.Path`</span>
-<span class="sd">            Path to a pretrained model.</span>
-<span class="sd">        ds : `pysegcnn.core.dataset.ImageDataset`</span>
-<span class="sd">            An instance of `pysegcnn.core.dataset.ImageDataset`.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        TypeError</span>
-<span class="sd">            Raised if ``ds`` is not an instance of</span>
-<span class="sd">            `pysegcnn.core.dataset.ImageDataset`.</span>
-<span class="sd">        ValueError</span>
-<span class="sd">            Raised if the bands of ``ds`` do not match the bands of the dataset</span>
-<span class="sd">            the pretrained model was trained with.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        model : `pysegcnn.core.models.Network`</span>
-<span class="sd">            An instance of `pysegcnn.core.models.Network`. The pretrained model</span>
-<span class="sd">            adjusted to the new dataset.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># check input type</span>
-        <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="n">ImageDataset</span><span class="p">):</span>
-            <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;Expected &quot;ds&quot; to be </span><span class="si">{}</span><span class="s1">.&#39;</span>
-                            <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">ImageDataset</span><span class="o">.</span><span class="vm">__module__</span><span class="p">,</span>
-                                              <span class="n">ImageDataset</span><span class="o">.</span><span class="vm">__name__</span><span class="p">])))</span>
-
-        <span class="c1"># load the pretrained model</span>
-        <span class="n">model</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">model_state</span> <span class="o">=</span> <span class="n">Network</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">state_file</span><span class="p">)</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Configuring model for new dataset: </span><span class="si">{}</span><span class="s1">.&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
-            <span class="n">ds</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">))</span>
-
-        <span class="c1"># check whether the current dataset uses the correct spectral bands</span>
-        <span class="k">if</span> <span class="n">ds</span><span class="o">.</span><span class="n">use_bands</span> <span class="o">!=</span> <span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;bands&#39;</span><span class="p">]:</span>
-            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;The pretrained network was trained with &#39;</span>
-                             <span class="s1">&#39;bands </span><span class="si">{}</span><span class="s1">, not with bands </span><span class="si">{}</span><span class="s1">.&#39;</span>
-                             <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;bands&#39;</span><span class="p">],</span> <span class="n">ds</span><span class="o">.</span><span class="n">use_bands</span><span class="p">))</span>
-
-        <span class="c1"># get the number of convolutional filters</span>
-        <span class="n">filters</span> <span class="o">=</span> <span class="n">model_state</span><span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">][</span><span class="s1">&#39;filters&#39;</span><span class="p">]</span>
-
-        <span class="c1"># reset model epoch to 0, since the model is trained on a different</span>
-        <span class="c1"># dataset</span>
-        <span class="n">model</span><span class="o">.</span><span class="n">epoch</span> <span class="o">=</span> <span class="mi">0</span>
-
-        <span class="c1"># adjust the number of classes in the model</span>
-        <span class="n">model</span><span class="o">.</span><span class="n">nclasses</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">ds</span><span class="o">.</span><span class="n">labels</span><span class="p">)</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Replacing classification layer to classes: </span><span class="si">{}</span><span class="s1">.&#39;</span>
-                    <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s1">&#39;(</span><span class="si">{}</span><span class="s1">, </span><span class="si">{}</span><span class="s1">)&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">])</span>
-                                      <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">ds</span><span class="o">.</span><span class="n">labels</span><span class="o">.</span><span class="n">items</span><span class="p">())))</span>
-
-        <span class="c1"># adjust the classification layer to the classes of the new dataset</span>
-        <span class="n">model</span><span class="o">.</span><span class="n">classifier</span> <span class="o">=</span> <span class="n">Conv2dSame</span><span class="p">(</span><span class="n">in_channels</span><span class="o">=</span><span class="n">filters</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
-                                      <span class="n">out_channels</span><span class="o">=</span><span class="n">model</span><span class="o">.</span><span class="n">nclasses</span><span class="p">,</span>
-                                      <span class="n">kernel_size</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
-
-        <span class="k">return</span> <span class="n">model</span></div></div>
-
-
-<div class="viewcode-block" id="StateConfig"><a class="viewcode-back" href="../../source/core.html#core.trainer.StateConfig">[docs]</a><span class="nd">@dataclasses</span><span class="o">.</span><span class="n">dataclass</span>
-<span class="k">class</span> <span class="nc">StateConfig</span><span class="p">(</span><span class="n">BaseConfig</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Model state configuration class.</span>
-
-<span class="sd">    Generate the model state filename according to the following naming</span>
-<span class="sd">    convention:</span>
-
-<span class="sd">    model_dataset_optimizer_splitmode_splitparams_tilesize_batchsize_bands.pt</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    ds : `pysegcnn.core.dataset.ImageDataset`</span>
-<span class="sd">        An instance of `pysegcnn.core.dataset.ImageDataset`.</span>
-<span class="sd">    sc : `pysegcnn.core.trainer.SplitConfig`</span>
-<span class="sd">        An instance of `pysegcnn.core.trainer.SplitConfig`.</span>
-<span class="sd">    mc : `pysegcnn.core.trainer.ModelConfig`</span>
-<span class="sd">        An instance of `pysegcnn.core.trainer.SplitConfig`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="n">ds</span><span class="p">:</span> <span class="n">ImageDataset</span>
-    <span class="n">sc</span><span class="p">:</span> <span class="n">SplitConfig</span>
-    <span class="n">mc</span><span class="p">:</span> <span class="n">ModelConfig</span>
-
-    <span class="k">def</span> <span class="nf">__post_init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Check the type of each argument.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        None.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">__post_init__</span><span class="p">()</span>
-
-<div class="viewcode-block" id="StateConfig.init_state"><a class="viewcode-back" href="../../source/core.html#core.trainer.StateConfig.init_state">[docs]</a>    <span class="k">def</span> <span class="nf">init_state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Generate the model state filename.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        state : `pathlib.Path`</span>
-<span class="sd">            The path to the model state file.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># file to save model state to:</span>
-        <span class="c1"># network_dataset_optim_split_splitparams_tilesize_batchsize_bands.pt</span>
-
-        <span class="c1"># model state filename</span>
-        <span class="n">state_file</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="si">{}</span><span class="s1">_</span><span class="si">{}</span><span class="s1">_</span><span class="si">{}</span><span class="s1">_</span><span class="si">{}</span><span class="s1">Split_</span><span class="si">{}</span><span class="s1">_t</span><span class="si">{}</span><span class="s1">_b</span><span class="si">{}</span><span class="s1">_</span><span class="si">{}</span><span class="s1">.pt&#39;</span>
-
-        <span class="c1"># get the band numbers</span>
-        <span class="n">bformat</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">band</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span>
-                          <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ds</span><span class="o">.</span><span class="n">sensor</span><span class="o">.</span><span class="n">__members__</span><span class="p">[</span><span class="n">band</span><span class="p">]</span><span class="o">.</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span>
-                          <span class="n">band</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ds</span><span class="o">.</span><span class="n">use_bands</span><span class="p">)</span>
-
-        <span class="c1"># check which split mode was used</span>
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sc</span><span class="o">.</span><span class="n">split_mode</span> <span class="o">==</span> <span class="s1">&#39;date&#39;</span><span class="p">:</span>
-            <span class="c1"># store the date that was used to split the dataset</span>
-            <span class="n">state_file</span> <span class="o">=</span> <span class="n">state_file</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mc</span><span class="o">.</span><span class="n">model_name</span><span class="p">,</span>
-                                           <span class="bp">self</span><span class="o">.</span><span class="n">ds</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span>
-                                           <span class="bp">self</span><span class="o">.</span><span class="n">mc</span><span class="o">.</span><span class="n">optim_name</span><span class="p">,</span>
-                                           <span class="bp">self</span><span class="o">.</span><span class="n">sc</span><span class="o">.</span><span class="n">split_mode</span><span class="o">.</span><span class="n">capitalize</span><span class="p">(),</span>
-                                           <span class="bp">self</span><span class="o">.</span><span class="n">sc</span><span class="o">.</span><span class="n">date</span><span class="p">,</span>
-                                           <span class="bp">self</span><span class="o">.</span><span class="n">ds</span><span class="o">.</span><span class="n">tile_size</span><span class="p">,</span>
-                                           <span class="bp">self</span><span class="o">.</span><span class="n">mc</span><span class="o">.</span><span class="n">batch_size</span><span class="p">,</span>
-                                           <span class="n">bformat</span><span class="p">)</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="c1"># store the random split parameters</span>
-            <span class="n">split_params</span> <span class="o">=</span> <span class="s1">&#39;s</span><span class="si">{}</span><span class="s1">_t</span><span class="si">{}</span><span class="s1">v</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
-                <span class="bp">self</span><span class="o">.</span><span class="n">ds</span><span class="o">.</span><span class="n">seed</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sc</span><span class="o">.</span><span class="n">ttratio</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">),</span>
-                <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sc</span><span class="o">.</span><span class="n">tvratio</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">))</span>
-
-            <span class="c1"># model state filename</span>
-            <span class="n">state_file</span> <span class="o">=</span> <span class="n">state_file</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mc</span><span class="o">.</span><span class="n">model_name</span><span class="p">,</span>
-                                           <span class="bp">self</span><span class="o">.</span><span class="n">ds</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span>
-                                           <span class="bp">self</span><span class="o">.</span><span class="n">mc</span><span class="o">.</span><span class="n">optim_name</span><span class="p">,</span>
-                                           <span class="bp">self</span><span class="o">.</span><span class="n">sc</span><span class="o">.</span><span class="n">split_mode</span><span class="o">.</span><span class="n">capitalize</span><span class="p">(),</span>
-                                           <span class="n">split_params</span><span class="p">,</span>
-                                           <span class="bp">self</span><span class="o">.</span><span class="n">ds</span><span class="o">.</span><span class="n">tile_size</span><span class="p">,</span>
-                                           <span class="bp">self</span><span class="o">.</span><span class="n">mc</span><span class="o">.</span><span class="n">batch_size</span><span class="p">,</span>
-                                           <span class="n">bformat</span><span class="p">)</span>
-
-        <span class="c1"># check whether a pretrained model was used and change state filename</span>
-        <span class="c1"># accordingly</span>
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">mc</span><span class="o">.</span><span class="n">transfer</span><span class="p">:</span>
-            <span class="c1"># add the configuration of the pretrained model to the state name</span>
-            <span class="n">state_file</span> <span class="o">=</span> <span class="p">(</span><span class="n">state_file</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;.pt&#39;</span><span class="p">,</span> <span class="s1">&#39;_&#39;</span><span class="p">)</span> <span class="o">+</span>
-                          <span class="s1">&#39;pretrained_&#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">mc</span><span class="o">.</span><span class="n">pretrained_model</span><span class="p">)</span>
-
-        <span class="c1"># path to model state</span>
-        <span class="n">state</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mc</span><span class="o">.</span><span class="n">state_path</span><span class="o">.</span><span class="n">joinpath</span><span class="p">(</span><span class="n">state_file</span><span class="p">)</span>
-
-        <span class="k">return</span> <span class="n">state</span></div></div>
-
-
-<div class="viewcode-block" id="EvalConfig"><a class="viewcode-back" href="../../source/core.html#core.trainer.EvalConfig">[docs]</a><span class="nd">@dataclasses</span><span class="o">.</span><span class="n">dataclass</span>
-<span class="k">class</span> <span class="nc">EvalConfig</span><span class="p">(</span><span class="n">BaseConfig</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Model inference configuration.</span>
-
-<span class="sd">    Evaluate a model.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    state_file : `pathlib.Path`</span>
-<span class="sd">        Path to the model to evaluate.</span>
-<span class="sd">    test : `bool` or `None`</span>
-<span class="sd">        Whether to evaluate the model on the training(``test`` = `None`), the</span>
-<span class="sd">        validation (``test`` = False) or the test set (``test`` = True).</span>
-<span class="sd">    predict_scene : `bool`, optional</span>
-<span class="sd">        The model prediction order. If False, the samples (tiles) of a dataset</span>
-<span class="sd">        are predicted in any order and the scenes are not reconstructed.</span>
-<span class="sd">        If True, the samples (tiles) are ordered according to the scene they</span>
-<span class="sd">        belong to and a model prediction for each entire reconstructed scene is</span>
-<span class="sd">        returned. The default is False.</span>
-<span class="sd">    plot_samples : `bool`, optional</span>
-<span class="sd">        Whether to save a plot of false color composite, ground truth and model</span>
-<span class="sd">        prediction for each sample (tile). Only used if ``predict_scene`` =</span>
-<span class="sd">        False. The default is False.</span>
-<span class="sd">    plot_scenes : `bool`, optional</span>
-<span class="sd">        Whether to save a plot of false color composite, ground truth and model</span>
-<span class="sd">        prediction for each entire scene. Only used if ``predict_scene`` =</span>
-<span class="sd">        True. The default is False.</span>
-<span class="sd">    plot_bands : `list` [`str`], optional</span>
-<span class="sd">        The bands to build the false color composite. The default is</span>
-<span class="sd">        [&#39;nir&#39;, &#39;red&#39;, &#39;green&#39;].</span>
-<span class="sd">    cm : `bool`, optional</span>
-<span class="sd">        Whether to compute and plot the confusion matrix. The default is True.</span>
-<span class="sd">    figsize : `tuple`, optional</span>
-<span class="sd">        The figure size in centimeters. The default is (10, 10).</span>
-<span class="sd">    alpha : `int`, optional</span>
-<span class="sd">        The level of the percentiles for contrast stretching of the false color</span>
-<span class="sd">        compsite. The default is 0, i.e. no stretching.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="n">state_file</span><span class="p">:</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span>
-    <span class="n">test</span><span class="p">:</span> <span class="nb">object</span>
-    <span class="n">predict_scene</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-    <span class="n">plot_samples</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-    <span class="n">plot_scenes</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-    <span class="n">plot_bands</span><span class="p">:</span> <span class="nb">list</span> <span class="o">=</span> <span class="n">dataclasses</span><span class="o">.</span><span class="n">field</span><span class="p">(</span>
-        <span class="n">default_factory</span><span class="o">=</span><span class="k">lambda</span><span class="p">:</span> <span class="p">[</span><span class="s1">&#39;nir&#39;</span><span class="p">,</span> <span class="s1">&#39;red&#39;</span><span class="p">,</span> <span class="s1">&#39;green&#39;</span><span class="p">])</span>
-    <span class="n">cm</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-    <span class="n">figsize</span><span class="p">:</span> <span class="nb">tuple</span> <span class="o">=</span> <span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
-    <span class="n">alpha</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">5</span>
-
-    <span class="k">def</span> <span class="nf">__post_init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Check the type of each argument.</span>
-
-<span class="sd">        Configure figure output paths.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        TypeError</span>
-<span class="sd">            Raised if ``test`` is not of type `bool` or `None`.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        None.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">__post_init__</span><span class="p">()</span>
-
-        <span class="c1"># check whether the test input parameter is correctly specified</span>
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">test</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="kc">None</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="kc">True</span><span class="p">]:</span>
-            <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;Expected &quot;test&quot; to be None, True or False, got &#39;</span>
-                            <span class="s1">&#39;</span><span class="si">{}</span><span class="s1">.&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">test</span><span class="p">))</span>
-
-        <span class="c1"># the output paths for the different graphics</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">base_path</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">HERE</span><span class="p">)</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">sample_path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">base_path</span><span class="o">.</span><span class="n">joinpath</span><span class="p">(</span><span class="s1">&#39;_samples&#39;</span><span class="p">)</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">scenes_path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">base_path</span><span class="o">.</span><span class="n">joinpath</span><span class="p">(</span><span class="s1">&#39;_scenes&#39;</span><span class="p">)</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">perfmc_path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">base_path</span><span class="o">.</span><span class="n">joinpath</span><span class="p">(</span><span class="s1">&#39;_graphics&#39;</span><span class="p">)</span>
-
-        <span class="c1"># input path for model state files</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">models_path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">base_path</span><span class="o">.</span><span class="n">joinpath</span><span class="p">(</span><span class="s1">&#39;_models&#39;</span><span class="p">)</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">state_file</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">models_path</span><span class="o">.</span><span class="n">joinpath</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">state_file</span><span class="p">)</span>
-
-        <span class="c1"># write initialization string to log file</span>
-        <span class="n">LogConfig</span><span class="o">.</span><span class="n">init_log</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1">: &#39;</span> <span class="o">+</span> <span class="s1">&#39;Evaluating model: </span><span class="si">{}</span><span class="s1">.&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">state_file</span><span class="o">.</span><span class="n">name</span><span class="p">))</span></div>
-
-
-<div class="viewcode-block" id="LogConfig"><a class="viewcode-back" href="../../source/core.html#core.trainer.LogConfig">[docs]</a><span class="nd">@dataclasses</span><span class="o">.</span><span class="n">dataclass</span>
-<span class="k">class</span> <span class="nc">LogConfig</span><span class="p">(</span><span class="n">BaseConfig</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Logging configuration class.</span>
-
-<span class="sd">    Generate the model log file.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    state_file : `pathlib.Path`</span>
-<span class="sd">        Path to a model state file.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="n">state_file</span><span class="p">:</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span>
-
-    <span class="k">def</span> <span class="nf">__post_init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Check the type of each argument.</span>
-
-<span class="sd">        Generate model log file.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        None.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">__post_init__</span><span class="p">()</span>
-
-        <span class="c1"># the path to store model logs</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">log_path</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">HERE</span><span class="p">)</span><span class="o">.</span><span class="n">joinpath</span><span class="p">(</span><span class="s1">&#39;_logs&#39;</span><span class="p">)</span>
-
-        <span class="c1"># the log file of the current model</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">log_file</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">log_path</span><span class="o">.</span><span class="n">joinpath</span><span class="p">(</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">state_file</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;.pt&#39;</span><span class="p">,</span> <span class="s1">&#39;.log&#39;</span><span class="p">))</span>
-
-<div class="viewcode-block" id="LogConfig.now"><a class="viewcode-back" href="../../source/core.html#core.trainer.LogConfig.now">[docs]</a>    <span class="nd">@staticmethod</span>
-    <span class="k">def</span> <span class="nf">now</span><span class="p">():</span>
-        <span class="sd">&quot;&quot;&quot;Return the current date and time.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        date : `datetime.datetime`</span>
-<span class="sd">            The current date and time.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">(),</span>
-                                          <span class="s1">&#39;%Y-%m-</span><span class="si">%d</span><span class="s1">T%H:%M:%S&#39;</span><span class="p">)</span></div>
-
-<div class="viewcode-block" id="LogConfig.init_log"><a class="viewcode-back" href="../../source/core.html#core.trainer.LogConfig.init_log">[docs]</a>    <span class="nd">@staticmethod</span>
-    <span class="k">def</span> <span class="nf">init_log</span><span class="p">(</span><span class="n">init_str</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Generate a string to identify a new model run.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        init_str : `str`</span>
-<span class="sd">            The string to write to the model log file.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        None.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="mi">80</span> <span class="o">*</span> <span class="s1">&#39;-&#39;</span><span class="p">)</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">init_str</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">LogConfig</span><span class="o">.</span><span class="n">now</span><span class="p">()))</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="mi">80</span> <span class="o">*</span> <span class="s1">&#39;-&#39;</span><span class="p">)</span></div></div>
-
-
-<div class="viewcode-block" id="NetworkTrainer"><a class="viewcode-back" href="../../source/core.html#core.trainer.NetworkTrainer">[docs]</a><span class="nd">@dataclasses</span><span class="o">.</span><span class="n">dataclass</span>
-<span class="k">class</span> <span class="nc">NetworkTrainer</span><span class="p">(</span><span class="n">BaseConfig</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Model training class.</span>
-
-<span class="sd">    Generic class to train an instance of `pysegcnn.core.models.Network` on</span>
-<span class="sd">    a dataset of type `pysegcnn.core.dataset.ImageDataset`.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    model : `pysegcnn.core.models.Network`</span>
-<span class="sd">        The model to train. An instance of `pysegcnn.core.models.Network`.</span>
-<span class="sd">    optimizer : `torch.optim.Optimizer`</span>
-<span class="sd">        The optimizer to update the model weights. An instance of</span>
-<span class="sd">        `torch.optim.Optimizer`.</span>
-<span class="sd">    loss_function : `torch.nn.Module`</span>
-<span class="sd">        The loss function to compute the model error. An instance of</span>
-<span class="sd">        `torch.nn.Module`.</span>
-<span class="sd">    train_dl : `torch.utils.data.DataLoader`</span>
-<span class="sd">        The training `torch.utils.data.DataLoader` instance.</span>
-<span class="sd">    valid_dl : `torch.utils.data.DataLoader`</span>
-<span class="sd">        The validation `torch.utils.data.DataLoader` instance.</span>
-<span class="sd">    test_dl : `torch.utils.data.DataLoader`</span>
-<span class="sd">        The test `torch.utils.data.DataLoader` instance.</span>
-<span class="sd">    state_file : `pathlib.Path`</span>
-<span class="sd">        Path to save the model state.</span>
-<span class="sd">    epochs : `int`, optional</span>
-<span class="sd">        The maximum number of epochs to train. The default is 1.</span>
-<span class="sd">    nthreads : `int`, optional</span>
-<span class="sd">        The number of cpu threads to use during training. The default is</span>
-<span class="sd">        torch.get_num_threads().</span>
-<span class="sd">    early_stop : `bool`, optional</span>
-<span class="sd">        Whether to apply `early stopping`_. The default is False.</span>
-<span class="sd">    mode : `str`, optional</span>
-<span class="sd">        The mode of the early stopping. Depends on the metric measuring</span>
-<span class="sd">        performance. When using model loss as metric, use ``mode`` = &#39;min&#39;,</span>
-<span class="sd">        however, when using accuracy as metric, use ``mode`` = &#39;max&#39;. For now,</span>
-<span class="sd">        only ``mode`` = &#39;max&#39; is supported. Only used if ``early_stop`` = True.</span>
-<span class="sd">        The default is &#39;max&#39;.</span>
-<span class="sd">    delta : `float`, optional</span>
-<span class="sd">        Minimum change in early stopping metric to be considered as an</span>
-<span class="sd">        improvement. Only used if ``early_stop`` = True. The default is 0.</span>
-<span class="sd">    patience : `int`, optional</span>
-<span class="sd">        The number of epochs to wait for an improvement in the early stopping</span>
-<span class="sd">        metric. If the model does not improve over more than ``patience``</span>
-<span class="sd">        epochs, quit training. Only used if ``early_stop`` = True.</span>
-<span class="sd">        The default is 10.</span>
-<span class="sd">    checkpoint_state : `dict` [`str`, `numpy.ndarray`], optional</span>
-<span class="sd">        A model checkpoint for ``model``. If specified, ``checkpoint_state``</span>
-<span class="sd">        should be a dictionary with keys:</span>
-<span class="sd">            ``&#39;ta&#39;``</span>
-<span class="sd">                The accuracy on the training set (`numpy.ndarray`).</span>
-<span class="sd">            ``&#39;tl&#39;``</span>
-<span class="sd">                The loss on the training set (`numpy.ndarray`).</span>
-<span class="sd">            ``&#39;va&#39;``</span>
-<span class="sd">                The accuracy on the validation set (`numpy.ndarray`).</span>
-<span class="sd">            ``&#39;vl&#39;``</span>
-<span class="sd">                The loss on the validation set (`numpy.ndarray`).</span>
-<span class="sd">        The default is {}.</span>
-<span class="sd">    save : `bool`, optional</span>
-<span class="sd">        Whether to save the model state to ``state_file``. The default is True.</span>
-
-<span class="sd">    .. _early stopping:</span>
-<span class="sd">        https://en.wikipedia.org/wiki/Early_stopping</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="n">model</span><span class="p">:</span> <span class="n">Network</span>
-    <span class="n">optimizer</span><span class="p">:</span> <span class="n">Optimizer</span>
-    <span class="n">loss_function</span><span class="p">:</span> <span class="n">nn</span><span class="o">.</span><span class="n">Module</span>
-    <span class="n">train_dl</span><span class="p">:</span> <span class="n">DataLoader</span>
-    <span class="n">valid_dl</span><span class="p">:</span> <span class="n">DataLoader</span>
-    <span class="n">test_dl</span><span class="p">:</span> <span class="n">DataLoader</span>
-    <span class="n">state_file</span><span class="p">:</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span>
-    <span class="n">epochs</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span>
-    <span class="n">nthreads</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">get_num_threads</span><span class="p">()</span>
-    <span class="n">early_stop</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-    <span class="n">mode</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;max&#39;</span>
-    <span class="n">delta</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mi">0</span>
-    <span class="n">patience</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">10</span>
-    <span class="n">checkpoint_state</span><span class="p">:</span> <span class="nb">dict</span> <span class="o">=</span> <span class="n">dataclasses</span><span class="o">.</span><span class="n">field</span><span class="p">(</span><span class="n">default_factory</span><span class="o">=</span><span class="nb">dict</span><span class="p">)</span>
-    <span class="n">save</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-
-    <span class="k">def</span> <span class="nf">__post_init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Check the type of each argument.</span>
-
-<span class="sd">        Configure the device to train the model on, i.e. train on the gpu if</span>
-<span class="sd">        available.</span>
-
-<span class="sd">        Configure early stopping if required.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        None.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">__post_init__</span><span class="p">()</span>
-
-        <span class="c1"># whether to use the gpu</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">device</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">device</span><span class="p">(</span><span class="s2">&quot;cuda:0&quot;</span> <span class="k">if</span> <span class="n">torch</span><span class="o">.</span><span class="n">cuda</span><span class="o">.</span><span class="n">is_available</span><span class="p">()</span>
-                                   <span class="k">else</span> <span class="s2">&quot;cpu&quot;</span><span class="p">)</span>
-
-        <span class="c1"># send the model to the gpu if available</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">model</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">device</span><span class="p">)</span>
-
-        <span class="c1"># maximum accuracy on the validation dataset</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">max_accuracy</span> <span class="o">=</span> <span class="mi">0</span>
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">checkpoint_state</span><span class="p">:</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">max_accuracy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">checkpoint_state</span><span class="p">[</span><span class="s1">&#39;va&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span>
-                <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">max</span><span class="p">()</span><span class="o">.</span><span class="n">item</span><span class="p">()</span>
-
-        <span class="c1"># whether to use early stopping</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">es</span> <span class="o">=</span> <span class="kc">None</span>
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">early_stop</span><span class="p">:</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">es</span> <span class="o">=</span> <span class="n">EarlyStopping</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mode</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_accuracy</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">delta</span><span class="p">,</span>
-                                    <span class="bp">self</span><span class="o">.</span><span class="n">patience</span><span class="p">)</span>
-
-        <span class="c1"># log representation</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
-
-<div class="viewcode-block" id="NetworkTrainer.train"><a class="viewcode-back" href="../../source/core.html#core.trainer.NetworkTrainer.train">[docs]</a>    <span class="k">def</span> <span class="nf">train</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Train the model.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        training_state : `dict` [`str`, `numpy.ndarray`]</span>
-<span class="sd">            The training state dictionary with keys:</span>
-<span class="sd">            ``&#39;ta&#39;``</span>
-<span class="sd">                The accuracy on the training set (`numpy.ndarray`).</span>
-<span class="sd">            ``&#39;tl&#39;``</span>
-<span class="sd">                The loss on the training set (`numpy.ndarray`).</span>
-<span class="sd">            ``&#39;va&#39;``</span>
-<span class="sd">                The accuracy on the validation set (`numpy.ndarray`).</span>
-<span class="sd">            ``&#39;vl&#39;``</span>
-<span class="sd">                The loss on the validation set (`numpy.ndarray`).</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="mi">35</span> <span class="o">*</span> <span class="s1">&#39;-&#39;</span> <span class="o">+</span> <span class="s1">&#39; Training &#39;</span> <span class="o">+</span> <span class="mi">35</span> <span class="o">*</span> <span class="s1">&#39;-&#39;</span><span class="p">)</span>
-
-        <span class="c1"># set the number of threads</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Device: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">device</span><span class="p">))</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Number of cpu threads: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">nthreads</span><span class="p">))</span>
-        <span class="n">torch</span><span class="o">.</span><span class="n">set_num_threads</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">nthreads</span><span class="p">)</span>
-
-        <span class="c1"># create dictionary of the observed losses and accuracies on the</span>
-        <span class="c1"># training and validation dataset</span>
-        <span class="n">tshape</span> <span class="o">=</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">train_dl</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">epochs</span><span class="p">)</span>
-        <span class="n">vshape</span> <span class="o">=</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">valid_dl</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">epochs</span><span class="p">)</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">training_state</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;tl&#39;</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">shape</span><span class="o">=</span><span class="n">tshape</span><span class="p">),</span>
-                               <span class="s1">&#39;ta&#39;</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">shape</span><span class="o">=</span><span class="n">tshape</span><span class="p">),</span>
-                               <span class="s1">&#39;vl&#39;</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">shape</span><span class="o">=</span><span class="n">vshape</span><span class="p">),</span>
-                               <span class="s1">&#39;va&#39;</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">shape</span><span class="o">=</span><span class="n">vshape</span><span class="p">)</span>
-                               <span class="p">}</span>
-
-        <span class="c1"># initialize the training: iterate over the entire training dataset</span>
-        <span class="k">for</span> <span class="n">epoch</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">epochs</span><span class="p">):</span>
-
-            <span class="c1"># set the model to training mode</span>
-            <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Setting model to training mode ...&#39;</span><span class="p">)</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">train</span><span class="p">()</span>
-
-            <span class="c1"># iterate over the dataloader object</span>
-            <span class="k">for</span> <span class="n">batch</span><span class="p">,</span> <span class="p">(</span><span class="n">inputs</span><span class="p">,</span> <span class="n">labels</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">train_dl</span><span class="p">):</span>
-
-                <span class="c1"># send the data to the gpu if available</span>
-                <span class="n">inputs</span> <span class="o">=</span> <span class="n">inputs</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">device</span><span class="p">)</span>
-                <span class="n">labels</span> <span class="o">=</span> <span class="n">labels</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">device</span><span class="p">)</span>
-
-                <span class="c1"># reset the gradients</span>
-                <span class="bp">self</span><span class="o">.</span><span class="n">optimizer</span><span class="o">.</span><span class="n">zero_grad</span><span class="p">()</span>
-
-                <span class="c1"># perform forward pass</span>
-                <span class="n">outputs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">(</span><span class="n">inputs</span><span class="p">)</span>
-
-                <span class="c1"># compute loss</span>
-                <span class="n">loss</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">loss_function</span><span class="p">(</span><span class="n">outputs</span><span class="p">,</span> <span class="n">labels</span><span class="o">.</span><span class="n">long</span><span class="p">())</span>
-                <span class="n">observed_loss</span> <span class="o">=</span> <span class="n">loss</span><span class="o">.</span><span class="n">detach</span><span class="p">()</span><span class="o">.</span><span class="n">numpy</span><span class="p">()</span><span class="o">.</span><span class="n">item</span><span class="p">()</span>
-                <span class="bp">self</span><span class="o">.</span><span class="n">training_state</span><span class="p">[</span><span class="s1">&#39;tl&#39;</span><span class="p">][</span><span class="n">batch</span><span class="p">,</span> <span class="n">epoch</span><span class="p">]</span> <span class="o">=</span> <span class="n">observed_loss</span>
-
-                <span class="c1"># compute the gradients of the loss function w.r.t.</span>
-                <span class="c1"># the network weights</span>
-                <span class="n">loss</span><span class="o">.</span><span class="n">backward</span><span class="p">()</span>
-
-                <span class="c1"># update the weights</span>
-                <span class="bp">self</span><span class="o">.</span><span class="n">optimizer</span><span class="o">.</span><span class="n">step</span><span class="p">()</span>
-
-                <span class="c1"># calculate predicted class labels</span>
-                <span class="n">ypred</span> <span class="o">=</span> <span class="n">F</span><span class="o">.</span><span class="n">softmax</span><span class="p">(</span><span class="n">outputs</span><span class="p">,</span> <span class="n">dim</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">argmax</span><span class="p">(</span><span class="n">dim</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
-
-                <span class="c1"># calculate accuracy on current batch</span>
-                <span class="n">observed_accuracy</span> <span class="o">=</span> <span class="n">accuracy_function</span><span class="p">(</span><span class="n">ypred</span><span class="p">,</span> <span class="n">labels</span><span class="p">)</span>
-                <span class="bp">self</span><span class="o">.</span><span class="n">training_state</span><span class="p">[</span><span class="s1">&#39;ta&#39;</span><span class="p">][</span><span class="n">batch</span><span class="p">,</span> <span class="n">epoch</span><span class="p">]</span> <span class="o">=</span> <span class="n">observed_accuracy</span>
-
-                <span class="c1"># print progress</span>
-                <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Epoch: </span><span class="si">{:d}</span><span class="s1">/</span><span class="si">{:d}</span><span class="s1">, Mini-batch: </span><span class="si">{:d}</span><span class="s1">/</span><span class="si">{:d}</span><span class="s1">, &#39;</span>
-                            <span class="s1">&#39;Loss: </span><span class="si">{:.2f}</span><span class="s1">, Accuracy: </span><span class="si">{:.2f}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
-                                <span class="n">epoch</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span>
-                                <span class="bp">self</span><span class="o">.</span><span class="n">epochs</span><span class="p">,</span>
-                                <span class="n">batch</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span>
-                                <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">train_dl</span><span class="p">),</span>
-                                <span class="n">observed_loss</span><span class="p">,</span>
-                                <span class="n">observed_accuracy</span><span class="p">))</span>
-
-            <span class="c1"># update the number of epochs trained</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">epoch</span> <span class="o">+=</span> <span class="mi">1</span>
-
-            <span class="c1"># whether to evaluate model performance on the validation set and</span>
-            <span class="c1"># early stop the training process</span>
-            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">early_stop</span><span class="p">:</span>
-
-                <span class="c1"># model predictions on the validation set</span>
-                <span class="n">vacc</span><span class="p">,</span> <span class="n">vloss</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">predict</span><span class="p">()</span>
-
-                <span class="c1"># append observed accuracy and loss to arrays</span>
-                <span class="bp">self</span><span class="o">.</span><span class="n">training_state</span><span class="p">[</span><span class="s1">&#39;va&#39;</span><span class="p">][:,</span> <span class="n">epoch</span><span class="p">]</span> <span class="o">=</span> <span class="n">vacc</span><span class="o">.</span><span class="n">squeeze</span><span class="p">()</span>
-                <span class="bp">self</span><span class="o">.</span><span class="n">training_state</span><span class="p">[</span><span class="s1">&#39;vl&#39;</span><span class="p">][:,</span> <span class="n">epoch</span><span class="p">]</span> <span class="o">=</span> <span class="n">vloss</span><span class="o">.</span><span class="n">squeeze</span><span class="p">()</span>
-
-                <span class="c1"># metric to assess model performance on the validation set</span>
-                <span class="n">epoch_acc</span> <span class="o">=</span> <span class="n">vacc</span><span class="o">.</span><span class="n">squeeze</span><span class="p">()</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span>
-
-                <span class="c1"># whether the model improved with respect to the previous epoch</span>
-                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">es</span><span class="o">.</span><span class="n">increased</span><span class="p">(</span><span class="n">epoch_acc</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_accuracy</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">delta</span><span class="p">):</span>
-                    <span class="bp">self</span><span class="o">.</span><span class="n">max_accuracy</span> <span class="o">=</span> <span class="n">epoch_acc</span>
-
-                    <span class="c1"># save model state if the model improved with</span>
-                    <span class="c1"># respect to the previous epoch</span>
-                    <span class="bp">self</span><span class="o">.</span><span class="n">save_state</span><span class="p">()</span>
-
-                <span class="c1"># whether the early stopping criterion is met</span>
-                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">es</span><span class="o">.</span><span class="n">stop</span><span class="p">(</span><span class="n">epoch_acc</span><span class="p">):</span>
-                    <span class="k">break</span>
-
-            <span class="k">else</span><span class="p">:</span>
-                <span class="c1"># if no early stopping is required, the model state is</span>
-                <span class="c1"># saved after each epoch</span>
-                <span class="bp">self</span><span class="o">.</span><span class="n">save_state</span><span class="p">()</span>
-
-        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">training_state</span></div>
-
-<div class="viewcode-block" id="NetworkTrainer.predict"><a class="viewcode-back" href="../../source/core.html#core.trainer.NetworkTrainer.predict">[docs]</a>    <span class="k">def</span> <span class="nf">predict</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Model inference at training time.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        accuracies : `numpy.ndarray`</span>
-<span class="sd">            The mean model prediction accuracy on each mini-batch in the</span>
-<span class="sd">            validation set.</span>
-<span class="sd">        losses : `numpy.ndarray`</span>
-<span class="sd">            The model loss for each mini-batch in the validation set.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># set the model to evaluation mode</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Setting model to evaluation mode ...&#39;</span><span class="p">)</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">eval</span><span class="p">()</span>
-
-        <span class="c1"># create arrays of the observed losses and accuracies</span>
-        <span class="n">accuracies</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">shape</span><span class="o">=</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">valid_dl</span><span class="p">),</span> <span class="mi">1</span><span class="p">))</span>
-        <span class="n">losses</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">shape</span><span class="o">=</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">valid_dl</span><span class="p">),</span> <span class="mi">1</span><span class="p">))</span>
-
-        <span class="c1"># iterate over the validation/test set</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Calculating accuracy on the validation set ...&#39;</span><span class="p">)</span>
-        <span class="k">for</span> <span class="n">batch</span><span class="p">,</span> <span class="p">(</span><span class="n">inputs</span><span class="p">,</span> <span class="n">labels</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">valid_dl</span><span class="p">):</span>
-
-            <span class="c1"># send the data to the gpu if available</span>
-            <span class="n">inputs</span> <span class="o">=</span> <span class="n">inputs</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">device</span><span class="p">)</span>
-            <span class="n">labels</span> <span class="o">=</span> <span class="n">labels</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">device</span><span class="p">)</span>
-
-            <span class="c1"># calculate network outputs</span>
-            <span class="k">with</span> <span class="n">torch</span><span class="o">.</span><span class="n">no_grad</span><span class="p">():</span>
-                <span class="n">outputs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">(</span><span class="n">inputs</span><span class="p">)</span>
-
-            <span class="c1"># compute loss</span>
-            <span class="n">loss</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">loss_function</span><span class="p">(</span><span class="n">outputs</span><span class="p">,</span> <span class="n">labels</span><span class="o">.</span><span class="n">long</span><span class="p">())</span>
-            <span class="n">losses</span><span class="p">[</span><span class="n">batch</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">loss</span><span class="o">.</span><span class="n">detach</span><span class="p">()</span><span class="o">.</span><span class="n">numpy</span><span class="p">()</span><span class="o">.</span><span class="n">item</span><span class="p">()</span>
-
-            <span class="c1"># calculate predicted class labels</span>
-            <span class="n">pred</span> <span class="o">=</span> <span class="n">F</span><span class="o">.</span><span class="n">softmax</span><span class="p">(</span><span class="n">outputs</span><span class="p">,</span> <span class="n">dim</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">argmax</span><span class="p">(</span><span class="n">dim</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
-
-            <span class="c1"># calculate accuracy on current batch</span>
-            <span class="n">acc</span> <span class="o">=</span> <span class="n">accuracy_function</span><span class="p">(</span><span class="n">pred</span><span class="p">,</span> <span class="n">labels</span><span class="p">)</span>
-            <span class="n">accuracies</span><span class="p">[</span><span class="n">batch</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">acc</span>
-
-            <span class="c1"># print progress</span>
-            <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Mini-batch: </span><span class="si">{:d}</span><span class="s1">/</span><span class="si">{:d}</span><span class="s1">, Accuracy: </span><span class="si">{:.2f}</span><span class="s1">&#39;</span>
-                        <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">batch</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">valid_dl</span><span class="p">),</span> <span class="n">acc</span><span class="p">))</span>
-
-        <span class="c1"># calculate overall accuracy on the validation/test set</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Epoch: </span><span class="si">{:d}</span><span class="s1">, Mean accuracy: </span><span class="si">{:.2f}</span><span class="s1">%.&#39;</span>
-                    <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">epoch</span><span class="p">,</span> <span class="n">accuracies</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span> <span class="o">*</span> <span class="mi">100</span><span class="p">))</span>
-
-        <span class="k">return</span> <span class="n">accuracies</span><span class="p">,</span> <span class="n">losses</span></div>
-
-<div class="viewcode-block" id="NetworkTrainer.save_state"><a class="viewcode-back" href="../../source/core.html#core.trainer.NetworkTrainer.save_state">[docs]</a>    <span class="k">def</span> <span class="nf">save_state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Save the model state.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        None.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># whether to save the model state</span>
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">save</span><span class="p">:</span>
-
-            <span class="c1"># append the model performance before the checkpoint to the model</span>
-            <span class="c1"># state, if a checkpoint is passed</span>
-            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">checkpoint_state</span><span class="p">:</span>
-
-                <span class="c1"># append values from checkpoint to current training state</span>
-                <span class="n">state</span> <span class="o">=</span> <span class="p">{</span><span class="n">k1</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">hstack</span><span class="p">([</span><span class="n">v1</span><span class="p">,</span> <span class="n">v2</span><span class="p">])</span> <span class="k">for</span> <span class="p">(</span><span class="n">k1</span><span class="p">,</span> <span class="n">v1</span><span class="p">),</span> <span class="p">(</span><span class="n">k2</span><span class="p">,</span> <span class="n">v2</span><span class="p">)</span> <span class="ow">in</span>
-                         <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">checkpoint_state</span><span class="o">.</span><span class="n">items</span><span class="p">(),</span>
-                             <span class="bp">self</span><span class="o">.</span><span class="n">training_state</span><span class="o">.</span><span class="n">items</span><span class="p">())</span> <span class="k">if</span> <span class="n">k1</span> <span class="o">==</span> <span class="n">k2</span><span class="p">}</span>
-            <span class="k">else</span><span class="p">:</span>
-                <span class="n">state</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">training_state</span>
-
-            <span class="c1"># save model state</span>
-            <span class="n">_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">save</span><span class="p">(</span>
-                <span class="bp">self</span><span class="o">.</span><span class="n">state_file</span><span class="p">,</span>
-                <span class="bp">self</span><span class="o">.</span><span class="n">optimizer</span><span class="p">,</span>
-                <span class="n">bands</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">train_dl</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">use_bands</span><span class="p">,</span>
-                <span class="n">train_ds</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">train_dl</span><span class="o">.</span><span class="n">dataset</span><span class="p">,</span>
-                <span class="n">valid_ds</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">valid_dl</span><span class="o">.</span><span class="n">dataset</span><span class="p">,</span>
-                <span class="n">test_ds</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">test_dl</span><span class="o">.</span><span class="n">dataset</span><span class="p">,</span>
-                <span class="n">state</span><span class="o">=</span><span class="n">state</span><span class="p">,</span>
-                <span class="p">)</span></div>
-
-    <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Representation of `~pysegcnn.core.trainer.NetworkTrainer`.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        fs : `str`</span>
-<span class="sd">            Representation string.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># representation string to print</span>
-        <span class="n">fs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">+</span> <span class="s1">&#39;(</span><span class="se">\n</span><span class="s1">&#39;</span>
-
-        <span class="c1"># dataset</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;    (dataset):</span><span class="se">\n</span><span class="s1">        &#39;</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-            <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">train_dl</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">dataset</span><span class="p">))</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">        &#39;</span><span class="p">)</span>
-
-        <span class="c1"># batch size</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">    (batch):</span><span class="se">\n</span><span class="s1">        &#39;</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;- batch size: </span><span class="si">{}</span><span class="se">\n</span><span class="s1">        &#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">train_dl</span><span class="o">.</span><span class="n">batch_size</span><span class="p">)</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;- mini-batch shape (b, c, h, w): </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
-            <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">train_dl</span><span class="o">.</span><span class="n">batch_size</span><span class="p">,</span>
-             <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">train_dl</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">use_bands</span><span class="p">),</span>
-             <span class="bp">self</span><span class="o">.</span><span class="n">train_dl</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">tile_size</span><span class="p">,</span>
-             <span class="bp">self</span><span class="o">.</span><span class="n">train_dl</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">dataset</span><span class="o">.</span><span class="n">tile_size</span><span class="p">)</span>
-            <span class="p">)</span>
-
-        <span class="c1"># dataset split</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">    (split):&#39;</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">        &#39;</span> <span class="o">+</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">train_dl</span><span class="o">.</span><span class="n">dataset</span><span class="p">)</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">        &#39;</span> <span class="o">+</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">valid_dl</span><span class="o">.</span><span class="n">dataset</span><span class="p">)</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">        &#39;</span> <span class="o">+</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">test_dl</span><span class="o">.</span><span class="n">dataset</span><span class="p">)</span>
-
-        <span class="c1"># model</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">    (model):</span><span class="se">\n</span><span class="s1">        &#39;</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">))</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">        &#39;</span><span class="p">)</span>
-
-        <span class="c1"># optimizer</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">    (optimizer):</span><span class="se">\n</span><span class="s1">        &#39;</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">optimizer</span><span class="p">))</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">        &#39;</span><span class="p">)</span>
-
-        <span class="c1"># early stopping</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">    (early stop):</span><span class="se">\n</span><span class="s1">        &#39;</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">es</span><span class="p">))</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">        &#39;</span><span class="p">)</span>
-
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">)&#39;</span>
-        <span class="k">return</span> <span class="n">fs</span></div>
-
-
-<div class="viewcode-block" id="EarlyStopping"><a class="viewcode-back" href="../../source/core.html#core.trainer.EarlyStopping">[docs]</a><span class="k">class</span> <span class="nc">EarlyStopping</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;`Early stopping`_ algorithm.</span>
-
-<span class="sd">    This implementation of the early stopping algorithm advances a counter each</span>
-<span class="sd">    time a metric did not improve over a training epoch. If the metric does not</span>
-<span class="sd">    improve over more than ``patience`` epochs, the early stopping criterion is</span>
-<span class="sd">    met.</span>
-
-<span class="sd">    See `pysegcnn.core.trainer.NetworkTrainer.train` for an example</span>
-<span class="sd">    implementation.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    mode : `str`, optional</span>
-<span class="sd">        The mode of the early stopping. Depends on the metric measuring</span>
-<span class="sd">        performance. When using model loss as metric, use ``mode`` = &#39;min&#39;,</span>
-<span class="sd">        however, when using accuracy as metric, use ``mode`` = &#39;max&#39;. The</span>
-<span class="sd">        default is &#39;max&#39;.</span>
-<span class="sd">    best : `float`, optional</span>
-<span class="sd">        Threshold indicating the best metric score. At instanciation, set</span>
-<span class="sd">        ``best`` to the worst possible score of the metric. ``best`` will be</span>
-<span class="sd">        overwritten during training. The default is 0.</span>
-<span class="sd">    min_delta : `float`, optional</span>
-<span class="sd">        Minimum change in early stopping metric to be considered as an</span>
-<span class="sd">        improvement. The default is 0.</span>
-<span class="sd">    patience : `int`, optional</span>
-<span class="sd">        The number of epochs to wait for an improvement in the early stopping</span>
-<span class="sd">        metric. The default is 10.</span>
-
-<span class="sd">    Raises</span>
-<span class="sd">    ------</span>
-<span class="sd">    ValueError</span>
-<span class="sd">        Raised if ``mode`` is not either &#39;min&#39; or &#39;max&#39;.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    .. _Early stopping:</span>
-<span class="sd">        https://en.wikipedia.org/wiki/Early_stopping</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s1">&#39;max&#39;</span><span class="p">,</span> <span class="n">best</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">min_delta</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">patience</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span>
-
-        <span class="c1"># check if mode is correctly specified</span>
-        <span class="k">if</span> <span class="n">mode</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">&#39;min&#39;</span><span class="p">,</span> <span class="s1">&#39;max&#39;</span><span class="p">]:</span>
-            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;Mode &quot;</span><span class="si">{}</span><span class="s1">&quot; not supported. &#39;</span>
-                             <span class="s1">&#39;Mode is either &quot;min&quot; (check whether the metric &#39;</span>
-                             <span class="s1">&#39;decreased, e.g. loss) or &quot;max&quot; (check whether &#39;</span>
-                             <span class="s1">&#39;the metric increased, e.g. accuracy).&#39;</span>
-                             <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">mode</span><span class="p">))</span>
-
-        <span class="c1"># mode to determine if metric improved</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">mode</span> <span class="o">=</span> <span class="n">mode</span>
-
-        <span class="c1"># whether to check for an increase or a decrease in a given metric</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">is_better</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">decreased</span> <span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s1">&#39;min&#39;</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">increased</span>
-
-        <span class="c1"># minimum change in metric to be considered as an improvement</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">min_delta</span> <span class="o">=</span> <span class="n">min_delta</span>
-
-        <span class="c1"># number of epochs to wait for improvement</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">patience</span> <span class="o">=</span> <span class="n">patience</span>
-
-        <span class="c1"># initialize best metric</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">best</span> <span class="o">=</span> <span class="n">best</span>
-
-        <span class="c1"># initialize early stopping flag</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">early_stop</span> <span class="o">=</span> <span class="kc">False</span>
-
-        <span class="c1"># initialize the early stop counter</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">counter</span> <span class="o">=</span> <span class="mi">0</span>
-
-<div class="viewcode-block" id="EarlyStopping.stop"><a class="viewcode-back" href="../../source/core.html#core.trainer.EarlyStopping.stop">[docs]</a>    <span class="k">def</span> <span class="nf">stop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metric</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Advance early stopping counter.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        metric : `float`</span>
-<span class="sd">            The current metric score.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        early_stop : `bool`</span>
-<span class="sd">            Whether the early stopping criterion is met.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># if the metric improved, reset the epochs counter, else, advance</span>
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_better</span><span class="p">(</span><span class="n">metric</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">best</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">min_delta</span><span class="p">):</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">counter</span> <span class="o">=</span> <span class="mi">0</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">best</span> <span class="o">=</span> <span class="n">metric</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">counter</span> <span class="o">+=</span> <span class="mi">1</span>
-            <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Early stopping counter: </span><span class="si">{}</span><span class="s1">/</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
-                <span class="bp">self</span><span class="o">.</span><span class="n">counter</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">patience</span><span class="p">))</span>
-
-        <span class="c1"># if the metric did not improve over the last patience epochs,</span>
-        <span class="c1"># the early stopping criterion is met</span>
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">counter</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">patience</span><span class="p">:</span>
-            <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Early stopping criterion met, stopping training.&#39;</span><span class="p">)</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">early_stop</span> <span class="o">=</span> <span class="kc">True</span>
-
-        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">early_stop</span></div>
-
-<div class="viewcode-block" id="EarlyStopping.decreased"><a class="viewcode-back" href="../../source/core.html#core.trainer.EarlyStopping.decreased">[docs]</a>    <span class="k">def</span> <span class="nf">decreased</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metric</span><span class="p">,</span> <span class="n">best</span><span class="p">,</span> <span class="n">min_delta</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Whether a metric decreased with respect to a best score.</span>
-
-<span class="sd">        Measure improvement for metrics that are considered as &#39;better&#39; when</span>
-<span class="sd">        they decrease, e.g. model loss, mean squared error, etc.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        metric : `float`</span>
-<span class="sd">            The current score.</span>
-<span class="sd">        best : `float`</span>
-<span class="sd">            The current best score.</span>
-<span class="sd">        min_delta : `float`</span>
-<span class="sd">            Minimum change to be considered as an improvement.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        `bool`</span>
-<span class="sd">            Whether the metric improved.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">metric</span> <span class="o">&lt;</span> <span class="n">best</span> <span class="o">-</span> <span class="n">min_delta</span></div>
-
-<div class="viewcode-block" id="EarlyStopping.increased"><a class="viewcode-back" href="../../source/core.html#core.trainer.EarlyStopping.increased">[docs]</a>    <span class="k">def</span> <span class="nf">increased</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metric</span><span class="p">,</span> <span class="n">best</span><span class="p">,</span> <span class="n">min_delta</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Whether a metric increased with respect to a best score.</span>
-
-<span class="sd">        Measure improvement for metrics that are considered as &#39;better&#39; when</span>
-<span class="sd">        they increase, e.g. accuracy, precision, recall, etc.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        metric : `float`</span>
-<span class="sd">            The current score.</span>
-<span class="sd">        best : `float`</span>
-<span class="sd">            The current best score.</span>
-<span class="sd">        min_delta : `float`</span>
-<span class="sd">            Minimum change to be considered as an improvement.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        `bool`</span>
-<span class="sd">            Whether the metric improved.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">metric</span> <span class="o">&gt;</span> <span class="n">best</span> <span class="o">+</span> <span class="n">min_delta</span></div>
-
-    <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Representation of `~pysegcnn.core.trainer.EarlyStopping`.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        fs : `str`</span>
-<span class="sd">            Representation string.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="n">fs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span>
-        <span class="n">fs</span> <span class="o">+=</span> <span class="s1">&#39;(mode=</span><span class="si">{}</span><span class="s1">, best=</span><span class="si">{:.2f}</span><span class="s1">, delta=</span><span class="si">{}</span><span class="s1">, patience=</span><span class="si">{}</span><span class="s1">)&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">mode</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">best</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">min_delta</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">patience</span><span class="p">)</span>
-
-        <span class="k">return</span> <span class="n">fs</span></div>
-</pre></div>
-
-           </div>
-           
-          </div>
-          <footer>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/_modules/core/transforms.html b/docs/_build/html/_modules/core/transforms.html
deleted file mode 100644
index 51ff97a..0000000
--- a/docs/_build/html/_modules/core/transforms.html
+++ /dev/null
@@ -1,647 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>core.transforms &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
-        <script src="../../_static/jquery.js"></script>
-        <script src="../../_static/underscore.js"></script>
-        <script src="../../_static/doctools.js"></script>
-        <script src="../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul>
-<li class="toctree-l1"><a class="reference internal" href="../../source/requirements.html">Requirements</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/api.html">API Reference</a></li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../../index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-          <li><a href="../index.html">Module code</a> &raquo;</li>
-        
-      <li>core.transforms</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <h1>Source code for core.transforms</h1><div class="highlight"><pre>
-<span></span><span class="sd">&quot;&quot;&quot;Data augmentation.</span>
-
-<span class="sd">This module provides classes implementing common image augmentation methods.</span>
-
-<span class="sd">These methods may be used to artificially increase a dataset.</span>
-
-<span class="sd">License</span>
-<span class="sd">-------</span>
-
-<span class="sd">    Copyright (c) 2020 Daniel Frisinghelli</span>
-
-<span class="sd">    This source code is licensed under the GNU General Public License v3.</span>
-
-<span class="sd">    See the LICENSE file in the repository&#39;s root directory.</span>
-
-<span class="sd">&quot;&quot;&quot;</span>
-
-<span class="c1"># !/usr/bin/env python</span>
-<span class="c1"># -*- coding: utf-8 -*-</span>
-
-<span class="c1"># externals</span>
-<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
-<span class="kn">from</span> <span class="nn">scipy</span> <span class="kn">import</span> <span class="n">ndimage</span>
-
-
-<div class="viewcode-block" id="Transform"><a class="viewcode-back" href="../../source/core.html#core.transforms.Transform">[docs]</a><span class="k">class</span> <span class="nc">Transform</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Base class for an image transformation.&quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="k">pass</span>
-
-    <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">image</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Apply transformation.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        image : `numpy.ndarray`</span>
-<span class="sd">            The image to transform.</span>
-
-<span class="sd">        Raises</span>
-<span class="sd">        ------</span>
-<span class="sd">        NotImplementedError</span>
-<span class="sd">            Raised if `~pysegcnn.core.transforms.Transform` is not inherited.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        None.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">raise</span> <span class="ne">NotImplementedError</span></div>
-
-
-<div class="viewcode-block" id="VariantTransform"><a class="viewcode-back" href="../../source/core.html#core.transforms.VariantTransform">[docs]</a><span class="k">class</span> <span class="nc">VariantTransform</span><span class="p">(</span><span class="n">Transform</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Base class for a spatially variant transformation.</span>
-
-<span class="sd">    Transformation on the ground truth required.</span>
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-
-        <span class="c1"># transformation on the ground truth required</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">invariant</span> <span class="o">=</span> <span class="kc">False</span></div>
-
-
-<div class="viewcode-block" id="InvariantTransform"><a class="viewcode-back" href="../../source/core.html#core.transforms.InvariantTransform">[docs]</a><span class="k">class</span> <span class="nc">InvariantTransform</span><span class="p">(</span><span class="n">Transform</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Base class for a spatially invariant transformation.</span>
-
-<span class="sd">    Transformation on the ground truth not required.</span>
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-
-        <span class="c1"># transformation on the ground truth not required</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">invariant</span> <span class="o">=</span> <span class="kc">True</span></div>
-
-
-<div class="viewcode-block" id="FlipLr"><a class="viewcode-back" href="../../source/core.html#core.transforms.FlipLr">[docs]</a><span class="k">class</span> <span class="nc">FlipLr</span><span class="p">(</span><span class="n">VariantTransform</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Flip an image horizontally.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    p : `float`, optional</span>
-<span class="sd">        The probability to apply the transformation. The default is 0.5.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">p</span><span class="o">=</span><span class="mf">0.5</span><span class="p">):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
-        <span class="c1"># the probability to apply the transformation</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">p</span> <span class="o">=</span> <span class="n">p</span>
-
-    <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">image</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Apply transformation.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        image : `numpy.ndarray`</span>
-<span class="sd">            The image to transform.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        transform : `numpy.ndarray`</span>
-<span class="sd">            The transformed image.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">random</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">p</span><span class="p">:</span>
-            <span class="c1"># transformation applied</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">applied</span> <span class="o">=</span> <span class="kc">True</span>
-            <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">image</span><span class="p">)[</span><span class="o">...</span><span class="p">,</span> <span class="p">::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
-
-        <span class="c1"># transformation not applied</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">applied</span> <span class="o">=</span> <span class="kc">False</span>
-        <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">image</span><span class="p">)</span>
-
-    <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Representation of the transformation.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        repr : `str`</span>
-<span class="sd">            Representation string.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">+</span> <span class="s1">&#39;(p = </span><span class="si">{}</span><span class="s1">)&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">p</span><span class="p">)</span></div>
-
-
-<div class="viewcode-block" id="FlipUd"><a class="viewcode-back" href="../../source/core.html#core.transforms.FlipUd">[docs]</a><span class="k">class</span> <span class="nc">FlipUd</span><span class="p">(</span><span class="n">VariantTransform</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Flip an image vertically.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    p : `float`, optional</span>
-<span class="sd">        The probability to apply the transformation. The default is 0.5.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">p</span><span class="o">=</span><span class="mf">0.5</span><span class="p">):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
-        <span class="c1"># the probability to apply the transformation</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">p</span> <span class="o">=</span> <span class="n">p</span>
-
-    <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">image</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Apply transformation.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        image : `numpy.ndarray`</span>
-<span class="sd">            The image to transform.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        transform : `numpy.ndarray`</span>
-<span class="sd">            The transformed image.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">random</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">p</span><span class="p">:</span>
-            <span class="c1"># transformation applied</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">applied</span> <span class="o">=</span> <span class="kc">True</span>
-            <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">image</span><span class="p">)[</span><span class="o">...</span><span class="p">,</span> <span class="p">::</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="p">:]</span>
-
-        <span class="c1"># transformation not applied</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">applied</span> <span class="o">=</span> <span class="kc">False</span>
-        <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">image</span><span class="p">)</span>
-
-    <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Representation of the transformation.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        repr : `str`</span>
-<span class="sd">            Representation string.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">+</span> <span class="s1">&#39;(p = </span><span class="si">{}</span><span class="s1">)&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">p</span><span class="p">)</span></div>
-
-
-<div class="viewcode-block" id="Rotate"><a class="viewcode-back" href="../../source/core.html#core.transforms.Rotate">[docs]</a><span class="k">class</span> <span class="nc">Rotate</span><span class="p">(</span><span class="n">VariantTransform</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Rotate an image by ``angle``.</span>
-
-<span class="sd">    The image is rotated in the spatial plane.</span>
-
-<span class="sd">    If the input array has more then two dimensions, the spatial dimensions are</span>
-<span class="sd">    assumed to be the last two dimensions of the array.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    angle : `float`</span>
-<span class="sd">        The rotation angle in degrees.</span>
-<span class="sd">    p : `float`, optional</span>
-<span class="sd">        The probability to apply the transformation. The default is 0.5.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">angle</span><span class="p">,</span> <span class="n">p</span><span class="o">=</span><span class="mf">0.5</span><span class="p">):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
-
-        <span class="c1"># the rotation angle</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">angle</span> <span class="o">=</span> <span class="n">angle</span>
-
-        <span class="c1"># the probability to apply the transformation</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">p</span> <span class="o">=</span> <span class="n">p</span>
-
-    <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">image</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Apply transformation.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        image : `numpy.ndarray`</span>
-<span class="sd">            The image to transform.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        transform : `numpy.ndarray`</span>
-<span class="sd">            The transformed image.</span>
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">random</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">p</span><span class="p">:</span>
-
-            <span class="c1"># transformation applied</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">applied</span> <span class="o">=</span> <span class="kc">True</span>
-
-            <span class="c1"># check dimension of input image</span>
-            <span class="n">ndim</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">image</span><span class="p">)</span><span class="o">.</span><span class="n">ndim</span>
-
-            <span class="c1"># axes defining the rotational plane</span>
-            <span class="n">rot_axes</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
-            <span class="k">if</span> <span class="n">ndim</span> <span class="o">&gt;</span> <span class="mi">2</span><span class="p">:</span>
-                <span class="n">rot_axes</span> <span class="o">=</span> <span class="p">(</span><span class="n">ndim</span> <span class="o">-</span> <span class="mi">2</span><span class="p">,</span> <span class="n">ndim</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-
-            <span class="k">return</span> <span class="n">ndimage</span><span class="o">.</span><span class="n">rotate</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">angle</span><span class="p">,</span> <span class="n">axes</span><span class="o">=</span><span class="n">rot_axes</span><span class="p">,</span>
-                                  <span class="n">reshape</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-
-        <span class="c1"># transformation not applied</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">applied</span> <span class="o">=</span> <span class="kc">False</span>
-        <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">image</span><span class="p">)</span>
-
-    <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Representation of the transformation.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        repr : `str`</span>
-<span class="sd">            Representation string.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">+</span> <span class="s1">&#39;(angle = </span><span class="si">{}</span><span class="s1">, p = </span><span class="si">{}</span><span class="s1">)&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">angle</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">p</span><span class="p">)</span></div>
-
-
-<div class="viewcode-block" id="Noise"><a class="viewcode-back" href="../../source/core.html#core.transforms.Noise">[docs]</a><span class="k">class</span> <span class="nc">Noise</span><span class="p">(</span><span class="n">InvariantTransform</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Add gaussian noise to an image.</span>
-
-<span class="sd">    Valid modes are:</span>
-
-<span class="sd">        &#39;add&#39;: image = image + noise</span>
-<span class="sd">        &#39;speckle&#39; : image = image + image * noise</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    mode : `str`</span>
-<span class="sd">        The mode to add the noise.</span>
-<span class="sd">    mean : `float`, optional</span>
-<span class="sd">        The mean of the gaussian distribution from which the noise is sampled.</span>
-<span class="sd">        The default is 0.</span>
-<span class="sd">    var : `float`, optional</span>
-<span class="sd">        The variance of the gaussian distribution from which the noise is</span>
-<span class="sd">        sampled. The default is 0.05.</span>
-<span class="sd">    p : `float`, optional</span>
-<span class="sd">        The probability to apply the transformation. The default is 0.5.</span>
-<span class="sd">    exclude : `list` [`float`] or `list` [`int`], optional</span>
-<span class="sd">        Values for which the noise is not added. Useful for pixels resulting</span>
-<span class="sd">        from image padding. The default is [].</span>
-
-<span class="sd">    Raises</span>
-<span class="sd">    ------</span>
-<span class="sd">    ValueError</span>
-<span class="sd">        Raised if ``mode`` is not supported.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="c1"># supported modes</span>
-    <span class="n">modes</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;add&#39;</span><span class="p">,</span> <span class="s1">&#39;speckle&#39;</span><span class="p">]</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mode</span><span class="p">,</span> <span class="n">mean</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">var</span><span class="o">=</span><span class="mf">0.05</span><span class="p">,</span> <span class="n">p</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span> <span class="n">exclude</span><span class="o">=</span><span class="p">[]):</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
-
-        <span class="c1"># check which kind of noise to apply</span>
-        <span class="k">if</span> <span class="n">mode</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">modes</span><span class="p">:</span>
-            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;Supported noise types are: </span><span class="si">{}</span><span class="s1">.&#39;</span>
-                             <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">modes</span><span class="p">))</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">mode</span> <span class="o">=</span> <span class="n">mode</span>
-
-        <span class="c1"># mean and variance of the gaussian distribution the noise signal is</span>
-        <span class="c1"># sampled from</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">mean</span> <span class="o">=</span> <span class="n">mean</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">var</span> <span class="o">=</span> <span class="n">var</span>
-
-        <span class="c1"># the probability to apply the transformation</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">p</span> <span class="o">=</span> <span class="n">p</span>
-
-        <span class="c1"># the value in the image that should not be modified by the noise</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">exclude</span> <span class="o">=</span> <span class="n">exclude</span>
-
-    <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">image</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Apply transformation.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        image : `numpy.ndarray`</span>
-<span class="sd">            The image to transform.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        transform : `numpy.ndarray`</span>
-<span class="sd">            The transformed image</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">random</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">p</span><span class="p">:</span>
-
-            <span class="c1"># transformation applied</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">applied</span> <span class="o">=</span> <span class="kc">True</span>
-
-            <span class="c1"># generate gaussian noise</span>
-            <span class="n">noise</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">normal</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mean</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">var</span><span class="p">,</span> <span class="n">image</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span>
-
-            <span class="c1"># check which values should not be modified by adding noise</span>
-            <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">exclude</span><span class="p">:</span>
-                <span class="n">noise</span><span class="p">[</span><span class="n">image</span> <span class="o">==</span> <span class="n">val</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
-
-            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">mode</span> <span class="o">==</span> <span class="s1">&#39;gaussian&#39;</span><span class="p">:</span>
-                <span class="k">return</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">image</span><span class="p">)</span> <span class="o">+</span> <span class="n">noise</span><span class="p">)</span><span class="o">.</span><span class="n">clip</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
-
-            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">mode</span> <span class="o">==</span> <span class="s1">&#39;speckle&#39;</span><span class="p">:</span>
-                <span class="k">return</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">image</span><span class="p">)</span> <span class="o">+</span>
-                        <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">image</span><span class="p">)</span> <span class="o">*</span> <span class="n">noise</span><span class="p">)</span><span class="o">.</span><span class="n">clip</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
-
-        <span class="c1"># transformation not applied</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">applied</span> <span class="o">=</span> <span class="kc">False</span>
-        <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">image</span><span class="p">)</span>
-
-    <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Representation of the transformation.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        repr : `str`</span>
-<span class="sd">            Representation string.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">+</span> <span class="p">(</span><span class="s1">&#39;(mode = </span><span class="si">{}</span><span class="s1">, mean = </span><span class="si">{}</span><span class="s1">, var = </span><span class="si">{}</span><span class="s1">, &#39;</span>
-                                          <span class="s1">&#39;p = </span><span class="si">{}</span><span class="s1">)&#39;</span>
-                                          <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mode</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">mean</span><span class="p">,</span>
-                                                  <span class="bp">self</span><span class="o">.</span><span class="n">var</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">p</span><span class="p">))</span></div>
-
-
-<div class="viewcode-block" id="Augment"><a class="viewcode-back" href="../../source/core.html#core.transforms.Augment">[docs]</a><span class="k">class</span> <span class="nc">Augment</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Apply a sequence of transformations.</span>
-
-<span class="sd">    Container class applying each transformation in ``transforms`` in order.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    transforms : `list` or `tuple`</span>
-<span class="sd">        A sequence of instances of `pysegcnn.core.transforms.VariantTransform`</span>
-<span class="sd">        or `pysegcnn.core.transforms.InvariantTransform`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">transforms</span><span class="p">):</span>
-        <span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">transforms</span><span class="p">,</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">))</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">transforms</span> <span class="o">=</span> <span class="n">transforms</span>
-
-    <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">image</span><span class="p">,</span> <span class="n">gt</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Apply a sequence of transformations to ``image``.</span>
-
-<span class="sd">        For each spatially variant transformation, the ground truth ``gt`` is</span>
-<span class="sd">        transformed respectively.</span>
-
-<span class="sd">        Parameters</span>
-<span class="sd">        ----------</span>
-<span class="sd">        image : `numpy.ndarray`</span>
-<span class="sd">            The input image.</span>
-<span class="sd">        gt : `numpy.ndarray`</span>
-<span class="sd">            The corresponding ground truth of ``image``.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        image : `numpy.ndarray`</span>
-<span class="sd">            The transformed image.</span>
-<span class="sd">        gt : `numpy.ndarray`</span>
-<span class="sd">            The transformed ground truth.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="c1"># apply transformations to the input image in specified order</span>
-        <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">transforms</span><span class="p">:</span>
-            <span class="n">image</span> <span class="o">=</span> <span class="n">t</span><span class="p">(</span><span class="n">image</span><span class="p">)</span>
-
-            <span class="c1"># check whether the transformations are invariant and if not, apply</span>
-            <span class="c1"># the transformation also to the ground truth</span>
-            <span class="k">if</span> <span class="ow">not</span> <span class="n">t</span><span class="o">.</span><span class="n">invariant</span> <span class="ow">and</span> <span class="n">t</span><span class="o">.</span><span class="n">applied</span><span class="p">:</span>
-                <span class="c1"># get the probability with which the transformation is applied</span>
-                <span class="n">p</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">p</span>
-
-                <span class="c1"># overwrite the probability to 1, to ensure the same</span>
-                <span class="c1"># transformation is applied on the ground truth</span>
-                <span class="n">t</span><span class="o">.</span><span class="n">p</span> <span class="o">=</span> <span class="mi">1</span>
-
-                <span class="c1"># transform ground truth</span>
-                <span class="n">gt</span> <span class="o">=</span> <span class="n">t</span><span class="p">(</span><span class="n">gt</span><span class="p">)</span>
-
-                <span class="c1"># reset probability to original value</span>
-                <span class="n">t</span><span class="o">.</span><span class="n">p</span> <span class="o">=</span> <span class="n">p</span>
-
-        <span class="k">return</span> <span class="n">image</span><span class="p">,</span> <span class="n">gt</span>
-
-    <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Representation of `~pysegcnn.core.transforms.Augment`.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        repr : `str`</span>
-<span class="sd">            Representation string.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-        <span class="n">fstring</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">+</span> <span class="s1">&#39;(&#39;</span>
-        <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">transforms</span><span class="p">:</span>
-            <span class="n">fstring</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span>
-            <span class="n">fstring</span> <span class="o">+=</span> <span class="s1">&#39;    </span><span class="si">{0}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
-        <span class="n">fstring</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">)&#39;</span>
-        <span class="k">return</span> <span class="n">fstring</span></div>
-</pre></div>
-
-           </div>
-           
-          </div>
-          <footer>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/_modules/core/utils.html b/docs/_build/html/_modules/core/utils.html
deleted file mode 100644
index 7b1803b..0000000
--- a/docs/_build/html/_modules/core/utils.html
+++ /dev/null
@@ -1,1481 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>core.utils &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
-        <script src="../../_static/jquery.js"></script>
-        <script src="../../_static/underscore.js"></script>
-        <script src="../../_static/doctools.js"></script>
-        <script src="../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul>
-<li class="toctree-l1"><a class="reference internal" href="../../source/requirements.html">Requirements</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../source/api.html">API Reference</a></li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../../index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-          <li><a href="../index.html">Module code</a> &raquo;</li>
-        
-      <li>core.utils</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <h1>Source code for core.utils</h1><div class="highlight"><pre>
-<span></span><span class="sd">&quot;&quot;&quot;Utility functions mainly for image IO and reshaping.</span>
-
-<span class="sd">License</span>
-<span class="sd">-------</span>
-
-<span class="sd">    Copyright (c) 2020 Daniel Frisinghelli</span>
-
-<span class="sd">    This source code is licensed under the GNU General Public License v3.</span>
-
-<span class="sd">    See the LICENSE file in the repository&#39;s root directory.</span>
-
-<span class="sd">&quot;&quot;&quot;</span>
-
-<span class="c1"># !/usr/bin/env python</span>
-<span class="c1"># -*- coding: utf-8 -*-</span>
-
-<span class="c1"># builtins</span>
-<span class="kn">import</span> <span class="nn">os</span>
-<span class="kn">import</span> <span class="nn">re</span>
-<span class="kn">import</span> <span class="nn">shutil</span>
-<span class="kn">import</span> <span class="nn">logging</span>
-<span class="kn">import</span> <span class="nn">pathlib</span>
-<span class="kn">import</span> <span class="nn">tarfile</span>
-<span class="kn">import</span> <span class="nn">zipfile</span>
-<span class="kn">import</span> <span class="nn">datetime</span>
-<span class="kn">import</span> <span class="nn">warnings</span>
-
-<span class="c1"># externals</span>
-<span class="kn">import</span> <span class="nn">gdal</span>
-<span class="kn">import</span> <span class="nn">torch</span>
-<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
-
-<span class="c1"># module level logger</span>
-<span class="n">LOGGER</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
-
-<span class="c1"># suffixes for radiometrically calibrated scenes</span>
-<span class="n">SUFFIXES</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;toa_ref&#39;</span><span class="p">,</span> <span class="s1">&#39;toa_rad&#39;</span><span class="p">,</span> <span class="s1">&#39;toa_brt&#39;</span><span class="p">]</span>
-
-
-<div class="viewcode-block" id="img2np"><a class="viewcode-back" href="../../source/core.html#core.utils.img2np">[docs]</a><span class="k">def</span> <span class="nf">img2np</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">tile_size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tile</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">cval</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Read an image to a `numpy.ndarray`.</span>
-
-<span class="sd">    If ``tile_size`` is not `None`, the input image is divided into square</span>
-<span class="sd">    tiles of size (``tile_size``, ``tile_size``). If the image is not evenly</span>
-<span class="sd">    divisible and ``pad`` = False, a `ValueError` is raised. However, if</span>
-<span class="sd">    ``pad`` = True, center padding with constant value ``cval`` is applied.</span>
-
-<span class="sd">    The tiling works as follows:</span>
-
-<span class="sd">        (Padded) Input image:</span>
-
-<span class="sd">        ------------------------------------------------</span>
-<span class="sd">        |           |           |          |           |</span>
-<span class="sd">        |  tile_00  |  tile_01  |    ...   |  tile_0n  |</span>
-<span class="sd">        |           |           |          |           |</span>
-<span class="sd">        |----------------------------------------------|</span>
-<span class="sd">        |           |           |          |           |</span>
-<span class="sd">        |  tile_10  |  tile_11  |    ...   |  tile_1n  |</span>
-<span class="sd">        |           |           |          |           |</span>
-<span class="sd">        |----------------------------------------------|</span>
-<span class="sd">        |           |           |          |           |</span>
-<span class="sd">        |    ...    |    ...    |    ...   |    ...    |</span>
-<span class="sd">        |           |           |          |           |</span>
-<span class="sd">        |----------------------------------------------|</span>
-<span class="sd">        |           |           |          |           |</span>
-<span class="sd">        |  tile_m0  |  tile_m1  |    ...   |  tile_mn  |</span>
-<span class="sd">        |           |           |          |           |</span>
-<span class="sd">        ------------------------------------------------</span>
-
-<span class="sd">    where m = n. Each tile has its id, which starts at 0 in the topleft corner</span>
-<span class="sd">    of the input image, i.e. tile_00 has id=0, and increases along the width</span>
-<span class="sd">    axis, i.e. tile_0n has id=n, tile_10 has id=n+1, ..., tile_mn has</span>
-<span class="sd">    id=(m * n) - 1.</span>
-
-<span class="sd">    If ``tile`` is an integer, only the tile with id = ``tile`` is returned.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    path : `str` or `None` or `numpy.ndarray`</span>
-<span class="sd">        The image to read.</span>
-<span class="sd">    tile_size : `None` or `int`, optional</span>
-<span class="sd">        The size of a tile. The default is None.</span>
-<span class="sd">    tile : `int`, optional</span>
-<span class="sd">        The tile id. The default is None.</span>
-<span class="sd">    pad : `bool`, optional</span>
-<span class="sd">        Whether to center pad the input image. The default is False.</span>
-<span class="sd">    cval : `float`, optional</span>
-<span class="sd">        The constant padding value. The default is 0.</span>
-
-<span class="sd">    Raises</span>
-<span class="sd">    ------</span>
-<span class="sd">    FileNotFoundError</span>
-<span class="sd">        Raised if ``path`` is a path that does not exist.</span>
-<span class="sd">    TypeError</span>
-<span class="sd">        Raised if ``path`` is not `str` or `None` or `numpy.ndarray`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    image : `numpy.ndarray`</span>
-<span class="sd">        The image array. The output shape is:</span>
-
-<span class="sd">            if ``tile_size`` is not `None`:</span>
-<span class="sd">                shape=(tiles, bands, tile_size, tile_size)</span>
-<span class="sd">                if the image does only have one band:</span>
-<span class="sd">                    shape=(tiles, tile_size, tile_size)</span>
-
-<span class="sd">            else:</span>
-<span class="sd">                shape=(bands, height, width)</span>
-<span class="sd">                if the image does only have one band:</span>
-<span class="sd">                    shape=(height, width)</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># check the type of path</span>
-    <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-        <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
-            <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1"> does not exist.&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">path</span><span class="p">))</span>
-        <span class="c1"># the image dataset as returned by gdal</span>
-        <span class="n">img</span> <span class="o">=</span> <span class="n">gdal</span><span class="o">.</span><span class="n">Open</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
-
-        <span class="c1"># number of bands</span>
-        <span class="n">bands</span> <span class="o">=</span> <span class="n">img</span><span class="o">.</span><span class="n">RasterCount</span>
-
-        <span class="c1"># spatial size</span>
-        <span class="n">height</span> <span class="o">=</span> <span class="n">img</span><span class="o">.</span><span class="n">RasterYSize</span>
-        <span class="n">width</span> <span class="o">=</span> <span class="n">img</span><span class="o">.</span><span class="n">RasterXSize</span>
-
-    <span class="k">elif</span> <span class="n">path</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s1">&#39;Path is of NoneType, returning.&#39;</span><span class="p">)</span>
-        <span class="k">return</span>
-
-    <span class="c1"># accept numpy arrays as input</span>
-    <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">):</span>
-        <span class="n">img</span> <span class="o">=</span> <span class="n">path</span>
-        <span class="n">bands</span> <span class="o">=</span> <span class="n">img</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-        <span class="n">height</span> <span class="o">=</span> <span class="n">img</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-        <span class="n">width</span> <span class="o">=</span> <span class="n">img</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
-
-    <span class="k">else</span><span class="p">:</span>
-        <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;Input of type </span><span class="si">{}</span><span class="s1"> not supported&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">img</span><span class="p">)))</span>
-
-    <span class="c1"># check whether to read the image in tiles</span>
-    <span class="k">if</span> <span class="n">tile_size</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-
-        <span class="c1"># number of tiles</span>
-        <span class="n">ntiles</span> <span class="o">=</span> <span class="mi">1</span>
-
-        <span class="c1"># create empty numpy array to store whole image</span>
-        <span class="n">image</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty</span><span class="p">(</span><span class="n">shape</span><span class="o">=</span><span class="p">(</span><span class="n">ntiles</span><span class="p">,</span> <span class="n">bands</span><span class="p">,</span> <span class="n">height</span><span class="p">,</span> <span class="n">width</span><span class="p">))</span>
-
-        <span class="c1"># iterate over the bands of the image</span>
-        <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">bands</span><span class="p">):</span>
-
-            <span class="c1"># read the data of band b</span>
-            <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">img</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">):</span>
-                <span class="n">data</span> <span class="o">=</span> <span class="n">img</span><span class="p">[</span><span class="n">b</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span>
-            <span class="k">else</span><span class="p">:</span>
-                <span class="n">band</span> <span class="o">=</span> <span class="n">img</span><span class="o">.</span><span class="n">GetRasterBand</span><span class="p">(</span><span class="n">b</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
-                <span class="n">data</span> <span class="o">=</span> <span class="n">band</span><span class="o">.</span><span class="n">ReadAsArray</span><span class="p">()</span>
-
-            <span class="c1"># append band b to numpy image array</span>
-            <span class="n">image</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="p">:,</span> <span class="p">:]</span> <span class="o">=</span> <span class="n">data</span>
-
-    <span class="k">else</span><span class="p">:</span>
-
-        <span class="c1"># check whether the image is evenly divisible in square tiles</span>
-        <span class="c1"># of size (tile_size x tile_size)</span>
-        <span class="n">ntiles</span><span class="p">,</span> <span class="n">padding</span> <span class="o">=</span> <span class="n">is_divisible</span><span class="p">((</span><span class="n">height</span><span class="p">,</span> <span class="n">width</span><span class="p">),</span> <span class="n">tile_size</span><span class="p">,</span> <span class="n">pad</span><span class="p">)</span>
-
-        <span class="c1"># image size after padding</span>
-        <span class="n">y_size</span> <span class="o">=</span> <span class="n">height</span> <span class="o">+</span> <span class="n">padding</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">padding</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
-        <span class="n">x_size</span> <span class="o">=</span> <span class="n">width</span> <span class="o">+</span> <span class="n">padding</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">padding</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
-
-        <span class="c1"># print progress</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s1">&#39;Image size: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">((</span><span class="n">height</span><span class="p">,</span> <span class="n">width</span><span class="p">)))</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s1">&#39;Dividing image into </span><span class="si">{}</span><span class="s1"> tiles of size </span><span class="si">{}</span><span class="s1"> ...&#39;</span>
-                     <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ntiles</span><span class="p">,</span> <span class="p">(</span><span class="n">tile_size</span><span class="p">,</span> <span class="n">tile_size</span><span class="p">)))</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s1">&#39;Padding image (b, l, t, r): </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">tuple</span><span class="p">(</span><span class="n">padding</span><span class="p">)))</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s1">&#39;Padded image size: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">((</span><span class="n">y_size</span><span class="p">,</span> <span class="n">x_size</span><span class="p">)))</span>
-
-        <span class="c1"># get the indices of the top left corner for each tile</span>
-        <span class="n">topleft</span> <span class="o">=</span> <span class="n">tile_topleft_corner</span><span class="p">((</span><span class="n">y_size</span><span class="p">,</span> <span class="n">x_size</span><span class="p">),</span> <span class="n">tile_size</span><span class="p">)</span>
-
-        <span class="c1"># whether to read all tiles or a single tile</span>
-        <span class="k">if</span> <span class="n">tile</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-            <span class="n">ntiles</span> <span class="o">=</span> <span class="mi">1</span>
-
-        <span class="c1"># create empty numpy array to store the tiles</span>
-        <span class="n">image</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ones</span><span class="p">((</span><span class="n">ntiles</span><span class="p">,</span> <span class="n">bands</span><span class="p">,</span> <span class="n">tile_size</span><span class="p">,</span> <span class="n">tile_size</span><span class="p">))</span> <span class="o">*</span> <span class="n">cval</span>
-
-        <span class="c1"># iterate over the topleft corners of the tiles</span>
-        <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">corner</span> <span class="ow">in</span> <span class="n">topleft</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-
-            <span class="c1"># in case a single tile is required, skip the rest of the tiles</span>
-            <span class="k">if</span> <span class="n">tile</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-                <span class="k">if</span> <span class="n">k</span> <span class="o">!=</span> <span class="n">tile</span><span class="p">:</span>
-                    <span class="k">continue</span>
-
-                <span class="c1"># set the key to 0 for correct array indexing when reading</span>
-                <span class="c1"># a single tile from the image</span>
-                <span class="n">LOGGER</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s1">&#39;Processing tile </span><span class="si">{}</span><span class="s1"> ...&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">k</span><span class="p">))</span>
-                <span class="n">k</span> <span class="o">=</span> <span class="mi">0</span>
-            <span class="k">else</span><span class="p">:</span>
-                <span class="n">LOGGER</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s1">&#39;Creating tile </span><span class="si">{}</span><span class="s1"> with top-left corner </span><span class="si">{}</span><span class="s1"> ...&#39;</span>
-                             <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">corner</span><span class="p">))</span>
-
-            <span class="c1"># calculate shift between padded and original image</span>
-            <span class="n">row</span> <span class="o">=</span> <span class="n">corner</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">padding</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="k">if</span> <span class="n">corner</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">corner</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-            <span class="n">col</span> <span class="o">=</span> <span class="n">corner</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">padding</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="n">corner</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">corner</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-            <span class="n">y_tl</span> <span class="o">=</span> <span class="n">row</span> <span class="o">+</span> <span class="n">padding</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="k">if</span> <span class="n">row</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="mi">0</span>
-            <span class="n">x_tl</span> <span class="o">=</span> <span class="n">col</span> <span class="o">+</span> <span class="n">padding</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="n">col</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="mi">0</span>
-
-            <span class="c1"># iterate over the bands of the image</span>
-            <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">bands</span><span class="p">):</span>
-
-                <span class="c1"># check if the current tile extend exists in the image</span>
-                <span class="n">nrows</span><span class="p">,</span> <span class="n">ncols</span> <span class="o">=</span> <span class="n">check_tile_extend</span><span class="p">(</span>
-                    <span class="p">(</span><span class="n">height</span><span class="p">,</span> <span class="n">width</span><span class="p">),</span> <span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">col</span><span class="p">),</span> <span class="n">tile_size</span><span class="p">)</span>
-
-                <span class="c1"># read the current tile from band b</span>
-                <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">img</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">):</span>
-                    <span class="n">data</span> <span class="o">=</span> <span class="n">img</span><span class="p">[</span><span class="n">b</span><span class="p">,</span> <span class="n">row</span><span class="p">:</span><span class="n">row</span><span class="o">+</span><span class="n">nrows</span><span class="p">,</span> <span class="n">col</span><span class="p">:</span><span class="n">col</span><span class="o">+</span><span class="n">ncols</span><span class="p">]</span>
-                <span class="k">else</span><span class="p">:</span>
-                    <span class="n">band</span> <span class="o">=</span> <span class="n">img</span><span class="o">.</span><span class="n">GetRasterBand</span><span class="p">(</span><span class="n">b</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
-                    <span class="n">data</span> <span class="o">=</span> <span class="n">band</span><span class="o">.</span><span class="n">ReadAsArray</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">row</span><span class="p">,</span> <span class="n">ncols</span><span class="p">,</span> <span class="n">nrows</span><span class="p">)</span>
-
-                <span class="c1"># append band b to numpy image array</span>
-                <span class="n">image</span><span class="p">[</span><span class="n">k</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">y_tl</span><span class="p">:</span><span class="n">nrows</span><span class="p">,</span> <span class="n">x_tl</span><span class="p">:</span><span class="n">ncols</span><span class="p">]</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">:(</span><span class="n">nrows</span> <span class="o">-</span> <span class="n">y_tl</span><span class="p">),</span>
-                                                           <span class="mi">0</span><span class="p">:(</span><span class="n">ncols</span> <span class="o">-</span> <span class="n">x_tl</span><span class="p">)]</span>
-
-    <span class="c1"># check if there are more than 1 band</span>
-    <span class="k">if</span> <span class="ow">not</span> <span class="n">bands</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-        <span class="n">image</span> <span class="o">=</span> <span class="n">image</span><span class="o">.</span><span class="n">squeeze</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
-
-    <span class="c1"># check if there are more than 1 tile</span>
-    <span class="k">if</span> <span class="ow">not</span> <span class="n">ntiles</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-        <span class="n">image</span> <span class="o">=</span> <span class="n">image</span><span class="o">.</span><span class="n">squeeze</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
-
-    <span class="c1"># close tif file</span>
-    <span class="k">del</span> <span class="n">img</span>
-
-    <span class="c1"># return the image</span>
-    <span class="k">return</span> <span class="n">image</span></div>
-
-
-<div class="viewcode-block" id="is_divisible"><a class="viewcode-back" href="../../source/core.html#core.utils.is_divisible">[docs]</a><span class="k">def</span> <span class="nf">is_divisible</span><span class="p">(</span><span class="n">img_size</span><span class="p">,</span> <span class="n">tile_size</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Check whether an image is evenly divisible into square tiles.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    img_size : `tuple`</span>
-<span class="sd">        The image size (height, width).</span>
-<span class="sd">    tile_size : `int`</span>
-<span class="sd">        The size of the tile.</span>
-<span class="sd">    pad : `bool`, optional</span>
-<span class="sd">        Whether to center pad the input image. The default is False.</span>
-
-<span class="sd">    Raises</span>
-<span class="sd">    ------</span>
-<span class="sd">    ValueError</span>
-<span class="sd">        Raised if the image is not evenly divisible and ``pad`` = False.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    ntiles : `int`</span>
-<span class="sd">        The number of tiles fitting ``img_size``.</span>
-<span class="sd">    padding : `tuple`</span>
-<span class="sd">        The amount of padding (bottom, left, top, right).</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># calculate number of pixels per tile</span>
-    <span class="n">pixels_per_tile</span> <span class="o">=</span> <span class="n">tile_size</span> <span class="o">**</span> <span class="mi">2</span>
-
-    <span class="c1"># check whether the image is evenly divisible in square tiles of size</span>
-    <span class="c1"># (tile_size, tile_size)</span>
-    <span class="n">ntiles</span> <span class="o">=</span> <span class="p">((</span><span class="n">img_size</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">img_size</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">/</span> <span class="n">pixels_per_tile</span><span class="p">)</span>
-
-    <span class="c1"># if it is evenly divisible, no padding is required</span>
-    <span class="k">if</span> <span class="n">ntiles</span><span class="o">.</span><span class="n">is_integer</span><span class="p">():</span>
-        <span class="n">padding</span> <span class="o">=</span> <span class="mi">4</span> <span class="o">*</span> <span class="p">(</span><span class="mi">0</span><span class="p">,)</span>
-
-    <span class="k">if</span> <span class="ow">not</span> <span class="n">ntiles</span><span class="o">.</span><span class="n">is_integer</span><span class="p">()</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">pad</span><span class="p">:</span>
-        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;Image of size </span><span class="si">{}</span><span class="s1"> not evenly divisible in (</span><span class="si">{}</span><span class="s1">, </span><span class="si">{}</span><span class="s1">) &#39;</span>
-                         <span class="s1">&#39;tiles.&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">img_size</span><span class="p">,</span> <span class="n">tile_size</span><span class="p">,</span> <span class="n">tile_size</span><span class="p">))</span>
-
-    <span class="k">if</span> <span class="ow">not</span> <span class="n">ntiles</span><span class="o">.</span><span class="n">is_integer</span><span class="p">()</span> <span class="ow">and</span> <span class="n">pad</span><span class="p">:</span>
-
-        <span class="c1"># calculate the desired image size, i.e. the smallest size that is</span>
-        <span class="c1"># evenly divisible into square tiles of size (tile_size, tile_size)</span>
-        <span class="n">h_new</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="n">img_size</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">/</span> <span class="n">tile_size</span><span class="p">)</span> <span class="o">*</span> <span class="n">tile_size</span><span class="p">)</span>
-        <span class="n">w_new</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="n">img_size</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">/</span> <span class="n">tile_size</span><span class="p">)</span> <span class="o">*</span> <span class="n">tile_size</span><span class="p">)</span>
-
-        <span class="c1"># calculate center offset</span>
-        <span class="n">dh</span> <span class="o">=</span> <span class="n">h_new</span> <span class="o">-</span> <span class="n">img_size</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-        <span class="n">dw</span> <span class="o">=</span> <span class="n">w_new</span> <span class="o">-</span> <span class="n">img_size</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-
-        <span class="c1"># check whether the center offsets are even or odd</span>
-
-        <span class="c1"># in case both offsets are even, the padding is symmetric on both the</span>
-        <span class="c1"># bottom/top and left/right</span>
-        <span class="k">if</span> <span class="ow">not</span> <span class="n">dh</span> <span class="o">%</span> <span class="mi">2</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">dw</span> <span class="o">%</span> <span class="mi">2</span><span class="p">:</span>
-            <span class="n">padding</span> <span class="o">=</span> <span class="p">(</span><span class="n">dh</span> <span class="o">//</span> <span class="mi">2</span><span class="p">,</span> <span class="n">dw</span> <span class="o">//</span> <span class="mi">2</span><span class="p">,</span> <span class="n">dh</span> <span class="o">//</span> <span class="mi">2</span><span class="p">,</span> <span class="n">dw</span> <span class="o">//</span> <span class="mi">2</span><span class="p">)</span>
-
-        <span class="c1"># in case only one offset is even, the padding is symmetric along the</span>
-        <span class="c1"># even offset and asymmetric along the odd offset</span>
-        <span class="k">if</span> <span class="ow">not</span> <span class="n">dh</span> <span class="o">%</span> <span class="mi">2</span> <span class="ow">and</span> <span class="n">dw</span> <span class="o">%</span> <span class="mi">2</span><span class="p">:</span>
-            <span class="n">padding</span> <span class="o">=</span> <span class="p">(</span><span class="n">dh</span> <span class="o">//</span> <span class="mi">2</span><span class="p">,</span> <span class="n">dw</span> <span class="o">//</span> <span class="mi">2</span><span class="p">,</span> <span class="n">dh</span> <span class="o">//</span> <span class="mi">2</span><span class="p">,</span> <span class="n">dw</span> <span class="o">//</span> <span class="mi">2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
-        <span class="k">if</span> <span class="n">dh</span> <span class="o">%</span> <span class="mi">2</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">dw</span> <span class="o">%</span> <span class="mi">2</span><span class="p">:</span>
-            <span class="n">padding</span> <span class="o">=</span> <span class="p">(</span><span class="n">dh</span> <span class="o">//</span> <span class="mi">2</span><span class="p">,</span> <span class="n">dw</span> <span class="o">//</span> <span class="mi">2</span><span class="p">,</span> <span class="n">dh</span> <span class="o">//</span> <span class="mi">2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">dw</span> <span class="o">//</span> <span class="mi">2</span><span class="p">)</span>
-
-        <span class="c1"># in case of offsets are odd, the padding is asymmetric on both the</span>
-        <span class="c1"># bottom/top and left/right</span>
-        <span class="k">if</span> <span class="n">dh</span> <span class="o">%</span> <span class="mi">2</span> <span class="ow">and</span> <span class="n">dw</span> <span class="o">%</span> <span class="mi">2</span><span class="p">:</span>
-            <span class="n">padding</span> <span class="o">=</span> <span class="p">(</span><span class="n">dh</span> <span class="o">//</span> <span class="mi">2</span><span class="p">,</span> <span class="n">dw</span> <span class="o">//</span> <span class="mi">2</span><span class="p">,</span> <span class="n">dh</span> <span class="o">//</span> <span class="mi">2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">dw</span> <span class="o">//</span> <span class="mi">2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
-
-        <span class="c1"># calculate number of tiles on padded image</span>
-        <span class="n">ntiles</span> <span class="o">=</span> <span class="p">(</span><span class="n">h_new</span> <span class="o">*</span> <span class="n">w_new</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">tile_size</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>
-
-    <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">ntiles</span><span class="p">),</span> <span class="n">padding</span></div>
-
-
-<div class="viewcode-block" id="check_tile_extend"><a class="viewcode-back" href="../../source/core.html#core.utils.check_tile_extend">[docs]</a><span class="k">def</span> <span class="nf">check_tile_extend</span><span class="p">(</span><span class="n">img_size</span><span class="p">,</span> <span class="n">topleft</span><span class="p">,</span> <span class="n">tile_size</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Check if a tile exceeds the image size.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    img_size : `tuple`</span>
-<span class="sd">        The image size (height, width).</span>
-<span class="sd">    topleft : `tuple`</span>
-<span class="sd">        The topleft corner of the tile (y, x).</span>
-<span class="sd">    tile_size : `int`</span>
-<span class="sd">        The size of the tile.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    nrows : `int`</span>
-<span class="sd">        Number of rows of the tile within the image.</span>
-<span class="sd">    ncols : TYPE</span>
-<span class="sd">        Number of columns of the tile within the image.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># check if the tile is within both the rows and the columns of the image</span>
-    <span class="k">if</span> <span class="p">(</span><span class="n">topleft</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">tile_size</span> <span class="o">&lt;</span> <span class="n">img_size</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">and</span>
-            <span class="n">topleft</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">tile_size</span> <span class="o">&lt;</span> <span class="n">img_size</span><span class="p">[</span><span class="mi">1</span><span class="p">]):</span>
-
-        <span class="c1"># both rows and columns can be equal to the tile size</span>
-        <span class="n">nrows</span><span class="p">,</span> <span class="n">ncols</span> <span class="o">=</span> <span class="n">tile_size</span><span class="p">,</span> <span class="n">tile_size</span>
-
-    <span class="c1"># check if the tile exceeds one of rows or columns of the image</span>
-    <span class="k">if</span> <span class="p">(</span><span class="n">topleft</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">tile_size</span> <span class="o">&lt;</span> <span class="n">img_size</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">and</span> <span class="ow">not</span>
-            <span class="n">topleft</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">tile_size</span> <span class="o">&lt;</span> <span class="n">img_size</span><span class="p">[</span><span class="mi">1</span><span class="p">]):</span>
-
-        <span class="c1"># adjust columns to remaining columns in the original image</span>
-        <span class="n">nrows</span><span class="p">,</span> <span class="n">ncols</span> <span class="o">=</span> <span class="n">tile_size</span><span class="p">,</span> <span class="n">img_size</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">topleft</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-
-    <span class="k">if</span> <span class="p">(</span><span class="n">topleft</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">tile_size</span> <span class="o">&lt;</span> <span class="n">img_size</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">and</span> <span class="ow">not</span>
-            <span class="n">topleft</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">tile_size</span> <span class="o">&lt;</span> <span class="n">img_size</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span>
-
-        <span class="c1"># adjust rows to remaining rows in the original image</span>
-        <span class="n">nrows</span><span class="p">,</span> <span class="n">ncols</span> <span class="o">=</span> <span class="n">img_size</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">topleft</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">tile_size</span>
-
-    <span class="c1"># check if the tile exceeds both the rows and the columns of the image</span>
-    <span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="n">topleft</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">tile_size</span> <span class="o">&lt;</span> <span class="n">img_size</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">and</span> <span class="ow">not</span>
-            <span class="n">topleft</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">tile_size</span> <span class="o">&lt;</span> <span class="n">img_size</span><span class="p">[</span><span class="mi">1</span><span class="p">]):</span>
-
-        <span class="c1"># adjust both rows and columns to the remaining ones</span>
-        <span class="n">nrows</span><span class="p">,</span> <span class="n">ncols</span> <span class="o">=</span> <span class="n">img_size</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">topleft</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">img_size</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">topleft</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-
-    <span class="k">return</span> <span class="n">nrows</span><span class="p">,</span> <span class="n">ncols</span></div>
-
-
-<div class="viewcode-block" id="tile_topleft_corner"><a class="viewcode-back" href="../../source/core.html#core.utils.tile_topleft_corner">[docs]</a><span class="k">def</span> <span class="nf">tile_topleft_corner</span><span class="p">(</span><span class="n">img_size</span><span class="p">,</span> <span class="n">tile_size</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Return the topleft corners of the tiles in the image.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    img_size : `tuple`</span>
-<span class="sd">        The image size (height, width).</span>
-<span class="sd">    tile_size : `int`</span>
-<span class="sd">        The size of the tile.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    indices : `dict`</span>
-<span class="sd">        The keys of ``indices`` are the tile ids (`int`) and the values are the</span>
-<span class="sd">        topleft corners (`tuple` = (y, x)) of the tiles.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># check if the image is divisible into square tiles of size</span>
-    <span class="c1"># (tile_size, tile_size)</span>
-    <span class="n">_</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">is_divisible</span><span class="p">(</span><span class="n">img_size</span><span class="p">,</span> <span class="n">tile_size</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-
-    <span class="c1"># number of tiles along the width (columns) of the image</span>
-    <span class="n">ntiles_columns</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">img_size</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">/</span> <span class="n">tile_size</span><span class="p">)</span>
-
-    <span class="c1"># number of tiles along the height (rows) of the image</span>
-    <span class="n">ntiles_rows</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">img_size</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">/</span> <span class="n">tile_size</span><span class="p">)</span>
-
-    <span class="c1"># get the indices of the top left corner for each tile</span>
-    <span class="n">indices</span> <span class="o">=</span> <span class="p">{}</span>
-    <span class="n">k</span> <span class="o">=</span> <span class="mi">0</span>
-    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ntiles_rows</span><span class="p">):</span>
-        <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ntiles_columns</span><span class="p">):</span>
-            <span class="n">indices</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">i</span> <span class="o">*</span> <span class="n">tile_size</span><span class="p">,</span> <span class="n">j</span> <span class="o">*</span> <span class="n">tile_size</span><span class="p">)</span>
-            <span class="n">k</span> <span class="o">+=</span> <span class="mi">1</span>
-
-    <span class="k">return</span> <span class="n">indices</span></div>
-
-
-<div class="viewcode-block" id="reconstruct_scene"><a class="viewcode-back" href="../../source/core.html#core.utils.reconstruct_scene">[docs]</a><span class="k">def</span> <span class="nf">reconstruct_scene</span><span class="p">(</span><span class="n">tiles</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Reconstruct a tiled image.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    tiles : `torch.Tensor` or `numpy.ndarray`</span>
-<span class="sd">        The tiled image, shape=(tiles, bands, tile_size, tile_size) or</span>
-<span class="sd">        shape=(tiles, tile_size, tile_size).</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    image : `numpy.ndarray`</span>
-<span class="sd">        The reconstructed image.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># convert to numpy array</span>
-    <span class="n">tiles</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">tiles</span><span class="p">)</span>
-
-    <span class="c1"># check the size</span>
-    <span class="k">if</span> <span class="n">tiles</span><span class="o">.</span><span class="n">ndim</span> <span class="o">&gt;</span> <span class="mi">3</span><span class="p">:</span>
-        <span class="n">nbands</span> <span class="o">=</span> <span class="n">tiles</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-        <span class="n">tile_size</span> <span class="o">=</span> <span class="n">tiles</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
-    <span class="k">else</span><span class="p">:</span>
-        <span class="n">nbands</span> <span class="o">=</span> <span class="mi">1</span>
-        <span class="n">tile_size</span> <span class="o">=</span> <span class="n">tiles</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-
-    <span class="c1"># calculate image size</span>
-    <span class="n">img_size</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">*</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">tiles</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">*</span> <span class="n">tile_size</span><span class="p">),)</span>
-
-    <span class="c1"># calculate the topleft corners of the tiles</span>
-    <span class="n">topleft</span> <span class="o">=</span> <span class="n">tile_topleft_corner</span><span class="p">(</span><span class="n">img_size</span><span class="p">,</span> <span class="n">tile_size</span><span class="p">)</span>
-
-    <span class="c1"># iterate over the tiles</span>
-    <span class="n">scene</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">shape</span><span class="o">=</span><span class="p">(</span><span class="n">nbands</span><span class="p">,)</span> <span class="o">+</span> <span class="n">img_size</span><span class="p">)</span>
-    <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">tiles</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span>
-        <span class="n">scene</span><span class="p">[</span><span class="o">...</span><span class="p">,</span>
-              <span class="n">topleft</span><span class="p">[</span><span class="n">t</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span> <span class="n">topleft</span><span class="p">[</span><span class="n">t</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">tile_size</span><span class="p">,</span>
-              <span class="n">topleft</span><span class="p">[</span><span class="n">t</span><span class="p">][</span><span class="mi">1</span><span class="p">]:</span> <span class="n">topleft</span><span class="p">[</span><span class="n">t</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">tile_size</span><span class="p">]</span> <span class="o">=</span> <span class="n">tiles</span><span class="p">[</span><span class="n">t</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span>
-
-    <span class="k">return</span> <span class="n">scene</span><span class="o">.</span><span class="n">squeeze</span><span class="p">()</span></div>
-
-
-<div class="viewcode-block" id="accuracy_function"><a class="viewcode-back" href="../../source/core.html#core.utils.accuracy_function">[docs]</a><span class="k">def</span> <span class="nf">accuracy_function</span><span class="p">(</span><span class="n">outputs</span><span class="p">,</span> <span class="n">labels</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Calculate prediction accuracy.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    outputs : `torch.Tensor` or array_like</span>
-<span class="sd">        The model prediction.</span>
-<span class="sd">    labels : `torch.Tensor` or array_like</span>
-<span class="sd">        The ground truth.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    accuracy : `float`</span>
-<span class="sd">        Mean prediction accuracy.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">outputs</span><span class="p">,</span> <span class="n">torch</span><span class="o">.</span><span class="n">Tensor</span><span class="p">):</span>
-        <span class="k">return</span> <span class="p">(</span><span class="n">outputs</span> <span class="o">==</span> <span class="n">labels</span><span class="p">)</span><span class="o">.</span><span class="n">float</span><span class="p">()</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span><span class="o">.</span><span class="n">item</span><span class="p">()</span>
-    <span class="k">else</span><span class="p">:</span>
-        <span class="k">return</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">outputs</span><span class="p">)</span> <span class="o">==</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">labels</span><span class="p">))</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span><span class="o">.</span><span class="n">item</span><span class="p">()</span></div>
-
-
-<div class="viewcode-block" id="parse_landsat_scene"><a class="viewcode-back" href="../../source/core.html#core.utils.parse_landsat_scene">[docs]</a><span class="k">def</span> <span class="nf">parse_landsat_scene</span><span class="p">(</span><span class="n">scene_id</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Parse a Landsat scene identifier.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    scene_id : `str`</span>
-<span class="sd">        A Landsat scene identifier.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    scene : `dict` or `None`</span>
-<span class="sd">        A dictionary containing scene metadata. If `None`, ``scene_id`` is not</span>
-<span class="sd">        a valid Landsat scene identifier.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># Landsat Collection 1 naming convention in regular expression</span>
-    <span class="n">sensor</span> <span class="o">=</span> <span class="s1">&#39;L[COTEM]0[1-8]_&#39;</span>
-    <span class="n">level</span> <span class="o">=</span> <span class="s1">&#39;L[0-9][A-Z][A-Z]_&#39;</span>
-    <span class="n">swath</span> <span class="o">=</span> <span class="s1">&#39;[0-2][0-9]</span><span class="si">{2}</span><span class="s1">[0-1][0-9]</span><span class="si">{2}</span><span class="s1">_&#39;</span>
-    <span class="n">date</span> <span class="o">=</span> <span class="s1">&#39;[0-9]</span><span class="si">{4}</span><span class="s1">[0-1][0-9][0-3][0-9]_&#39;</span>
-    <span class="n">doy</span> <span class="o">=</span> <span class="s1">&#39;[0-9]</span><span class="si">{4}</span><span class="s1">[0-3][0-9]</span><span class="si">{2}</span><span class="s1">&#39;</span>
-    <span class="n">collection</span> <span class="o">=</span> <span class="s1">&#39;0[0-9]_&#39;</span>
-    <span class="n">category</span> <span class="o">=</span> <span class="s1">&#39;[A-Z]([A-Z]|[0-9])&#39;</span>
-
-    <span class="c1"># Landsat Collection 1 naming</span>
-    <span class="n">C1</span> <span class="o">=</span> <span class="p">(</span><span class="n">sensor</span> <span class="o">+</span> <span class="n">level</span> <span class="o">+</span> <span class="n">swath</span> <span class="o">+</span> <span class="n">date</span> <span class="o">+</span> <span class="n">date</span> <span class="o">+</span> <span class="n">collection</span> <span class="o">+</span> <span class="n">category</span><span class="p">)</span>
-    <span class="n">Landsat_C1</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">C1</span><span class="p">)</span>
-
-    <span class="c1"># Landsat naming convention before Collections</span>
-    <span class="n">C0</span> <span class="o">=</span> <span class="p">(</span><span class="n">sensor</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;_&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;0&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="n">swath</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;_&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span> <span class="o">+</span>
-          <span class="n">doy</span> <span class="o">+</span> <span class="s1">&#39;[A-Z]</span><span class="si">{3}</span><span class="s1">&#39;</span> <span class="o">+</span> <span class="s1">&#39;[0-9]</span><span class="si">{2}</span><span class="s1">&#39;</span><span class="p">)</span>
-    <span class="n">Landsat_C0</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">C0</span><span class="p">)</span>
-
-    <span class="c1"># mapping from sensor id to sensors</span>
-    <span class="n">lsensors</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;E&#39;</span><span class="p">:</span> <span class="s1">&#39;Enhanced Thematic Mapper Plus&#39;</span><span class="p">,</span>
-                <span class="s1">&#39;T&#39;</span><span class="p">:</span> <span class="s1">&#39;Thematic Mapper&#39;</span><span class="p">,</span>
-                <span class="s1">&#39;M&#39;</span><span class="p">:</span> <span class="s1">&#39;Multispectral Scanner&#39;</span><span class="p">}</span>
-    <span class="n">l8sensors</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;C&#39;</span><span class="p">:</span> <span class="s1">&#39;Operational Land Imager (OLI) &amp; Thermal Infrared Sensor&#39;</span>
-                      <span class="s1">&#39; (TIRS)&#39;</span><span class="p">,</span>
-                 <span class="s1">&#39;O&#39;</span><span class="p">:</span> <span class="s1">&#39;Operational Land Imager (OLI)&#39;</span><span class="p">,</span>
-                 <span class="s1">&#39;T&#39;</span><span class="p">:</span> <span class="s1">&#39;Thermal Infrared Sensor (TIRS)&#39;</span><span class="p">,</span>
-                 <span class="p">}</span>
-
-    <span class="c1"># whether a scene identifier matches the Landsat naming convention</span>
-    <span class="n">scene</span> <span class="o">=</span> <span class="p">{}</span>
-    <span class="k">if</span> <span class="n">Landsat_C0</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">scene_id</span><span class="p">):</span>
-
-        <span class="c1"># the match of the regular expression</span>
-        <span class="n">match</span> <span class="o">=</span> <span class="n">Landsat_C0</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">scene_id</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
-
-        <span class="c1"># the metadata of the scene identifier</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">match</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;satellite&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;Landsat </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">match</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
-        <span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">match</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="o">&gt;</span> <span class="mi">7</span><span class="p">:</span>
-            <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;sensor&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">l8sensors</span><span class="p">[</span><span class="n">match</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;sensor&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">lsensors</span><span class="p">[</span><span class="n">match</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;path&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">match</span><span class="p">[</span><span class="mi">3</span><span class="p">:</span><span class="mi">6</span><span class="p">]</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;row&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">match</span><span class="p">[</span><span class="mi">6</span><span class="p">:</span><span class="mi">9</span><span class="p">]</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;date&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">doy2date</span><span class="p">(</span><span class="n">match</span><span class="p">[</span><span class="mi">9</span><span class="p">:</span><span class="mi">13</span><span class="p">],</span> <span class="n">match</span><span class="p">[</span><span class="mi">13</span><span class="p">:</span><span class="mi">16</span><span class="p">])</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;gsi&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">match</span><span class="p">[</span><span class="mi">16</span><span class="p">:</span><span class="mi">19</span><span class="p">]</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;version&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">match</span><span class="p">[</span><span class="mi">19</span><span class="p">:]</span>
-
-    <span class="k">elif</span> <span class="n">Landsat_C1</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">scene_id</span><span class="p">):</span>
-
-        <span class="c1"># the match of the regular expression</span>
-        <span class="n">match</span> <span class="o">=</span> <span class="n">Landsat_C1</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">scene_id</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
-
-        <span class="c1"># split scene into respective parts</span>
-        <span class="n">parts</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;_&#39;</span><span class="p">)</span>
-
-        <span class="c1"># the metadata of the scene identifier</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">match</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;satellite&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;Landsat </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">2</span><span class="p">:])</span>
-        <span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">3</span><span class="p">])</span> <span class="o">&gt;</span> <span class="mi">7</span><span class="p">:</span>
-            <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;sensor&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">l8sensors</span><span class="p">[</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]]</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;sensor&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">lsensors</span><span class="p">[</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]]</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;path&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">2</span><span class="p">][</span><span class="mi">0</span><span class="p">:</span><span class="mi">3</span><span class="p">]</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;row&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">2</span><span class="p">][</span><span class="mi">3</span><span class="p">:]</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;date&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="s1">&#39;%Y%m</span><span class="si">%d</span><span class="s1">&#39;</span><span class="p">)</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;collection&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">5</span><span class="p">])</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;version&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span>
-
-    <span class="k">else</span><span class="p">:</span>
-        <span class="n">scene</span> <span class="o">=</span> <span class="kc">None</span>
-
-    <span class="k">return</span> <span class="n">scene</span></div>
-
-
-<div class="viewcode-block" id="parse_sentinel2_scene"><a class="viewcode-back" href="../../source/core.html#core.utils.parse_sentinel2_scene">[docs]</a><span class="k">def</span> <span class="nf">parse_sentinel2_scene</span><span class="p">(</span><span class="n">scene_id</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Parse a Sentinel-2 scene identifier.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    scene_id : `str`</span>
-<span class="sd">        A Sentinel-2 scene identifier.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    scene : `dict` or `None`</span>
-<span class="sd">        A dictionary containing scene metadata. If `None`, ``scene_id`` is not</span>
-<span class="sd">        a valid Sentinel-2 scene identifier.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># Sentinel 2 Level-1C products naming convention after 6th December 2016</span>
-    <span class="n">mission</span> <span class="o">=</span> <span class="s1">&#39;S2[A-B]_&#39;</span>
-    <span class="n">level</span> <span class="o">=</span> <span class="s1">&#39;MSIL1C_&#39;</span>
-    <span class="n">date</span> <span class="o">=</span> <span class="s1">&#39;[0-9]</span><span class="si">{4}</span><span class="s1">[0-1][0-9][0-3][0-9]&#39;</span>
-    <span class="n">time</span> <span class="o">=</span> <span class="s1">&#39;T[0-2][0-9][0-5][0-9][0-5][0-9]_&#39;</span>
-    <span class="n">processing</span> <span class="o">=</span> <span class="s1">&#39;N[0-9]</span><span class="si">{4}</span><span class="s1">_&#39;</span>
-    <span class="n">orbit</span> <span class="o">=</span> <span class="s1">&#39;R[0-1][0-9]</span><span class="si">{2}</span><span class="s1">_&#39;</span>
-    <span class="n">tile</span> <span class="o">=</span> <span class="s1">&#39;T[0-9]</span><span class="si">{2}</span><span class="s1">[A-Z]</span><span class="si">{3}</span><span class="s1">_&#39;</span>
-    <span class="n">level_1C</span> <span class="o">=</span> <span class="p">(</span><span class="n">mission</span> <span class="o">+</span> <span class="n">level</span> <span class="o">+</span> <span class="n">date</span> <span class="o">+</span> <span class="n">time</span> <span class="o">+</span> <span class="n">processing</span> <span class="o">+</span>
-                <span class="n">orbit</span> <span class="o">+</span> <span class="n">tile</span> <span class="o">+</span> <span class="n">date</span> <span class="o">+</span> <span class="n">time</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;_&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">))</span>
-    <span class="n">S2_L1C_New</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">level_1C</span><span class="p">)</span>
-
-    <span class="c1"># Sentinel 2 Level-1C products naming convention before 6th December 2016</span>
-    <span class="n">file_class</span> <span class="o">=</span> <span class="s1">&#39;[A-Z]</span><span class="si">{4}</span><span class="s1">_&#39;</span>
-    <span class="n">file_category</span> <span class="o">=</span> <span class="s1">&#39;[A-Z]</span><span class="si">{3}</span><span class="s1">_&#39;</span>
-    <span class="n">file_semantic</span> <span class="o">=</span> <span class="s1">&#39;L[0-1]([ABC]|_)_[A-Z]</span><span class="si">{2}</span><span class="s1">_&#39;</span>
-    <span class="n">site</span> <span class="o">=</span> <span class="s1">&#39;[A-Z_]</span><span class="si">{4}</span><span class="s1">_&#39;</span>
-    <span class="n">aorbit</span> <span class="o">=</span> <span class="s1">&#39;A[0-9]</span><span class="si">{6}</span><span class="s1">_&#39;</span>
-    <span class="n">S2_L1C_Old</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">mission</span> <span class="o">+</span> <span class="n">file_class</span> <span class="o">+</span> <span class="n">file_category</span> <span class="o">+</span>
-                            <span class="n">file_semantic</span> <span class="o">+</span> <span class="n">site</span> <span class="o">+</span> <span class="s1">&#39;V&#39;</span> <span class="o">+</span> <span class="n">date</span> <span class="o">+</span> <span class="n">time</span> <span class="o">+</span> <span class="n">aorbit</span> <span class="o">+</span>
-                            <span class="n">tile</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;_&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">))</span>
-
-    <span class="c1"># ProSnow project naming convention</span>
-    <span class="n">ProSnow</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">tile</span> <span class="o">+</span> <span class="n">date</span> <span class="o">+</span> <span class="n">time</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;_&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">))</span>
-
-    <span class="c1"># whether a scene identifier matches the Sentinel naming convention</span>
-    <span class="n">scene</span> <span class="o">=</span> <span class="p">{}</span>
-    <span class="k">if</span> <span class="n">S2_L1C_Old</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">scene_id</span><span class="p">):</span>
-
-        <span class="c1"># the match of the regular expression</span>
-        <span class="n">match</span> <span class="o">=</span> <span class="n">S2_L1C_Old</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">scene_id</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
-
-        <span class="c1"># split scene into respective parts</span>
-        <span class="n">parts</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;_&#39;</span><span class="p">)</span>
-
-        <span class="c1"># the metadata of the scene identifier</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">match</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;satellite&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;Sentinel </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;file class&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;file category&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;file semantic&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;site&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;orbit&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;date&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span>
-           <span class="n">parts</span><span class="p">[</span><span class="mi">7</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;T&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;V&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">),</span> <span class="s1">&#39;%Y%m</span><span class="si">%d</span><span class="s1">&#39;</span><span class="p">)</span>
-
-    <span class="k">elif</span> <span class="n">S2_L1C_New</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">scene_id</span><span class="p">):</span>
-
-        <span class="c1"># the match of the regular expression</span>
-        <span class="n">match</span> <span class="o">=</span> <span class="n">S2_L1C_New</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">scene_id</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
-
-        <span class="c1"># split scene into respective parts</span>
-        <span class="n">parts</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;_&#39;</span><span class="p">)</span>
-
-        <span class="c1"># the metadata of the scene identifier</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">match</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;satellite&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;Sentinel </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;product&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;date&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;T&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span>
-                                                   <span class="s1">&#39;%Y%m</span><span class="si">%d</span><span class="s1">&#39;</span><span class="p">)</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;baseline&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;orbit&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;tile&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span>
-
-    <span class="k">elif</span> <span class="n">ProSnow</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">scene_id</span><span class="p">):</span>
-
-        <span class="c1"># the match of the regular expression</span>
-        <span class="n">match</span> <span class="o">=</span> <span class="n">ProSnow</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">scene_id</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
-
-        <span class="c1"># split scene into respective parts</span>
-        <span class="n">parts</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;_&#39;</span><span class="p">)</span>
-
-        <span class="c1"># the metadata of the scene identifier</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">match</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;satellite&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;Sentinel 2&#39;</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;tile&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-        <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;date&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;T&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span>
-                                                   <span class="s1">&#39;%Y%m</span><span class="si">%d</span><span class="s1">&#39;</span><span class="p">)</span>
-
-    <span class="k">else</span><span class="p">:</span>
-        <span class="n">scene</span> <span class="o">=</span> <span class="kc">None</span>
-
-    <span class="k">return</span> <span class="n">scene</span></div>
-
-
-<div class="viewcode-block" id="doy2date"><a class="viewcode-back" href="../../source/core.html#core.utils.doy2date">[docs]</a><span class="k">def</span> <span class="nf">doy2date</span><span class="p">(</span><span class="n">year</span><span class="p">,</span> <span class="n">doy</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Convert the (year, day of the year) date format to a datetime object.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    year : `int`</span>
-<span class="sd">        The year</span>
-<span class="sd">    doy : `int`</span>
-<span class="sd">        The day of the year</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    date : `datetime.datetime`</span>
-<span class="sd">        The converted date.</span>
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># convert year/day of year to a datetime object</span>
-    <span class="n">date</span> <span class="o">=</span> <span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">year</span><span class="p">),</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="o">+</span>
-            <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">doy</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)))</span>
-
-    <span class="k">return</span> <span class="n">date</span></div>
-
-
-<div class="viewcode-block" id="item_in_enum"><a class="viewcode-back" href="../../source/core.html#core.utils.item_in_enum">[docs]</a><span class="k">def</span> <span class="nf">item_in_enum</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">enum</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Check if an item exists in an enumeration.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    name : `str`</span>
-<span class="sd">        Name of the item.</span>
-<span class="sd">    enum : `enum.Enum`</span>
-<span class="sd">        An instance of `enum.Enum`.</span>
-
-<span class="sd">    Raises</span>
-<span class="sd">    ------</span>
-<span class="sd">    ValueError</span>
-<span class="sd">        Raised if ``name`` is not in ``enum``.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    value</span>
-<span class="sd">        The value of ``name`` in ``enum``.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># check whether the input name exists in the enumeration</span>
-    <span class="k">if</span> <span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">enum</span><span class="o">.</span><span class="n">__members__</span><span class="p">:</span>
-        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1"> is not in </span><span class="si">{}</span><span class="s1"> enumeration. Valid names are: </span><span class="se">\n</span><span class="s1"> </span><span class="si">{}</span><span class="s1">&#39;</span>
-                         <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">enum</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span>
-                                 <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s1">&#39;- </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">n</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span>
-                                           <span class="n">enum</span><span class="o">.</span><span class="n">__members__</span><span class="p">)))</span>
-    <span class="k">else</span><span class="p">:</span>
-        <span class="k">return</span> <span class="n">enum</span><span class="o">.</span><span class="n">__members__</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">value</span></div>
-
-
-<div class="viewcode-block" id="destack_tiff"><a class="viewcode-back" href="../../source/core.html#core.utils.destack_tiff">[docs]</a><span class="k">def</span> <span class="nf">destack_tiff</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="n">outpath</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">overwrite</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">remove</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-                 <span class="n">suffix</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Destack a TIFF with more than one band into a TIFF file for each band.</span>
-
-<span class="sd">    Each band in ``image`` is saved to ``outpath`` as distinct TIFF file.</span>
-<span class="sd">    The default filenames are: &quot;filename(``image``) + _B(i).tif&quot;, where i is</span>
-<span class="sd">    the respective number of each band in ``image``.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    image : `str` or `pathlib.Path`</span>
-<span class="sd">        The TIFF to destack.</span>
-<span class="sd">    outpath : `str`, optional</span>
-<span class="sd">        Path to save the output TIFF files. The default is None. If None,</span>
-<span class="sd">        ``outpath`` is the path to ``image``.</span>
-<span class="sd">    remove : `bool`, optional</span>
-<span class="sd">        Whether to remove ``image`` from disk after destacking. The default is</span>
-<span class="sd">        False.</span>
-<span class="sd">    overwrite : `bool`, optional</span>
-<span class="sd">        Whether to overwrite existing TIFF files.</span>
-<span class="sd">    suffix : `str`, optional</span>
-<span class="sd">        String to append to the filename of ``image``. If specified, the TIFF</span>
-<span class="sd">        filenames for each band in ``image`` are, &quot;filename(``image``) +</span>
-<span class="sd">        + _B(i)_ + ``suffix``.tif&quot;. The default is &#39;&#39;.</span>
-
-<span class="sd">    Raises</span>
-<span class="sd">    ------</span>
-<span class="sd">    FileNotFoundError</span>
-<span class="sd">        Raised if ``image`` does not exist.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># stop gdal printing warnings and errors to STDERR</span>
-    <span class="n">gdal</span><span class="o">.</span><span class="n">PushErrorHandler</span><span class="p">(</span><span class="s1">&#39;CPLQuietErrorHandler&#39;</span><span class="p">)</span>
-
-    <span class="c1"># raise Python exceptions for gdal errors</span>
-    <span class="n">gdal</span><span class="o">.</span><span class="n">UseExceptions</span><span class="p">()</span>
-
-    <span class="c1"># convert to pathlib.Path</span>
-    <span class="n">image</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">image</span><span class="p">)</span>
-    <span class="k">if</span> <span class="ow">not</span> <span class="n">image</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1"> does not exist.&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">image</span><span class="p">))</span>
-
-    <span class="c1"># name of the TIFF</span>
-    <span class="n">imgname</span> <span class="o">=</span> <span class="n">image</span><span class="o">.</span><span class="n">stem</span>
-
-    <span class="c1"># default: output directory is equal to the input directory</span>
-    <span class="k">if</span> <span class="n">outpath</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-        <span class="n">outpath</span> <span class="o">=</span> <span class="n">image</span><span class="o">.</span><span class="n">parent</span>
-    <span class="k">else</span><span class="p">:</span>
-        <span class="n">outpath</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">outpath</span><span class="p">)</span>
-        <span class="c1"># check if output directory exists</span>
-        <span class="k">if</span> <span class="ow">not</span> <span class="n">outpath</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-            <span class="n">outpath</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-
-    <span class="c1"># open the TIFF</span>
-    <span class="n">img</span> <span class="o">=</span> <span class="n">gdal</span><span class="o">.</span><span class="n">Open</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">image</span><span class="p">))</span>
-
-    <span class="c1"># check whether the file was already processed</span>
-    <span class="n">processed</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">outpath</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="n">imgname</span> <span class="o">+</span> <span class="s1">&#39;_B*&#39;</span><span class="p">))</span>
-    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">processed</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="n">img</span><span class="o">.</span><span class="n">RasterCount</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">overwrite</span><span class="p">:</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1"> already processed.&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">imgname</span><span class="p">))</span>
-
-    <span class="c1"># destack the TIFF</span>
-    <span class="k">else</span><span class="p">:</span>
-        <span class="c1"># image driver</span>
-        <span class="n">driver</span> <span class="o">=</span> <span class="n">gdal</span><span class="o">.</span><span class="n">GetDriverByName</span><span class="p">(</span><span class="s1">&#39;GTiff&#39;</span><span class="p">)</span>
-        <span class="n">driver</span><span class="o">.</span><span class="n">Register</span><span class="p">()</span>
-
-        <span class="c1"># image size and tiles</span>
-        <span class="n">cols</span> <span class="o">=</span> <span class="n">img</span><span class="o">.</span><span class="n">RasterXSize</span>
-        <span class="n">rows</span> <span class="o">=</span> <span class="n">img</span><span class="o">.</span><span class="n">RasterYSize</span>
-        <span class="n">bands</span> <span class="o">=</span> <span class="n">img</span><span class="o">.</span><span class="n">RasterCount</span>
-
-        <span class="c1"># print progress</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Processing: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">imgname</span><span class="p">))</span>
-
-        <span class="c1"># iterate the bands of the raster</span>
-        <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">bands</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
-
-            <span class="c1"># read the data of band b</span>
-            <span class="n">band</span> <span class="o">=</span> <span class="n">img</span><span class="o">.</span><span class="n">GetRasterBand</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
-            <span class="n">data</span> <span class="o">=</span> <span class="n">band</span><span class="o">.</span><span class="n">ReadAsArray</span><span class="p">()</span>
-
-            <span class="c1"># output file: replace for band name</span>
-            <span class="n">fname</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">outpath</span><span class="o">.</span><span class="n">joinpath</span><span class="p">(</span><span class="n">imgname</span> <span class="o">+</span> <span class="s1">&#39;_B</span><span class="si">{:d}</span><span class="s1">.tif&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">b</span><span class="p">)))</span>
-            <span class="k">if</span> <span class="n">suffix</span><span class="p">:</span>
-                <span class="n">fname</span> <span class="o">=</span> <span class="n">fname</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;.tif&#39;</span><span class="p">,</span> <span class="s1">&#39;_</span><span class="si">{}</span><span class="s1">.tif&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">suffix</span><span class="p">))</span>
-            <span class="n">outDs</span> <span class="o">=</span> <span class="n">driver</span><span class="o">.</span><span class="n">Create</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="n">cols</span><span class="p">,</span> <span class="n">rows</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">band</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
-
-            <span class="c1"># define output band</span>
-            <span class="n">outband</span> <span class="o">=</span> <span class="n">outDs</span><span class="o">.</span><span class="n">GetRasterBand</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
-
-            <span class="c1"># write array to output band</span>
-            <span class="n">outband</span><span class="o">.</span><span class="n">WriteArray</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
-            <span class="n">outband</span><span class="o">.</span><span class="n">FlushCache</span><span class="p">()</span>
-
-            <span class="c1"># Set the geographic information</span>
-            <span class="n">outDs</span><span class="o">.</span><span class="n">SetProjection</span><span class="p">(</span><span class="n">img</span><span class="o">.</span><span class="n">GetProjection</span><span class="p">())</span>
-            <span class="n">outDs</span><span class="o">.</span><span class="n">SetGeoTransform</span><span class="p">(</span><span class="n">img</span><span class="o">.</span><span class="n">GetGeoTransform</span><span class="p">())</span>
-
-            <span class="c1"># clear memory</span>
-            <span class="k">del</span> <span class="n">outband</span><span class="p">,</span> <span class="n">band</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">outDs</span>
-
-    <span class="c1"># remove old stacked GeoTIFF</span>
-    <span class="k">del</span> <span class="n">img</span>
-    <span class="k">if</span> <span class="n">remove</span><span class="p">:</span>
-        <span class="n">os</span><span class="o">.</span><span class="n">unlink</span><span class="p">(</span><span class="n">image</span><span class="p">)</span>
-    <span class="k">return</span></div>
-
-
-<div class="viewcode-block" id="standard_eo_structure"><a class="viewcode-back" href="../../source/core.html#core.utils.standard_eo_structure">[docs]</a><span class="k">def</span> <span class="nf">standard_eo_structure</span><span class="p">(</span><span class="n">source_path</span><span class="p">,</span> <span class="n">target_path</span><span class="p">,</span> <span class="n">overwrite</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-                          <span class="n">move</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">parser</span><span class="o">=</span><span class="n">parse_landsat_scene</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Modify the directory structure of a remote sensing dataset.</span>
-
-<span class="sd">    This function assumes that ``source_path`` points to a directory containing</span>
-<span class="sd">    remote sensing data, where each file in ``source_path`` and its sub-folders</span>
-<span class="sd">    should contain a scene identifier in its filename. The scene identifier is</span>
-<span class="sd">    used to restructure the dataset.</span>
-
-<span class="sd">    Currently, Landsat and Sentinel-2 datasets are supported.</span>
-
-<span class="sd">    The directory tree in ``source_path`` is modified to the following</span>
-<span class="sd">    structure in ``target_path``:</span>
-
-<span class="sd">        target_path/</span>
-<span class="sd">            scene_id_1/</span>
-<span class="sd">                files matching scene_id_1</span>
-<span class="sd">            scene_id_2/</span>
-<span class="sd">                files matching scene_id_2</span>
-<span class="sd">            .</span>
-<span class="sd">            .</span>
-<span class="sd">            .</span>
-<span class="sd">            scene_id_n/</span>
-<span class="sd">                files matching scene_id_n</span>
-
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    source_path : `str` or `pathlib.Path`</span>
-<span class="sd">        Path to the remote sensing dataset.</span>
-<span class="sd">    target_path : `str` or `pathlib.Path`</span>
-<span class="sd">        Path to save the restructured dataset.</span>
-<span class="sd">    overwrite : `bool`, optional</span>
-<span class="sd">        Whether to overwrite existing files in ``target_path``.</span>
-<span class="sd">        The default is True.</span>
-<span class="sd">    move : `bool`, optional</span>
-<span class="sd">        Whether to move the files from ``source_path`` to ``target_path``. If</span>
-<span class="sd">        True, files in ``source_path`` are moved to ``target_path``, if False,</span>
-<span class="sd">        files in ``source_path`` are copied to ``target_path``. The default is</span>
-<span class="sd">        False.</span>
-<span class="sd">    parser : `function`, optional</span>
-<span class="sd">        The scene identifier parsing function. Depends on the sensor of the</span>
-<span class="sd">        dataset. See e.g., `pysegcnn.core.utils.parse_landsat_scene`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># create a directory for each scene</span>
-    <span class="k">for</span> <span class="n">dirpath</span><span class="p">,</span> <span class="n">dirnames</span><span class="p">,</span> <span class="n">filenames</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">source_path</span><span class="p">):</span>
-
-        <span class="c1"># check if there are files in the current folder</span>
-        <span class="k">if</span> <span class="ow">not</span> <span class="n">filenames</span><span class="p">:</span>
-            <span class="k">continue</span>
-
-        <span class="c1"># iterate over the files to modify</span>
-        <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">filenames</span><span class="p">:</span>
-
-            <span class="c1"># get the path to the file</span>
-            <span class="n">old_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dirpath</span><span class="p">,</span> <span class="n">file</span><span class="p">)</span>
-
-            <span class="c1"># get name of the scene</span>
-            <span class="n">scene</span> <span class="o">=</span> <span class="n">parser</span><span class="p">(</span><span class="n">old_path</span><span class="p">)</span>
-            <span class="k">if</span> <span class="n">scene</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-
-                <span class="c1"># path to copy files not matching a scene identifier</span>
-                <span class="n">new_path</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">target_path</span><span class="p">)</span><span class="o">.</span><span class="n">joinpath</span><span class="p">(</span><span class="s1">&#39;misc&#39;</span><span class="p">,</span> <span class="n">file</span><span class="p">)</span>
-
-                <span class="c1"># file a warning if the file does not match a scene identifier</span>
-                <span class="n">LOGGER</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1"> does not match a scene identifier. Copying &#39;</span>
-                               <span class="s1">&#39;to </span><span class="si">{}</span><span class="s1">.&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">old_path</span><span class="p">),</span>
-                                               <span class="n">new_path</span><span class="o">.</span><span class="n">parent</span><span class="p">))</span>
-            <span class="k">else</span><span class="p">:</span>
-
-                <span class="c1"># the name of the scene</span>
-                <span class="n">scene_name</span> <span class="o">=</span> <span class="n">scene</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">]</span>
-
-                <span class="c1"># define the new path to the file</span>
-                <span class="n">new_path</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">target_path</span><span class="p">)</span><span class="o">.</span><span class="n">joinpath</span><span class="p">(</span><span class="n">scene_name</span><span class="p">,</span> <span class="n">file</span><span class="p">)</span>
-
-            <span class="c1"># move files to new directory</span>
-            <span class="k">if</span> <span class="n">new_path</span><span class="o">.</span><span class="n">is_file</span><span class="p">()</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">overwrite</span><span class="p">:</span>
-                <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1"> already exists.&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">new_path</span><span class="p">))</span>
-                <span class="k">continue</span>
-            <span class="k">else</span><span class="p">:</span>
-                <span class="n">new_path</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-                <span class="k">if</span> <span class="n">move</span><span class="p">:</span>
-                    <span class="n">shutil</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="n">old_path</span><span class="p">,</span> <span class="n">new_path</span><span class="p">)</span>
-                    <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;mv </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">new_path</span><span class="p">))</span>
-                <span class="k">else</span><span class="p">:</span>
-                    <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;cp </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">new_path</span><span class="p">))</span>
-                    <span class="n">shutil</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">old_path</span><span class="p">,</span> <span class="n">new_path</span><span class="p">)</span>
-
-    <span class="c1"># remove old file location</span>
-    <span class="k">if</span> <span class="n">move</span><span class="p">:</span>
-        <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">source_path</span><span class="p">)</span></div>
-
-
-<div class="viewcode-block" id="extract_archive"><a class="viewcode-back" href="../../source/core.html#core.utils.extract_archive">[docs]</a><span class="k">def</span> <span class="nf">extract_archive</span><span class="p">(</span><span class="n">inpath</span><span class="p">,</span> <span class="n">outpath</span><span class="p">,</span> <span class="n">overwrite</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Extract files from an archive.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    inpath : `str` or `pathlib.Path`</span>
-<span class="sd">        Path to an archive.</span>
-<span class="sd">    outpath : `str` or `pathlib.Path`</span>
-<span class="sd">        Path to save extracted files.</span>
-<span class="sd">    overwrite : `bool`, optional</span>
-<span class="sd">        Whether to overwrite existing extracted files.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    subdir : str</span>
-<span class="sd">        path to the extracted files</span>
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="n">inpath</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">inpath</span><span class="p">)</span>
-
-    <span class="c1"># create the output directory</span>
-    <span class="n">outpath</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">outpath</span><span class="p">)</span>
-    <span class="k">if</span> <span class="ow">not</span> <span class="n">outpath</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-        <span class="n">outpath</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-
-    <span class="c1"># name of the archive</span>
-    <span class="n">archive</span> <span class="o">=</span> <span class="n">inpath</span><span class="o">.</span><span class="n">stem</span>
-
-    <span class="c1"># path to the extracted files</span>
-    <span class="n">target</span> <span class="o">=</span> <span class="n">outpath</span><span class="o">.</span><span class="n">joinpath</span><span class="p">(</span><span class="n">archive</span><span class="p">)</span>
-    <span class="k">if</span> <span class="n">target</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-        <span class="k">if</span> <span class="n">overwrite</span><span class="p">:</span>
-            <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Overwriting: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">target</span><span class="p">))</span>
-            <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Extracted files are located in: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">target</span><span class="p">))</span>
-            <span class="k">return</span> <span class="n">target</span>
-
-    <span class="c1"># create output directory</span>
-    <span class="n">target</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-
-    <span class="c1"># read the archive</span>
-    <span class="k">if</span> <span class="n">inpath</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s1">&#39;.tgz&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">inpath</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s1">&#39;.tar.gz&#39;</span><span class="p">):</span>
-        <span class="n">tar</span> <span class="o">=</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">inpath</span><span class="p">,</span> <span class="s2">&quot;r:gz&quot;</span><span class="p">)</span>
-    <span class="k">elif</span> <span class="n">inpath</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s1">&#39;.zip&#39;</span><span class="p">):</span>
-        <span class="n">tar</span> <span class="o">=</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">ZipFile</span><span class="p">(</span><span class="n">inpath</span><span class="p">,</span> <span class="s1">&#39;r&#39;</span><span class="p">)</span>
-
-    <span class="c1"># extract files to the output directory</span>
-    <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Extracting: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">archive</span><span class="p">))</span>
-    <span class="n">tar</span><span class="o">.</span><span class="n">extractall</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
-
-    <span class="k">return</span> <span class="n">target</span></div>
-
-
-<div class="viewcode-block" id="read_landsat_metadata"><a class="viewcode-back" href="../../source/core.html#core.utils.read_landsat_metadata">[docs]</a><span class="k">def</span> <span class="nf">read_landsat_metadata</span><span class="p">(</span><span class="n">file</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Parse the Landsat metadata *_MTL.txt file.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    file : `str` or `pathlib.Path`</span>
-<span class="sd">        Path to a Landsat *_MTL.txt file.</span>
-
-<span class="sd">    Raises</span>
-<span class="sd">    ------</span>
-<span class="sd">    FileNotFoundError</span>
-<span class="sd">        Raised if ``file`` does not exist.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    metadata : `dict`</span>
-<span class="sd">        The metadata text file as dictionary, where each line is a (key, value)</span>
-<span class="sd">        pair.</span>
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="n">file</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
-    <span class="c1"># check if the metadata file exists</span>
-    <span class="k">if</span> <span class="ow">not</span> <span class="n">file</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1"> does not exist&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">file</span><span class="p">))</span>
-
-    <span class="c1"># read metadata file</span>
-    <span class="n">metadata</span> <span class="o">=</span> <span class="p">{}</span>
-    <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Parsing metadata file: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">file</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
-    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="s1">&#39;r&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">metafile</span><span class="p">:</span>
-        <span class="c1"># iterate over the lines of the metadata file</span>
-        <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">metafile</span><span class="p">:</span>
-            <span class="k">try</span><span class="p">:</span>
-                <span class="c1"># the current line as (key, value pair)</span>
-                <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;=&#39;</span><span class="p">)</span>
-
-                <span class="c1"># store current line in dictionary: skip lines defining the</span>
-                <span class="c1"># parameter groups</span>
-                <span class="k">if</span> <span class="s1">&#39;GROUP&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">key</span><span class="p">:</span>
-                    <span class="n">metadata</span><span class="p">[</span><span class="n">key</span><span class="o">.</span><span class="n">strip</span><span class="p">()]</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-
-            <span class="c1"># catch value error of line.split(&#39;=&#39;), i.e. if there is no &#39;=&#39;</span>
-            <span class="c1"># sign in the current line</span>
-            <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
-                <span class="k">continue</span>
-
-    <span class="k">return</span> <span class="n">metadata</span></div>
-
-
-<div class="viewcode-block" id="get_radiometric_constants"><a class="viewcode-back" href="../../source/core.html#core.utils.get_radiometric_constants">[docs]</a><span class="k">def</span> <span class="nf">get_radiometric_constants</span><span class="p">(</span><span class="n">metadata</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Retrieve the radiometric calibration constants.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    metadata : `dict`</span>
-<span class="sd">        The dictionary returned by ``read_landsat_metadata``.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    oli : `dict`</span>
-<span class="sd">        Radiometric rescaling factors of the OLI sensor.</span>
-<span class="sd">    tir : `dict`</span>
-<span class="sd">        Thermal conversion constants of the TIRS sensor.</span>
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="c1"># regular expression patterns matching the radiometric rescaling factors</span>
-    <span class="n">oli_pattern</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s1">&#39;(RADIANCE|REFLECTANCE)_(MULT|ADD)_BAND_</span><span class="se">\\</span><span class="s1">d{1,2}&#39;</span><span class="p">)</span>
-    <span class="n">tir_pattern</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s1">&#39;K(1|2)_CONSTANT_BAND_</span><span class="se">\\</span><span class="s1">d</span><span class="si">{2}</span><span class="s1">&#39;</span><span class="p">)</span>
-
-    <span class="c1"># rescaling factors to calculate top of atmosphere radiance and reflectance</span>
-    <span class="n">oli</span> <span class="o">=</span> <span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="nb">float</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">metadata</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span>
-           <span class="n">oli_pattern</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">}</span>
-
-    <span class="c1"># rescaling factors to calculate at-satellite temperatures in Kelvin</span>
-    <span class="n">tir</span> <span class="o">=</span> <span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="nb">float</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">metadata</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span>
-           <span class="n">tir_pattern</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">}</span>
-
-    <span class="k">return</span> <span class="n">oli</span><span class="p">,</span> <span class="n">tir</span></div>
-
-
-<div class="viewcode-block" id="landsat_radiometric_calibration"><a class="viewcode-back" href="../../source/core.html#core.utils.landsat_radiometric_calibration">[docs]</a><span class="k">def</span> <span class="nf">landsat_radiometric_calibration</span><span class="p">(</span><span class="n">scene</span><span class="p">,</span> <span class="n">outpath</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">exclude</span><span class="o">=</span><span class="p">[],</span>
-                                    <span class="n">radiance</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">overwrite</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-                                    <span class="n">remove_raw</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Radiometric calibration of Landsat Collection Level 1 scenes.</span>
-
-<span class="sd">    Convert the Landsat OLI bands to top of atmosphere radiance or reflectance</span>
-<span class="sd">    and the TIRS bands to top of atmosphere brightness temperature.</span>
-
-<span class="sd">    Conversion is performed following the `equations`_ provided by the USGS.</span>
-
-<span class="sd">    The filename of each band is extended by one of the following suffixes,</span>
-<span class="sd">    depending on the type of the radiometric calibration:</span>
-
-<span class="sd">        &#39;toa_ref&#39;: top of atmosphere reflectance</span>
-<span class="sd">        &#39;toa_rad&#39;: top of atmopshere radiance</span>
-<span class="sd">        &#39;toa_brt&#39;: top of atmosphere brightness temperature</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    scene : `str` or `pathlib.Path`</span>
-<span class="sd">        Path to a Landsat scene in digital number format.</span>
-<span class="sd">    outpath : `str` or `pathlib.Path`, optional</span>
-<span class="sd">        Path to save the calibrated images. The default is None, which means</span>
-<span class="sd">        saving to ``scene``.</span>
-<span class="sd">    exclude : `list` [`str`], optional</span>
-<span class="sd">        Bands to exclude from the radiometric calibration. The default is [].</span>
-<span class="sd">    radiance : `bool`, optional</span>
-<span class="sd">        Whether to calculate top of atmosphere radiance. The default is False,</span>
-<span class="sd">        which means calculating top of atmopshere reflectance.</span>
-<span class="sd">    overwrite : `bool`, optional</span>
-<span class="sd">        Whether to overwrite the calibrated images. The default is False.</span>
-<span class="sd">    remove_raw : `bool`, optional</span>
-<span class="sd">        Whether to remove the raw digitial number images. The default is True.</span>
-
-<span class="sd">    Raises</span>
-<span class="sd">    ------</span>
-<span class="sd">    FileNotFoundError</span>
-<span class="sd">        Raised if ``scene`` does not exist.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    .. _equations:</span>
-<span class="sd">        https://www.usgs.gov/land-resources/nli/landsat/using-usgs-landsat-level-1-data-product</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-    <span class="n">scene</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">scene</span><span class="p">)</span>
-    <span class="c1"># check if the input scene exists</span>
-    <span class="k">if</span> <span class="ow">not</span> <span class="n">scene</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{}</span><span class="s1"> does not exist.&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">scene</span><span class="p">))</span>
-
-    <span class="c1"># default: output directory is equal to the input directory</span>
-    <span class="k">if</span> <span class="n">outpath</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-        <span class="n">outpath</span> <span class="o">=</span> <span class="n">scene</span>
-    <span class="k">else</span><span class="p">:</span>
-        <span class="n">outpath</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">outpath</span><span class="p">)</span>
-        <span class="c1"># check if output directory exists</span>
-        <span class="k">if</span> <span class="ow">not</span> <span class="n">outpath</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-            <span class="n">outpath</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-
-    <span class="c1"># the scene metadata file</span>
-    <span class="k">try</span><span class="p">:</span>
-        <span class="n">mpattern</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s1">&#39;[mMtTlL].txt&#39;</span><span class="p">)</span>
-        <span class="n">metafile</span> <span class="o">=</span> <span class="p">[</span><span class="n">f</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">scene</span><span class="o">.</span><span class="n">iterdir</span><span class="p">()</span> <span class="k">if</span> <span class="n">mpattern</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">f</span><span class="p">))]</span>
-        <span class="n">metadata</span> <span class="o">=</span> <span class="n">read_landsat_metadata</span><span class="p">(</span><span class="n">metafile</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
-    <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s1">&#39;Can not calibrate scene </span><span class="si">{}</span><span class="s1">: </span><span class="si">{}</span><span class="s1"> does not exist.&#39;</span>
-                     <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">scene</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">scene</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s1">&#39;_MTL.txt&#39;</span><span class="p">))</span>
-        <span class="k">return</span>
-
-    <span class="c1"># radiometric calibration constants</span>
-    <span class="n">oli</span><span class="p">,</span> <span class="n">tir</span> <span class="o">=</span> <span class="n">get_radiometric_constants</span><span class="p">(</span><span class="n">metadata</span><span class="p">)</span>
-
-    <span class="c1"># log current Landsat scene ID</span>
-    <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Landsat scene id: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">metadata</span><span class="p">[</span><span class="s1">&#39;LANDSAT_SCENE_ID&#39;</span><span class="p">]))</span>
-
-    <span class="c1"># images to process</span>
-    <span class="n">ipattern</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s1">&#39;B</span><span class="se">\\</span><span class="s1">d{1,2}(.*)</span><span class="se">\\</span><span class="s1">.[tT][iI][fF]&#39;</span><span class="p">)</span>
-    <span class="n">images</span> <span class="o">=</span> <span class="p">[</span><span class="n">file</span> <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">scene</span><span class="o">.</span><span class="n">iterdir</span><span class="p">()</span> <span class="k">if</span> <span class="n">ipattern</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">file</span><span class="p">))]</span>
-
-    <span class="c1"># pattern to match calibrated images</span>
-    <span class="n">cal_pattern</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s1">&#39;(</span><span class="si">{}</span><span class="s1">|</span><span class="si">{}</span><span class="s1">|</span><span class="si">{}</span><span class="s1">).[tT][iI][fF]&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">*</span><span class="n">SUFFIXES</span><span class="p">))</span>
-
-    <span class="c1"># check if any images were already processe</span>
-    <span class="n">processed</span> <span class="o">=</span> <span class="p">[</span><span class="n">file</span> <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">images</span> <span class="k">if</span> <span class="n">cal_pattern</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">file</span><span class="p">))]</span>
-    <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">processed</span><span class="p">):</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;The following images have already been processed:&#39;</span><span class="p">)</span>
-
-        <span class="c1"># images that were already processed</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">((</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1"> &#39;</span> <span class="o">+</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="s1">&#39; &#39;</span><span class="p">)</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-            <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">file</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">processed</span><span class="p">]))</span>
-
-        <span class="c1"># overwrite: remove processed images and redo calibration</span>
-        <span class="k">if</span> <span class="n">overwrite</span><span class="p">:</span>
-            <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Preparing to overwrite ...&#39;</span><span class="p">)</span>
-
-            <span class="c1"># remove processed images</span>
-            <span class="k">for</span> <span class="n">toremove</span> <span class="ow">in</span> <span class="n">processed</span><span class="p">:</span>
-                <span class="c1"># remove from disk</span>
-                <span class="n">os</span><span class="o">.</span><span class="n">unlink</span><span class="p">(</span><span class="n">toremove</span><span class="p">)</span>
-                <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;rm </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">toremove</span><span class="p">))</span>
-
-                <span class="c1"># remove from list to process</span>
-                <span class="n">images</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">toremove</span><span class="p">)</span>
-
-        <span class="c1"># not overwriting, terminate calibration</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="k">return</span>
-
-    <span class="c1"># exclude defined bands from the calibration procedure</span>
-    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">images</span><span class="p">:</span>
-        <span class="n">current_band</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s1">&#39;B</span><span class="se">\\</span><span class="s1">d{1,2}&#39;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span>
-        <span class="k">if</span> <span class="n">current_band</span> <span class="ow">in</span> <span class="n">exclude</span><span class="p">:</span>
-            <span class="n">images</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
-
-    <span class="c1"># image driver</span>
-    <span class="n">driver</span> <span class="o">=</span> <span class="n">gdal</span><span class="o">.</span><span class="n">GetDriverByName</span><span class="p">(</span><span class="s1">&#39;GTiff&#39;</span><span class="p">)</span>
-    <span class="n">driver</span><span class="o">.</span><span class="n">Register</span><span class="p">()</span>
-
-    <span class="c1"># iterate over the different bands</span>
-    <span class="k">for</span> <span class="n">image</span> <span class="ow">in</span> <span class="n">images</span><span class="p">:</span>
-        <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Processing: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">image</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
-
-        <span class="c1"># read the image</span>
-        <span class="n">img</span> <span class="o">=</span> <span class="n">gdal</span><span class="o">.</span><span class="n">Open</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">image</span><span class="p">))</span>
-        <span class="n">band</span> <span class="o">=</span> <span class="n">img</span><span class="o">.</span><span class="n">GetRasterBand</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
-
-        <span class="c1"># read data as array</span>
-        <span class="n">data</span> <span class="o">=</span> <span class="n">band</span><span class="o">.</span><span class="n">ReadAsArray</span><span class="p">()</span>
-
-        <span class="c1"># mask of erroneous values, i.e. mask of values &lt; 0</span>
-        <span class="n">mask</span> <span class="o">=</span> <span class="n">data</span> <span class="o">&lt;</span> <span class="mi">0</span>
-
-        <span class="c1"># output filename</span>
-        <span class="n">fname</span> <span class="o">=</span> <span class="n">outpath</span><span class="o">.</span><span class="n">joinpath</span><span class="p">(</span><span class="n">image</span><span class="o">.</span><span class="n">stem</span><span class="p">)</span>
-
-        <span class="c1"># get the current band</span>
-        <span class="n">band</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s1">&#39;B</span><span class="se">\\</span><span class="s1">d{1,2}&#39;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">image</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;B&#39;</span><span class="p">,</span> <span class="s1">&#39;BAND_&#39;</span><span class="p">)</span>
-
-        <span class="c1"># check if the current band is a thermal band</span>
-        <span class="k">if</span> <span class="n">band</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">&#39;BAND_10&#39;</span><span class="p">,</span> <span class="s1">&#39;BAND_11&#39;</span><span class="p">]:</span>
-
-            <span class="c1"># output file name for TIRS bands</span>
-            <span class="n">fname</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">fname</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;_toa_brt.tif&#39;</span><span class="p">)</span>
-
-            <span class="c1"># calculate top of atmosphere brightness temperature</span>
-            <span class="k">with</span> <span class="n">warnings</span><span class="o">.</span><span class="n">catch_warnings</span><span class="p">():</span>
-                <span class="n">warnings</span><span class="o">.</span><span class="n">filterwarnings</span><span class="p">(</span><span class="s2">&quot;ignore&quot;</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="ne">RuntimeWarning</span><span class="p">)</span>
-
-                <span class="c1"># top of atmosphere radiance</span>
-                <span class="n">rad</span> <span class="o">=</span> <span class="p">(</span><span class="n">oli</span><span class="p">[</span><span class="s1">&#39;RADIANCE_MULT_</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">band</span><span class="p">)]</span> <span class="o">*</span> <span class="n">data</span> <span class="o">+</span>
-                       <span class="n">oli</span><span class="p">[</span><span class="s1">&#39;RADIANCE_ADD_</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">band</span><span class="p">)])</span>
-
-                <span class="c1"># top of atmosphere brightness temperature</span>
-                <span class="n">den</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">tir</span><span class="p">[</span><span class="s1">&#39;K1_CONSTANT_</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">band</span><span class="p">)]</span> <span class="o">/</span> <span class="n">rad</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
-                <span class="n">toa</span> <span class="o">=</span> <span class="n">tir</span><span class="p">[</span><span class="s1">&#39;K2_CONSTANT_</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">band</span><span class="p">)]</span> <span class="o">/</span> <span class="n">den</span>
-
-                <span class="c1"># clear memory</span>
-                <span class="k">del</span> <span class="n">den</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">rad</span>
-        <span class="k">else</span><span class="p">:</span>
-
-            <span class="c1"># whether to calculate top of atmosphere radiance or reflectance</span>
-            <span class="k">if</span> <span class="n">radiance</span><span class="p">:</span>
-
-                <span class="c1"># output file name for OLI bands: radiance</span>
-                <span class="n">fname</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">fname</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;_toa_rad.tif&#39;</span><span class="p">)</span>
-
-                <span class="c1"># calculate top of atmosphere radiance</span>
-                <span class="n">toa</span> <span class="o">=</span> <span class="p">(</span><span class="n">oli</span><span class="p">[</span><span class="s1">&#39;RADIANCE_MULT_</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">band</span><span class="p">)]</span> <span class="o">*</span> <span class="n">data</span> <span class="o">+</span>
-                       <span class="n">oli</span><span class="p">[</span><span class="s1">&#39;RADIANCE_ADD_</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">band</span><span class="p">)])</span>
-
-                <span class="c1"># clear memory</span>
-                <span class="k">del</span> <span class="n">data</span>
-
-            <span class="k">else</span><span class="p">:</span>
-
-                <span class="c1"># output file name for OLI bands: reflectance</span>
-                <span class="n">fname</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">fname</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;_toa_ref.tif&#39;</span><span class="p">)</span>
-
-                <span class="c1"># solar zenith angle in radians</span>
-                <span class="n">zenith</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">radians</span><span class="p">(</span><span class="mi">90</span> <span class="o">-</span> <span class="nb">float</span><span class="p">(</span><span class="n">metadata</span><span class="p">[</span><span class="s1">&#39;SUN_ELEVATION&#39;</span><span class="p">]))</span>
-
-                <span class="c1"># calculate top of the atmosphere reflectance</span>
-                <span class="n">ref</span> <span class="o">=</span> <span class="p">(</span><span class="n">oli</span><span class="p">[</span><span class="s1">&#39;REFLECTANCE_MULT_</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">band</span><span class="p">)]</span> <span class="o">*</span> <span class="n">data</span> <span class="o">+</span>
-                       <span class="n">oli</span><span class="p">[</span><span class="s1">&#39;REFLECTANCE_ADD_</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">band</span><span class="p">)])</span>
-                <span class="n">toa</span> <span class="o">=</span> <span class="n">ref</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">zenith</span><span class="p">)</span>
-
-                <span class="c1"># clear memory</span>
-                <span class="k">del</span> <span class="n">ref</span><span class="p">,</span> <span class="n">data</span>
-
-        <span class="c1"># mask erroneous values</span>
-        <span class="n">toa</span><span class="p">[</span><span class="n">mask</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>
-
-        <span class="c1"># output file</span>
-        <span class="n">outDs</span> <span class="o">=</span> <span class="n">driver</span><span class="o">.</span><span class="n">Create</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">fname</span><span class="p">),</span> <span class="n">img</span><span class="o">.</span><span class="n">RasterXSize</span><span class="p">,</span> <span class="n">img</span><span class="o">.</span><span class="n">RasterYSize</span><span class="p">,</span>
-                              <span class="n">img</span><span class="o">.</span><span class="n">RasterCount</span><span class="p">,</span> <span class="n">gdal</span><span class="o">.</span><span class="n">GDT_Float32</span><span class="p">)</span>
-        <span class="n">outband</span> <span class="o">=</span> <span class="n">outDs</span><span class="o">.</span><span class="n">GetRasterBand</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
-
-        <span class="c1"># write array</span>
-        <span class="n">outband</span><span class="o">.</span><span class="n">WriteArray</span><span class="p">(</span><span class="n">toa</span><span class="p">)</span>
-        <span class="n">outband</span><span class="o">.</span><span class="n">FlushCache</span><span class="p">()</span>
-
-        <span class="c1"># Set the geographic information</span>
-        <span class="n">outDs</span><span class="o">.</span><span class="n">SetProjection</span><span class="p">(</span><span class="n">img</span><span class="o">.</span><span class="n">GetProjection</span><span class="p">())</span>
-        <span class="n">outDs</span><span class="o">.</span><span class="n">SetGeoTransform</span><span class="p">(</span><span class="n">img</span><span class="o">.</span><span class="n">GetGeoTransform</span><span class="p">())</span>
-
-        <span class="c1"># clear memory</span>
-        <span class="k">del</span> <span class="n">outband</span><span class="p">,</span> <span class="n">band</span><span class="p">,</span> <span class="n">img</span><span class="p">,</span> <span class="n">outDs</span><span class="p">,</span> <span class="n">toa</span><span class="p">,</span> <span class="n">mask</span>
-
-    <span class="c1"># check if raw images should be removed</span>
-    <span class="k">if</span> <span class="n">remove_raw</span><span class="p">:</span>
-
-        <span class="c1"># raw digital number images</span>
-        <span class="n">_dn</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">scene</span><span class="o">.</span><span class="n">iterdir</span><span class="p">()</span> <span class="k">if</span> <span class="n">ipattern</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">))</span> <span class="ow">and</span>
-               <span class="ow">not</span> <span class="n">cal_pattern</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">))]</span>
-
-        <span class="c1"># remove raw digital number images</span>
-        <span class="k">for</span> <span class="n">toremove</span> <span class="ow">in</span> <span class="n">_dn</span><span class="p">:</span>
-            <span class="c1"># remove from disk</span>
-            <span class="n">os</span><span class="o">.</span><span class="n">unlink</span><span class="p">(</span><span class="n">toremove</span><span class="p">)</span>
-            <span class="n">LOGGER</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;rm </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">toremove</span><span class="p">))</span>
-
-    <span class="k">return</span></div>
-</pre></div>
-
-           </div>
-           
-          </div>
-          <footer>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/_modules/index.html b/docs/_build/html/_modules/index.html
index a46b727..51b1313 100644
--- a/docs/_build/html/_modules/index.html
+++ b/docs/_build/html/_modules/index.html
@@ -146,21 +146,10 @@
            <div itemprop="articleBody">
             
   <h1>All modules for which code is available</h1>
-<ul><li><a href="core/cli.html">core.cli</a></li>
-<li><a href="core/constants.html">core.constants</a></li>
-<li><a href="core/dataset.html">core.dataset</a></li>
-<li><a href="core/graphics.html">core.graphics</a></li>
-<li><a href="core/layers.html">core.layers</a></li>
-<li><a href="core/logging.html">core.logging</a></li>
-<li><a href="core/models.html">core.models</a></li>
-<li><a href="core/predict.html">core.predict</a></li>
-<li><a href="core/split.html">core.split</a></li>
-<li><a href="core/trainer.html">core.trainer</a></li>
-<li><a href="core/transforms.html">core.transforms</a></li>
-<li><a href="core/utils.html">core.utils</a></li>
-<li><a href="pysegcnn/core/dataset.html">pysegcnn.core.dataset</a></li>
+<ul><li><a href="pysegcnn/core/dataset.html">pysegcnn.core.dataset</a></li>
 <li><a href="pysegcnn/core/layers.html">pysegcnn.core.layers</a></li>
 <li><a href="pysegcnn/core/models.html">pysegcnn.core.models</a></li>
+<li><a href="pysegcnn/core/transforms.html">pysegcnn.core.transforms</a></li>
 </ul>
 
            </div>
diff --git a/docs/_build/html/_modules/pysegcnn/core/dataset.html b/docs/_build/html/_modules/pysegcnn/core/dataset.html
index d0811c9..d9f8fd6 100644
--- a/docs/_build/html/_modules/pysegcnn/core/dataset.html
+++ b/docs/_build/html/_modules/pysegcnn/core/dataset.html
@@ -195,54 +195,54 @@
 
 
 <div class="viewcode-block" id="ImageDataset"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.dataset.ImageDataset.html#pysegcnn.core.dataset.ImageDataset">[docs]</a><span class="k">class</span> <span class="nc">ImageDataset</span><span class="p">(</span><span class="n">Dataset</span><span class="p">):</span>
-    <span class="sa">r</span><span class="sd">&quot;&quot;&quot;Base class for multispectral image data.</span>
-
-<span class="sd">    Inheriting from `torch.utils.data.Dataset` to be compliant to the PyTorch</span>
-<span class="sd">    standard. Furthermore, using instances of `torch.utils.data.Dataset`</span>
-<span class="sd">    enables the use of the handy `torch.utils.data.DataLoader` class during</span>
-<span class="sd">    model training.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    root_dir : `str`</span>
-<span class="sd">        The root directory, path to the dataset.</span>
-<span class="sd">    use_bands : `list` [`str`], optional</span>
-<span class="sd">        A list of the spectral bands to use. The default is [].</span>
-<span class="sd">    tile_size : `int` or `None`, optional</span>
-<span class="sd">        The size of the tiles. If not `None`, each scene is divided into square</span>
-<span class="sd">        tiles of shape (tile_size, tile_size). The default is None.</span>
-<span class="sd">    pad : `bool`, optional</span>
-<span class="sd">        Whether to center pad the input image. Set ``pad`` = True, if the</span>
-<span class="sd">        images are not evenly divisible by the ``tile_size``. The image data is</span>
-<span class="sd">        padded with a constant padding value of zero. For each image, the</span>
-<span class="sd">        corresponding ground truth image is padded with a &quot;no data&quot; label.</span>
-<span class="sd">        The default is False.</span>
-<span class="sd">    gt_pattern : `str`, optional</span>
-<span class="sd">        A regural expression to match the ground truth naming convention.</span>
-<span class="sd">        All directories and subdirectories in ``root_dir`` are searched for</span>
-<span class="sd">        files matching ``gt_pattern``. The default is &#39;(.*)gt\\.tif&#39;.</span>
-<span class="sd">    sort : `bool`, optional</span>
-<span class="sd">        Whether to chronologically sort the samples. Useful for time series</span>
-<span class="sd">        data. The default is False.</span>
-<span class="sd">    seed : `int`, optional</span>
-<span class="sd">        The random seed. Used to split the dataset into training, validation</span>
-<span class="sd">        and test set. Useful for reproducibility. The default is 0.</span>
-<span class="sd">    transforms : `list` [`pysegcnn.core.split.Augment`], optional</span>
-<span class="sd">        List of `pysegcnn.core.split.Augment` instances. Each item in</span>
-<span class="sd">        ``transforms`` generates a distinct transformed version of the dataset.</span>
-<span class="sd">        The total dataset is composed of the original untransformed dataset</span>
-<span class="sd">        together with each transformed version of it.</span>
-<span class="sd">        If ``transforms`` = [], only the original dataset is used.</span>
-<span class="sd">        The default is [].</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
+    <span class="sd">&quot;&quot;&quot;Base class for multispectral image data.</span>
+
+<span class="sd">    Inheriting from :py:class:`torch.utils.data.Dataset` to be compliant to the</span>
+<span class="sd">    PyTorch standard. This enables the use of the handy</span>
+<span class="sd">    :py:class:`torch.utils.data.DataLoader` class during model training.</span>
 
 <span class="sd">    &quot;&quot;&quot;</span>
 
 <div class="viewcode-block" id="ImageDataset.__init__"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.dataset.ImageDataset.html#pysegcnn.core.dataset.ImageDataset.__init__">[docs]</a>    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="o">=</span><span class="p">[],</span> <span class="n">tile_size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
                  <span class="n">gt_pattern</span><span class="o">=</span><span class="s1">&#39;(.*)gt.tif&#39;</span><span class="p">,</span> <span class="n">sort</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">transforms</span><span class="o">=</span><span class="p">[]):</span>
+        <span class="sa">r</span><span class="sd">&quot;&quot;&quot;Initialize.</span>
+
+<span class="sd">        Parameters</span>
+<span class="sd">        ----------</span>
+<span class="sd">        root_dir : `str`</span>
+<span class="sd">            The root directory, path to the dataset.</span>
+<span class="sd">        use_bands : `list` [`str`], optional</span>
+<span class="sd">            A list of the spectral bands to use. The default is `[]`.</span>
+<span class="sd">        tile_size : `int` or `None`, optional</span>
+<span class="sd">            The size of the tiles. If not `None`, each scene is divided into</span>
+<span class="sd">            square tiles of shape ``(tile_size, tile_size)``. The default is</span>
+<span class="sd">            `None`.</span>
+<span class="sd">        pad : `bool`, optional</span>
+<span class="sd">            Whether to center pad the input image. Set ``pad=True``, if the</span>
+<span class="sd">            images are not evenly divisible by the ``tile_size``. The image</span>
+<span class="sd">            data is padded with a constant padding value of zero. For each</span>
+<span class="sd">            image, the corresponding ground truth image is padded with a</span>
+<span class="sd">            &quot;no data&quot; label. The default is `False`.</span>
+<span class="sd">        gt_pattern : `str`, optional</span>
+<span class="sd">            A regural expression to match the ground truth naming convention.</span>
+<span class="sd">            All directories and subdirectories in ``root_dir`` are searched for</span>
+<span class="sd">            files matching ``gt_pattern``. The default is `(.*)gt\\.tif`.</span>
+<span class="sd">        sort : `bool`, optional</span>
+<span class="sd">            Whether to chronologically sort the samples. Useful for time series</span>
+<span class="sd">            data. The default is `False`.</span>
+<span class="sd">        seed : `int`, optional</span>
+<span class="sd">            The random seed. Used to split the dataset into training,</span>
+<span class="sd">            validation and test set. Useful for reproducibility. The default is</span>
+<span class="sd">            `0`.</span>
+<span class="sd">        transforms : `list`, optional</span>
+<span class="sd">            List of :py:class:`pysegcnn.core.transforms.Augment` instances.</span>
+<span class="sd">            Each item in ``transforms`` generates a distinct transformed</span>
+<span class="sd">            version of the dataset. The total dataset is composed of the</span>
+<span class="sd">            original untransformed dataset together with each transformed</span>
+<span class="sd">            version of it. If ``transforms=[]``, only the original dataset is</span>
+<span class="sd">            used. The default is `[]`.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
         <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
 
         <span class="c1"># dataset configuration</span>
@@ -642,7 +642,7 @@
 <span class="sd">        -------</span>
 <span class="sd">        stack : `numpy.ndarray`</span>
 <span class="sd">            The input data of the sample.</span>
-<span class="sd">        gt : TYPE</span>
+<span class="sd">        gt : `numpy.ndarray`</span>
 <span class="sd">            The ground truth of the sample.</span>
 
 <span class="sd">        &quot;&quot;&quot;</span>
@@ -653,7 +653,7 @@
         <span class="k">return</span> <span class="n">stack</span><span class="p">,</span> <span class="n">gt</span>
 
     <span class="k">def</span> <span class="nf">to_tensor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">dtype</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Convert ``x`` to `torch.Tensor`.</span>
+        <span class="sd">&quot;&quot;&quot;Convert ``x`` to :py:class:`torch.Tensor`.</span>
 
 <span class="sd">        Parameters</span>
 <span class="sd">        ----------</span>
@@ -712,86 +712,43 @@
         <span class="k">return</span> <span class="n">fs</span></div>
 
 
-<span class="k">class</span> <span class="nc">StandardEoDataset</span><span class="p">(</span><span class="n">ImageDataset</span><span class="p">):</span>
+<div class="viewcode-block" id="StandardEoDataset"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.dataset.StandardEoDataset.html#pysegcnn.core.dataset.StandardEoDataset">[docs]</a><span class="k">class</span> <span class="nc">StandardEoDataset</span><span class="p">(</span><span class="n">ImageDataset</span><span class="p">):</span>
     <span class="sa">r</span><span class="sd">&quot;&quot;&quot;Base class for standard Earth Observation style datasets.</span>
 
-<span class="sd">    `pysegcnn.core.dataset.StandardEoDataset` implements the</span>
-<span class="sd">    `~pysegcnn.core.dataset.StandardEoDataset.compose_scenes` method for</span>
-<span class="sd">    datasets with the following directory structure:</span>
+<span class="sd">    :py:class:`pysegcnn.core.dataset.StandardEoDataset` implements the</span>
+<span class="sd">    :py:meth:`~pysegcnn.core.dataset.StandardEoDataset.compose_scenes` method</span>
+<span class="sd">    for datasets with the following directory structure:</span>
 
 <span class="sd">    root_dir/</span>
-<span class="sd">        scene_id_1/</span>
-<span class="sd">            scene_id_1_B1.tif</span>
-<span class="sd">            scene_id_1_B2.tif</span>
-<span class="sd">            .</span>
-<span class="sd">            .</span>
-<span class="sd">            .</span>
-<span class="sd">            scene_id_1_BN.tif</span>
-<span class="sd">        scene_id_2/</span>
-<span class="sd">            scene_id_2_B1.tif</span>
-<span class="sd">            scene_id_2_B2.tif</span>
-<span class="sd">            .</span>
-<span class="sd">            .</span>
-<span class="sd">            .</span>
-<span class="sd">            scene_id_2_BN.tif</span>
-<span class="sd">        .</span>
-<span class="sd">        .</span>
-<span class="sd">        .</span>
-<span class="sd">        scene_id_N/</span>
-<span class="sd">            .</span>
-<span class="sd">            .</span>
-<span class="sd">            .</span>
+<span class="sd">        - scene_id_1/</span>
+<span class="sd">             - scene_id_1_B1.tif</span>
+<span class="sd">             - scene_id_1_B2.tif</span>
+<span class="sd">             - ...</span>
+<span class="sd">             - scene_id_1_BN.tif</span>
+<span class="sd">        - scene_id_2/</span>
+<span class="sd">             - scene_id_2_B1.tif</span>
+<span class="sd">             - scene_id_2_B2.tif</span>
+<span class="sd">             - ...</span>
+<span class="sd">             - scene_id_2_BN.tif</span>
+<span class="sd">        - ...</span>
+<span class="sd">        - scene_id_N/</span>
+<span class="sd">            - ...</span>
 
 <span class="sd">    If your dataset shares this directory structure, you can directly inherit</span>
-<span class="sd">    `pysegcnn.core.dataset.StandardEoDataset` and implement the remaining</span>
-<span class="sd">    methods.</span>
-
-<span class="sd">    See `pysegcnn.core.dataset.SparcsDataset` for an example.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    root_dir : `str`</span>
-<span class="sd">        The root directory, path to the dataset.</span>
-<span class="sd">    use_bands : `list` [`str`], optional</span>
-<span class="sd">        A list of the spectral bands to use. The default is [].</span>
-<span class="sd">    tile_size : `int` or `None`, optional</span>
-<span class="sd">        The size of the tiles. If not `None`, each scene is divided into square</span>
-<span class="sd">        tiles of shape (tile_size, tile_size). The default is None.</span>
-<span class="sd">    pad : `bool`, optional</span>
-<span class="sd">        Whether to center pad the input image. Set ``pad`` = True, if the</span>
-<span class="sd">        images are not evenly divisible by the ``tile_size``. The image data is</span>
-<span class="sd">        padded with a constant padding value of zero. For each image, the</span>
-<span class="sd">        corresponding ground truth image is padded with a &quot;no data&quot; label.</span>
-<span class="sd">        The default is False.</span>
-<span class="sd">    gt_pattern : `str`, optional</span>
-<span class="sd">        A regural expression to match the ground truth naming convention. All</span>
-<span class="sd">        directories and subdirectories in ``root_dir`` are searched for files</span>
-<span class="sd">        matching ``gt_pattern``. The default is &#39;(.*)gt\\.tif&#39;.</span>
-<span class="sd">    sort : `bool`, optional</span>
-<span class="sd">        Whether to chronologically sort the samples. Useful for time series</span>
-<span class="sd">        data. The default is False.</span>
-<span class="sd">    seed : `int`, optional</span>
-<span class="sd">        The random seed. Used to split the dataset into training, validation</span>
-<span class="sd">        and test set. Useful for reproducibility. The default is 0.</span>
-<span class="sd">    transforms : `list` [`pysegcnn.core.split.Augment`], optional</span>
-<span class="sd">        List of `pysegcnn.core.split.Augment` instances. Each item in</span>
-<span class="sd">        ``transforms`` generates a distinct transformed version of the dataset.</span>
-<span class="sd">        The total dataset is composed of the original untransformed dataset</span>
-<span class="sd">        together with each transformed version of it.</span>
-<span class="sd">        If ``transforms`` = [], only the original dataset is used.</span>
-<span class="sd">        The default is [].</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
+<span class="sd">    :py:class:`pysegcnn.core.dataset.StandardEoDataset` and implement the</span>
+<span class="sd">    remaining methods. If not, you can use</span>
+<span class="sd">    :py:func:`pysegcnn.core.utils.standard_eo_structure` to transfer your</span>
+<span class="sd">    dataset to the above directory structure.</span>
+
+<span class="sd">    See :py:class:`pysegcnn.core.dataset.SparcsDataset` for an example.</span>
 
 <span class="sd">    &quot;&quot;&quot;</span>
 
-    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="o">=</span><span class="p">[],</span> <span class="n">tile_size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+<div class="viewcode-block" id="StandardEoDataset.__init__"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.dataset.StandardEoDataset.html#pysegcnn.core.dataset.StandardEoDataset.__init__">[docs]</a>    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="o">=</span><span class="p">[],</span> <span class="n">tile_size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
                  <span class="n">gt_pattern</span><span class="o">=</span><span class="s1">&#39;(.*)gt</span><span class="se">\\</span><span class="s1">.tif&#39;</span><span class="p">,</span> <span class="n">sort</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">transforms</span><span class="o">=</span><span class="p">[]):</span>
         <span class="c1"># initialize super class ImageDataset</span>
         <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="p">,</span> <span class="n">tile_size</span><span class="p">,</span> <span class="n">pad</span><span class="p">,</span> <span class="n">gt_pattern</span><span class="p">,</span>
-                         <span class="n">sort</span><span class="p">,</span> <span class="n">seed</span><span class="p">,</span> <span class="n">transforms</span><span class="p">)</span>
+                         <span class="n">sort</span><span class="p">,</span> <span class="n">seed</span><span class="p">,</span> <span class="n">transforms</span><span class="p">)</span></div>
 
     <span class="k">def</span> <span class="nf">_get_band_number</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
         <span class="sd">&quot;&quot;&quot;Return the band number of a scene .tif file.</span>
@@ -859,32 +816,7 @@
         <span class="k">return</span> <span class="n">scene_data</span>
 
     <span class="k">def</span> <span class="nf">compose_scenes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Build the list of samples of the dataset.</span>
-
-<span class="sd">        Each sample is represented by a dictionary.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        scenes : `list` [`dict`]</span>
-<span class="sd">            Each item in ``scenes`` is a `dict` with keys:</span>
-<span class="sd">                ``&#39;band_name_1&#39;``</span>
-<span class="sd">                    Path to the file of band_1.</span>
-<span class="sd">                ``&#39;band_name_2&#39;``</span>
-<span class="sd">                    Path to the file of band_2.</span>
-<span class="sd">                ``&#39;band_name_n&#39;``</span>
-<span class="sd">                    Path to the file of band_n.</span>
-<span class="sd">                ``&#39;gt&#39;``</span>
-<span class="sd">                    Path to the ground truth file.</span>
-<span class="sd">                ``&#39;date&#39;``</span>
-<span class="sd">                    The date of the sample.</span>
-<span class="sd">                ``&#39;tile&#39;``</span>
-<span class="sd">                    The tile id of the sample.</span>
-<span class="sd">                ``&#39;transform&#39;``</span>
-<span class="sd">                    The transformation to apply.</span>
-<span class="sd">                ``&#39;id&#39;``</span>
-<span class="sd">                    The scene identifier.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="sd">&quot;&quot;&quot;Build the list of samples of the dataset.&quot;&quot;&quot;</span>
         <span class="c1"># search the root directory</span>
         <span class="n">scenes</span> <span class="o">=</span> <span class="p">[]</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">gt</span> <span class="o">=</span> <span class="p">[]</span>
@@ -904,7 +836,7 @@
 
                 <span class="c1"># list the spectral bands of the scene</span>
                 <span class="n">bands</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dirpath</span><span class="p">,</span> <span class="n">f</span><span class="p">)</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">files</span>
-                         <span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s1">&#39;B</span><span class="se">\\</span><span class="s1">dA|B</span><span class="se">\\</span><span class="s1">d{1,2}&#39;</span><span class="p">,</span> <span class="n">f</span><span class="p">)]</span>
+                         <span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s1">&#39;B</span><span class="se">\\</span><span class="s1">dA|B</span><span class="se">\\</span><span class="s1">d{1,2}(.*).tif$&#39;</span><span class="p">,</span> <span class="n">f</span><span class="p">)]</span>
 
                 <span class="c1"># get the ground truth mask</span>
                 <span class="k">try</span><span class="p">:</span>
@@ -946,51 +878,17 @@
             <span class="n">scenes</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">k</span><span class="p">:</span> <span class="n">k</span><span class="p">[</span><span class="s1">&#39;date&#39;</span><span class="p">])</span>
             <span class="bp">self</span><span class="o">.</span><span class="n">gt</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">k</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">parse_scene_id</span><span class="p">(</span><span class="n">k</span><span class="p">)[</span><span class="s1">&#39;date&#39;</span><span class="p">])</span>
 
-        <span class="k">return</span> <span class="n">scenes</span>
+        <span class="k">return</span> <span class="n">scenes</span></div>
 
 
 <div class="viewcode-block" id="SparcsDataset"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.dataset.SparcsDataset.html#pysegcnn.core.dataset.SparcsDataset">[docs]</a><span class="k">class</span> <span class="nc">SparcsDataset</span><span class="p">(</span><span class="n">StandardEoDataset</span><span class="p">):</span>
-    <span class="sa">r</span><span class="sd">&quot;&quot;&quot;Class for the `Sparcs`_ dataset.</span>
+    <span class="sd">&quot;&quot;&quot;Class for the `Sparcs`_ dataset by `Hughes &amp; Hayes (2014)`_.</span>
 
 <span class="sd">    .. _Sparcs:</span>
 <span class="sd">        https://www.usgs.gov/land-resources/nli/landsat/spatial-procedures-automated-removal-cloud-and-shadow-sparcs-validation</span>
 
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    root_dir : `str`</span>
-<span class="sd">        The root directory, path to the dataset.</span>
-<span class="sd">    use_bands : `list` [`str`], optional</span>
-<span class="sd">        A list of the spectral bands to use. The default is [].</span>
-<span class="sd">    tile_size : `int` or `None`, optional</span>
-<span class="sd">        The size of the tiles. If not `None`, each scene is divided into square</span>
-<span class="sd">        tiles of shape (tile_size, tile_size). The default is None.</span>
-<span class="sd">    pad : `bool`, optional</span>
-<span class="sd">        Whether to center pad the input image. Set ``pad`` = True, if the</span>
-<span class="sd">        images are not evenly divisible by the ``tile_size``. The image data is</span>
-<span class="sd">        padded with a constant padding value of zero. For each image, the</span>
-<span class="sd">        corresponding ground truth image is padded with a &quot;no data&quot; label.</span>
-<span class="sd">        The default is False.</span>
-<span class="sd">    gt_pattern : `str`, optional</span>
-<span class="sd">        A regural expression to match the ground truth naming convention. All</span>
-<span class="sd">        directories and subdirectories in ``root_dir`` are searched for files</span>
-<span class="sd">        matching ``gt_pattern``. The default is &#39;(.*)gt\\.tif&#39;.</span>
-<span class="sd">    sort : `bool`, optional</span>
-<span class="sd">        Whether to chronologically sort the samples. Useful for time series</span>
-<span class="sd">        data. The default is False.</span>
-<span class="sd">    seed : `int`, optional</span>
-<span class="sd">        The random seed. Used to split the dataset into training, validation</span>
-<span class="sd">        and test set. Useful for reproducibility. The default is 0.</span>
-<span class="sd">    transforms : `list` [`pysegcnn.core.split.Augment`], optional</span>
-<span class="sd">        List of `pysegcnn.core.split.Augment` instances. Each item in</span>
-<span class="sd">        ``transforms`` generates a distinct transformed version of the dataset.</span>
-<span class="sd">        The total dataset is composed of the original untransformed dataset</span>
-<span class="sd">        together with each transformed version of it.</span>
-<span class="sd">        If ``transforms`` = [], only the original dataset is used.</span>
-<span class="sd">        The default is [].</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
+<span class="sd">    .. _Hughes &amp; Hayes (2014):</span>
+<span class="sd">        https://www.mdpi.com/2072-4292/6/6/4907</span>
 
 <span class="sd">    &quot;&quot;&quot;</span>
 
@@ -1073,46 +971,7 @@
 
 
 <span class="k">class</span> <span class="nc">ProSnowDataset</span><span class="p">(</span><span class="n">StandardEoDataset</span><span class="p">):</span>
-    <span class="sa">r</span><span class="sd">&quot;&quot;&quot;Class for the ProSnow datasets.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    root_dir : `str`</span>
-<span class="sd">        The root directory, path to the dataset.</span>
-<span class="sd">    use_bands : `list` [`str`], optional</span>
-<span class="sd">        A list of the spectral bands to use. The default is [].</span>
-<span class="sd">    tile_size : `int` or `None`, optional</span>
-<span class="sd">        The size of the tiles. If not `None`, each scene is divided into square</span>
-<span class="sd">        tiles of shape (tile_size, tile_size). The default is None.</span>
-<span class="sd">    pad : `bool`, optional</span>
-<span class="sd">        Whether to center pad the input image. Set ``pad`` = True, if the</span>
-<span class="sd">        images are not evenly divisible by the ``tile_size``. The image data is</span>
-<span class="sd">        padded with a constant padding value of zero. For each image, the</span>
-<span class="sd">        corresponding ground truth image is padded with a &quot;no data&quot; label.</span>
-<span class="sd">        The default is False.</span>
-<span class="sd">    gt_pattern : `str`, optional</span>
-<span class="sd">        A regural expression to match the ground truth naming convention. All</span>
-<span class="sd">        directories and subdirectories in ``root_dir`` are searched for files</span>
-<span class="sd">        matching ``gt_pattern``. The default is &#39;(.*)gt\\.tif&#39;.</span>
-<span class="sd">    sort : `bool`, optional</span>
-<span class="sd">        Whether to chronologically sort the samples. Useful for time series</span>
-<span class="sd">        data. The default is False.</span>
-<span class="sd">    seed : `int`, optional</span>
-<span class="sd">        The random seed. Used to split the dataset into training, validation</span>
-<span class="sd">        and test set. Useful for reproducibility. The default is 0.</span>
-<span class="sd">    transforms : `list` [`pysegcnn.core.split.Augment`], optional</span>
-<span class="sd">        List of `pysegcnn.core.split.Augment` instances. Each item in</span>
-<span class="sd">        ``transforms`` generates a distinct transformed version of the dataset.</span>
-<span class="sd">        The total dataset is composed of the original untransformed dataset</span>
-<span class="sd">        together with each transformed version of it.</span>
-<span class="sd">        If ``transforms`` = [], only the original dataset is used.</span>
-<span class="sd">        The default is [].</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="sd">&quot;&quot;&quot;Class for the ProSnow datasets.&quot;&quot;&quot;</span>
 
     <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="o">=</span><span class="p">[],</span> <span class="n">tile_size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
                  <span class="n">gt_pattern</span><span class="o">=</span><span class="s1">&#39;(.*)gt</span><span class="se">\\</span><span class="s1">.tif&#39;</span><span class="p">,</span> <span class="n">sort</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">transforms</span><span class="o">=</span><span class="p">[]):</span>
@@ -1182,46 +1041,7 @@
 
 
 <span class="k">class</span> <span class="nc">ProSnowGarmisch</span><span class="p">(</span><span class="n">ProSnowDataset</span><span class="p">):</span>
-    <span class="sa">r</span><span class="sd">&quot;&quot;&quot;Class for the ProSnow Garmisch dataset.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    root_dir : `str`</span>
-<span class="sd">        The root directory, path to the dataset.</span>
-<span class="sd">    use_bands : `list` [`str`], optional</span>
-<span class="sd">        A list of the spectral bands to use. The default is [].</span>
-<span class="sd">    tile_size : `int` or `None`, optional</span>
-<span class="sd">        The size of the tiles. If not `None`, each scene is divided into square</span>
-<span class="sd">        tiles of shape (tile_size, tile_size). The default is None.</span>
-<span class="sd">    pad : `bool`, optional</span>
-<span class="sd">        Whether to center pad the input image. Set ``pad`` = True, if the</span>
-<span class="sd">        images are not evenly divisible by the ``tile_size``. The image data is</span>
-<span class="sd">        padded with a constant padding value of zero. For each image, the</span>
-<span class="sd">        corresponding ground truth image is padded with a &quot;no data&quot; label.</span>
-<span class="sd">        The default is False.</span>
-<span class="sd">    gt_pattern : `str`, optional</span>
-<span class="sd">        A regural expression to match the ground truth naming convention. All</span>
-<span class="sd">        directories and subdirectories in ``root_dir`` are searched for files</span>
-<span class="sd">        matching ``gt_pattern``. The default is &#39;(.*)gt\\.tif&#39;.</span>
-<span class="sd">    sort : `bool`, optional</span>
-<span class="sd">        Whether to chronologically sort the samples. Useful for time series</span>
-<span class="sd">        data. The default is False.</span>
-<span class="sd">    seed : `int`, optional</span>
-<span class="sd">        The random seed. Used to split the dataset into training, validation</span>
-<span class="sd">        and test set. Useful for reproducibility. The default is 0.</span>
-<span class="sd">    transforms : `list` [`pysegcnn.core.split.Augment`], optional</span>
-<span class="sd">        List of `pysegcnn.core.split.Augment` instances. Each item in</span>
-<span class="sd">        ``transforms`` generates a distinct transformed version of the dataset.</span>
-<span class="sd">        The total dataset is composed of the original untransformed dataset</span>
-<span class="sd">        together with each transformed version of it.</span>
-<span class="sd">        If ``transforms`` = [], only the original dataset is used.</span>
-<span class="sd">        The default is [].</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="sd">&quot;&quot;&quot;Class for the ProSnow Garmisch dataset.&quot;&quot;&quot;</span>
 
     <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="o">=</span><span class="p">[],</span> <span class="n">tile_size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
                  <span class="n">gt_pattern</span><span class="o">=</span><span class="s1">&#39;(.*)gt</span><span class="se">\\</span><span class="s1">.tif&#39;</span><span class="p">,</span> <span class="n">sort</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">transforms</span><span class="o">=</span><span class="p">[]):</span>
@@ -1242,46 +1062,7 @@
 
 
 <span class="k">class</span> <span class="nc">ProSnowObergurgl</span><span class="p">(</span><span class="n">ProSnowDataset</span><span class="p">):</span>
-    <span class="sa">r</span><span class="sd">&quot;&quot;&quot;Class for the ProSnow Obergurgl dataset.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    root_dir : `str`</span>
-<span class="sd">        The root directory, path to the dataset.</span>
-<span class="sd">    use_bands : `list` [`str`], optional</span>
-<span class="sd">        A list of the spectral bands to use. The default is [].</span>
-<span class="sd">    tile_size : `int` or `None`, optional</span>
-<span class="sd">        The size of the tiles. If not `None`, each scene is divided into square</span>
-<span class="sd">        tiles of shape (tile_size, tile_size). The default is None.</span>
-<span class="sd">    pad : `bool`, optional</span>
-<span class="sd">        Whether to center pad the input image. Set ``pad`` = True, if the</span>
-<span class="sd">        images are not evenly divisible by the ``tile_size``. The image data is</span>
-<span class="sd">        padded with a constant padding value of zero. For each image, the</span>
-<span class="sd">        corresponding ground truth image is padded with a &quot;no data&quot; label.</span>
-<span class="sd">        The default is False.</span>
-<span class="sd">    gt_pattern : `str`, optional</span>
-<span class="sd">        A regural expression to match the ground truth naming convention. All</span>
-<span class="sd">        directories and subdirectories in ``root_dir`` are searched for files</span>
-<span class="sd">        matching ``gt_pattern``. The default is &#39;(.*)gt\\.tif&#39;.</span>
-<span class="sd">    sort : `bool`, optional</span>
-<span class="sd">        Whether to chronologically sort the samples. Useful for time series</span>
-<span class="sd">        data. The default is False.</span>
-<span class="sd">    seed : `int`, optional</span>
-<span class="sd">        The random seed. Used to split the dataset into training, validation</span>
-<span class="sd">        and test set. Useful for reproducibility. The default is 0.</span>
-<span class="sd">    transforms : `list` [`pysegcnn.core.split.Augment`], optional</span>
-<span class="sd">        List of `pysegcnn.core.split.Augment` instances. Each item in</span>
-<span class="sd">        ``transforms`` generates a distinct transformed version of the dataset.</span>
-<span class="sd">        The total dataset is composed of the original untransformed dataset</span>
-<span class="sd">        together with each transformed version of it.</span>
-<span class="sd">        If ``transforms`` = [], only the original dataset is used.</span>
-<span class="sd">        The default is [].</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="sd">&quot;&quot;&quot;Class for the ProSnow Obergurgl dataset.&quot;&quot;&quot;</span>
 
     <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="o">=</span><span class="p">[],</span> <span class="n">tile_size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
                  <span class="n">gt_pattern</span><span class="o">=</span><span class="s1">&#39;(.*)gt</span><span class="se">\\</span><span class="s1">.tif&#39;</span><span class="p">,</span> <span class="n">sort</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">seed</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">transforms</span><span class="o">=</span><span class="p">[]):</span>
@@ -1302,50 +1083,13 @@
 
 
 <div class="viewcode-block" id="Cloud95Dataset"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.dataset.Cloud95Dataset.html#pysegcnn.core.dataset.Cloud95Dataset">[docs]</a><span class="k">class</span> <span class="nc">Cloud95Dataset</span><span class="p">(</span><span class="n">ImageDataset</span><span class="p">):</span>
-    <span class="sa">r</span><span class="sd">&quot;&quot;&quot;Class for the `Cloud-95`_ dataset by `Mohajerani &amp; Saeedi (2020)`_.</span>
+    <span class="sd">&quot;&quot;&quot;Class for the `Cloud-95`_ dataset by `Mohajerani &amp; Saeedi (2020)`_.</span>
 
 <span class="sd">    .. _Cloud-95:</span>
 <span class="sd">        https://github.com/SorourMo/95-Cloud-An-Extension-to-38-Cloud-Dataset</span>
 <span class="sd">    .. _Mohajerani &amp; Saeedi (2020):</span>
 <span class="sd">        https://arxiv.org/abs/2001.08768</span>
 
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    root_dir : `str`</span>
-<span class="sd">        The root directory, path to the dataset.</span>
-<span class="sd">    use_bands : `list` [`str`], optional</span>
-<span class="sd">        A list of the spectral bands to use. The default is [].</span>
-<span class="sd">    tile_size : `int` or `None`, optional</span>
-<span class="sd">        The size of the tiles. If not `None`, each scene is divided into square</span>
-<span class="sd">        tiles of shape (tile_size, tile_size). The default is None.</span>
-<span class="sd">    pad : `bool`, optional</span>
-<span class="sd">        Whether to center pad the input image. Set ``pad`` = True, if the</span>
-<span class="sd">        images are not evenly divisible by the ``tile_size``. The image data is</span>
-<span class="sd">        padded with a constant padding value of zero. For each image, the</span>
-<span class="sd">        corresponding ground truth image is padded with a &quot;no data&quot; label.</span>
-<span class="sd">        The default is False.</span>
-<span class="sd">    gt_pattern : `str`, optional</span>
-<span class="sd">        A regural expression to match the ground truth naming convention. All</span>
-<span class="sd">        directories and subdirectories in ``root_dir`` are searched for files</span>
-<span class="sd">        matching ``gt_pattern``. The default is &#39;(.*)gt\\.tif&#39;.</span>
-<span class="sd">    sort : `bool`, optional</span>
-<span class="sd">        Whether to chronologically sort the samples. Useful for time series</span>
-<span class="sd">        data. The default is False.</span>
-<span class="sd">    seed : `int`, optional</span>
-<span class="sd">        The random seed. Used to split the dataset into training, validation</span>
-<span class="sd">        and test set. Useful for reproducibility. The default is 0.</span>
-<span class="sd">    transforms : `list` [`pysegcnn.core.split.Augment`], optional</span>
-<span class="sd">        List of `pysegcnn.core.split.Augment` instances. Each item in</span>
-<span class="sd">        ``transforms`` generates a distinct transformed version of the dataset.</span>
-<span class="sd">        The total dataset is composed of the original untransformed dataset</span>
-<span class="sd">        together with each transformed version of it.</span>
-<span class="sd">        If ``transforms`` = [], only the original dataset is used.</span>
-<span class="sd">        The default is [].</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
 <span class="sd">    &quot;&quot;&quot;</span>
 
 <div class="viewcode-block" id="Cloud95Dataset.__init__"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.dataset.Cloud95Dataset.html#pysegcnn.core.dataset.Cloud95Dataset.__init__">[docs]</a>    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root_dir</span><span class="p">,</span> <span class="n">use_bands</span><span class="o">=</span><span class="p">[],</span> <span class="n">tile_size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
@@ -1435,32 +1179,7 @@
         <span class="k">return</span> <span class="n">parse_landsat_scene</span><span class="p">(</span><span class="n">scene_id</span><span class="p">)</span>
 
     <span class="k">def</span> <span class="nf">compose_scenes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;Build the list of samples of the dataset.</span>
-
-<span class="sd">        Each sample is represented by a dictionary.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        scenes : `list` [`dict`]</span>
-<span class="sd">            Each item in ``scenes`` is a `dict` with keys:</span>
-<span class="sd">                ``&#39;band_name_1&#39;``</span>
-<span class="sd">                    Path to the file of band_1.</span>
-<span class="sd">                ``&#39;band_name_2&#39;``</span>
-<span class="sd">                    Path to the file of band_2.</span>
-<span class="sd">                ``&#39;band_name_n&#39;``</span>
-<span class="sd">                    Path to the file of band_n.</span>
-<span class="sd">                ``&#39;gt&#39;``</span>
-<span class="sd">                    Path to the ground truth file.</span>
-<span class="sd">                ``&#39;date&#39;``</span>
-<span class="sd">                    The date of the sample.</span>
-<span class="sd">                ``&#39;tile&#39;``</span>
-<span class="sd">                    The tile id of the sample.</span>
-<span class="sd">                ``&#39;transform&#39;``</span>
-<span class="sd">                    The transformation to apply.</span>
-<span class="sd">                ``&#39;id&#39;``</span>
-<span class="sd">                    The scene identifier.</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="sd">&quot;&quot;&quot;Build the list of samples of the dataset.&quot;&quot;&quot;</span>
         <span class="c1"># whether to exclude patches with more than 80% black pixels</span>
         <span class="n">ipatches</span> <span class="o">=</span> <span class="p">[]</span>
         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">exclude</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
diff --git a/docs/_build/html/_modules/pysegcnn/core/layers.html b/docs/_build/html/_modules/pysegcnn/core/layers.html
index 1c7ad93..b0373e2 100644
--- a/docs/_build/html/_modules/pysegcnn/core/layers.html
+++ b/docs/_build/html/_modules/pysegcnn/core/layers.html
@@ -178,29 +178,30 @@
 <span class="sd">    calculated such that the output of the convolution has the same spatial</span>
 <span class="sd">    dimensions as the input.</span>
 
-<span class="sd">    Parameters</span>
+<span class="sd">    Attributes</span>
 <span class="sd">    ----------</span>
-<span class="sd">    *args: `list` [`str`]</span>
-<span class="sd">        positional arguments passed to `torch.nn.Conv2d`:</span>
-<span class="sd">            ``&#39;in_channels&#39;``: `int`</span>
-<span class="sd">                Number of input channels.</span>
-<span class="sd">            ``&#39;out_channels&#39;``: `int`</span>
-<span class="sd">                Number of output channels.</span>
-<span class="sd">            ``&#39;kernel_size&#39;``: `int` or `tuple` [`int`]</span>
-<span class="sd">                Size of the convolving kernel.</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">        Additional keyword arguments passed to `torch.nn.Conv2d`_.</span>
-
-<span class="sd">    .. _torch.nn.Conv2d:</span>
-<span class="sd">        https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html#torch.nn.Conv2d</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
+<span class="sd">    padding : `tuple` [`int`]</span>
+<span class="sd">        The amount of padding, (pad_height, pad_width).</span>
 
 <span class="sd">    &quot;&quot;&quot;</span>
 
 <div class="viewcode-block" id="Conv2dSame.__init__"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.layers.Conv2dSame.html#pysegcnn.core.layers.Conv2dSame.__init__">[docs]</a>    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;Initialize.</span>
+
+<span class="sd">        Parameters</span>
+<span class="sd">        ----------</span>
+<span class="sd">        *args: `list` [`str`]</span>
+<span class="sd">            positional arguments passed to :py:class:`torch.nn.Conv2d`:</span>
+<span class="sd">                ``&#39;in_channels&#39;``: `int`</span>
+<span class="sd">                    Number of input channels.</span>
+<span class="sd">                ``&#39;out_channels&#39;``: `int`</span>
+<span class="sd">                    Number of output channels.</span>
+<span class="sd">                ``&#39;kernel_size&#39;``: `int` or `tuple` [`int`]</span>
+<span class="sd">                    Size of the convolving kernel.</span>
+<span class="sd">        **kwargs: `dict` [`str`]</span>
+<span class="sd">            Additional keyword arguments passed to :py:class:`torch.nn.Conv2d`.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
         <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
 
         <span class="c1"># define tensorflows &quot;SAME&quot; padding for stride = 1</span>
@@ -223,7 +224,7 @@
 <span class="sd">        Returns</span>
 <span class="sd">        -------</span>
 <span class="sd">        p : `int`</span>
-<span class="sd">            the amount of padding.</span>
+<span class="sd">            The amount of padding.</span>
 
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="c1"># calculates the padding so that the convolution</span>
@@ -240,7 +241,7 @@
 <span class="sd">        Number of input channels.</span>
 <span class="sd">    out_channels : `int`</span>
 <span class="sd">        Number of output channels.</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
+<span class="sd">    **kwargs: `dict` [`str`]</span>
 <span class="sd">        Additional arguments passed to `pysegcnn.core.layers.Conv2dSame`.</span>
 
 <span class="sd">    Returns</span>
@@ -263,28 +264,39 @@
 <div class="viewcode-block" id="Block"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.layers.Block.html#pysegcnn.core.layers.Block">[docs]</a><span class="k">class</span> <span class="nc">Block</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Module</span><span class="p">):</span>
     <span class="sd">&quot;&quot;&quot;Basic convolutional block.</span>
 
-<span class="sd">    Parameters</span>
+<span class="sd">    Attributes</span>
 <span class="sd">    ----------</span>
 <span class="sd">    in_channels : `int`</span>
 <span class="sd">        Number of input channels.</span>
 <span class="sd">    out_channels : `int`</span>
 <span class="sd">        Number of output channels.</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">         Additional arguments passed to `pysegcnn.core.layers.Conv2dSame`.</span>
-
-<span class="sd">    Raises</span>
-<span class="sd">    ------</span>
-<span class="sd">    TypeError</span>
-<span class="sd">        Raised if `~pysegcnn.core.layers.Block.layers` method does not return</span>
-<span class="sd">        an instance of `torch.nn.Sequential`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
+<span class="sd">    kwargs: `dict` [`str`]</span>
+<span class="sd">        Additional arguments passed to</span>
+<span class="sd">        :py:class:`pysegcnn.core.layers.Conv2dSame`.</span>
+<span class="sd">    conv : :py:class:`torch.nn.Sequential`</span>
+<span class="sd">        The convolutional layers of the block.</span>
 
 <span class="sd">    &quot;&quot;&quot;</span>
 
 <div class="viewcode-block" id="Block.__init__"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.layers.Block.html#pysegcnn.core.layers.Block.__init__">[docs]</a>    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;Initialize.</span>
+
+<span class="sd">        Parameters</span>
+<span class="sd">        ----------</span>
+<span class="sd">        in_channels : `int`</span>
+<span class="sd">            Number of input channels.</span>
+<span class="sd">        out_channels : `int`</span>
+<span class="sd">            Number of output channels.</span>
+<span class="sd">        **kwargs: `dict` [`str`]</span>
+<span class="sd">             Additional arguments passed to</span>
+<span class="sd">             :py:class:`pysegcnn.core.layers.Conv2dSame`.</span>
+
+<span class="sd">        Raises</span>
+<span class="sd">        ------</span>
+<span class="sd">        TypeError</span>
+<span class="sd">            Raised if :py:meth:`~pysegcnn.core.layers.Block.layers` method does</span>
+<span class="sd">            not return an instance of :py:class:`torch.nn.Sequential`.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
         <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
 
         <span class="c1"># number of input and output channels</span>
@@ -307,13 +319,13 @@
 <span class="sd">        Raises</span>
 <span class="sd">        ------</span>
 <span class="sd">        NotImplementedError</span>
-<span class="sd">            Raised if `pysegcnn.core.layers.Block` is not inherited.</span>
+<span class="sd">            Raised if :py:class:`pysegcnn.core.layers.Block` is not inherited.</span>
 
 <span class="sd">        Returns</span>
 <span class="sd">        -------</span>
-<span class="sd">        layers : `torch.nn.Sequential` [`torch.nn.Module`]</span>
-<span class="sd">            Return an instance of `torch.nn.Sequential` containing a sequence</span>
-<span class="sd">            of layer (`torch.nn.Module` ) instances.</span>
+<span class="sd">        layers : :py:class:`torch.nn.Sequential` [:py:class:`torch.nn.Module`]</span>
+<span class="sd">            Return an instance of :py:class:`torch.nn.Sequential` containing a</span>
+<span class="sd">            sequence of layer (:py:class:`torch.nn.Module` ) instances.</span>
 
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s1">&#39;Return an instance of </span><span class="si">{}</span><span class="s1">.&#39;</span>
@@ -325,33 +337,14 @@
 <span class="sd">        Raises</span>
 <span class="sd">        ------</span>
 <span class="sd">        NotImplementedError</span>
-<span class="sd">            Raised if `pysegcnn.core.layers.Block` is not inherited.</span>
-
-<span class="sd">        Returns</span>
-<span class="sd">        -------</span>
-<span class="sd">        None.</span>
+<span class="sd">            Raised if :py:class:`pysegcnn.core.layers.Block` is not inherited.</span>
 
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s1">&#39;Implement the forward pass.&#39;</span><span class="p">)</span></div>
 
 
 <div class="viewcode-block" id="EncoderBlock"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.layers.EncoderBlock.html#pysegcnn.core.layers.EncoderBlock">[docs]</a><span class="k">class</span> <span class="nc">EncoderBlock</span><span class="p">(</span><span class="n">Block</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Block of a convolutional encoder.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    in_channels : `int`</span>
-<span class="sd">        Number of input channels.</span>
-<span class="sd">    out_channels : `int`</span>
-<span class="sd">        Number of output channels.</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">         Additional arguments passed to `pysegcnn.core.layers.Conv2dSame`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="sd">&quot;&quot;&quot;Block of a convolutional encoder.&quot;&quot;&quot;</span>
 
 <div class="viewcode-block" id="EncoderBlock.__init__"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.layers.EncoderBlock.html#pysegcnn.core.layers.EncoderBlock.__init__">[docs]</a>    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
         <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
@@ -361,21 +354,21 @@
 
 <span class="sd">        Parameters</span>
 <span class="sd">        ----------</span>
-<span class="sd">        x : `torch.Tensor`</span>
+<span class="sd">        x : :py:class:`torch.Tensor`</span>
 <span class="sd">            Input tensor, e.g. output of the previous block/layer.</span>
 
 <span class="sd">        Returns</span>
 <span class="sd">        -------</span>
-<span class="sd">        y : `torch.Tensor`, shape=(batch, channel, height, width)</span>
+<span class="sd">        y : :py:class:`torch.Tensor`, shape=(b, c, h, w)</span>
 <span class="sd">            Output of the encoder block.</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
+<span class="sd">        x : :py:class:`torch.Tensor`, shape=(b, c, h, w)</span>
 <span class="sd">            Intermediate output before applying downsampling. Useful to</span>
 <span class="sd">            implement skip connections.</span>
-<span class="sd">        indices : `torch.Tensor` or `None`</span>
+<span class="sd">        indices : :py:class:`torch.Tensor` or `None`</span>
 <span class="sd">            Optional indices of the downsampling method, e.g. indices of the</span>
-<span class="sd">            maxima when using `torch.nn.functional.max_pool2d`. Useful for</span>
-<span class="sd">            upsampling later. If no indices are required to upsample, simply</span>
-<span class="sd">            return ``indices`` = `None`.</span>
+<span class="sd">            maxima when using :py:func:`torch.nn.functional.max_pool2d`. Useful</span>
+<span class="sd">            for upsampling later. If no indices are required to upsample,</span>
+<span class="sd">            simply return ``indices=None``.</span>
 
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="c1"># the forward pass of the layers of the block</span>
@@ -389,57 +382,43 @@
     <span class="k">def</span> <span class="nf">downsample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
         <span class="sd">&quot;&quot;&quot;Define the downsampling method.</span>
 
-<span class="sd">        The `~pysegcnn.core.layers.EncoderBlock.downsample` method should</span>
-<span class="sd">        implement the spatial pooling operation.</span>
+<span class="sd">        The :py:meth:`~pysegcnn.core.layers.EncoderBlock.downsample` method</span>
+<span class="sd">        should implement the spatial pooling operation.</span>
 
 <span class="sd">        Use one of the following functions to downsample:</span>
-<span class="sd">            - `torch.nn.functional.max_pool2d`</span>
-<span class="sd">            - `torch.nn.functional.interpolate`</span>
+<span class="sd">            - :py:func:`torch.nn.functional.max_pool2d`</span>
+<span class="sd">            - :py:func:`torch.nn.functional.interpolate`</span>
 
-<span class="sd">        See `pysegcnn.core.layers.ConvBnReluMaxPool` for an example</span>
+<span class="sd">        See :py:class:`pysegcnn.core.layers.ConvBnReluMaxPool` for an example</span>
 <span class="sd">        implementation.</span>
 
 <span class="sd">        Parameters</span>
 <span class="sd">        ----------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
+<span class="sd">        x : :py:class:`torch.Tensor`, shape=(b, c, h, w)</span>
 <span class="sd">            Input tensor, e.g. output of a convolutional block.</span>
 
 <span class="sd">        Raises</span>
 <span class="sd">        ------</span>
 <span class="sd">        NotImplementedError</span>
-<span class="sd">            Raised if `pysegcnn.core.layers.EncoderBlock` is not inherited.</span>
+<span class="sd">            Raised if :py:class:`pysegcnn.core.layers.EncoderBlock` is not</span>
+<span class="sd">            inherited.</span>
 
 <span class="sd">        Returns</span>
 <span class="sd">        -------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
+<span class="sd">        x : :py:class:`torch.Tensor`, shape=(b, c, h, w)</span>
 <span class="sd">            The spatially downsampled tensor.</span>
-<span class="sd">        indices : `torch.Tensor` or `None`</span>
+<span class="sd">        indices : :py:class:`torch.Tensor` or `None`</span>
 <span class="sd">            Optional indices of the downsampling method, e.g. indices of the</span>
-<span class="sd">            maxima when using `torch.nn.functional.max_pool2d`. Useful for</span>
-<span class="sd">            upsampling later. If no indices are required to upsample, simply</span>
-<span class="sd">            return ``indices`` = `None`.</span>
+<span class="sd">            maxima when using :py:func:`torch.nn.functional.max_pool2d`. Useful</span>
+<span class="sd">            for upsampling later. If no indices are required to upsample,</span>
+<span class="sd">            simply return ``indices=None``.</span>
 
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s1">&#39;Implement the downsampling function.&#39;</span><span class="p">)</span></div>
 
 
 <div class="viewcode-block" id="DecoderBlock"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.layers.DecoderBlock.html#pysegcnn.core.layers.DecoderBlock">[docs]</a><span class="k">class</span> <span class="nc">DecoderBlock</span><span class="p">(</span><span class="n">Block</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Block of a convolutional decoder.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    in_channels : `int`</span>
-<span class="sd">        Number of input channels.</span>
-<span class="sd">    out_channels : `int`</span>
-<span class="sd">        Number of output channels.</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">         Additional arguments passed to `pysegcnn.core.layers.Conv2dSame`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="sd">&quot;&quot;&quot;Block of a convolutional decoder.&quot;&quot;&quot;</span>
 
 <div class="viewcode-block" id="DecoderBlock.__init__"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.layers.DecoderBlock.html#pysegcnn.core.layers.DecoderBlock.__init__">[docs]</a>    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
         <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
@@ -449,21 +428,21 @@
 
 <span class="sd">        Parameters</span>
 <span class="sd">        ----------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
+<span class="sd">        x : :py:class:`torch.Tensor`, shape=(b, c, h, w)</span>
 <span class="sd">            Input tensor.</span>
-<span class="sd">        feature : `torch.Tensor`, shape=(batch, channel, height, width)</span>
-<span class="sd">            Intermediate output of a layer in the encoder.</span>
-<span class="sd">            If ``skip`` = True, ``feature`` is concatenated (along the channel</span>
-<span class="sd">            axis) to the output of the respective upsampling layer in the</span>
-<span class="sd">            decoder (skip connection).</span>
-<span class="sd">        indices : `torch.Tensor` or `None`</span>
+<span class="sd">        feature : :py:class:`torch.Tensor`, shape=(b, c, h, w)</span>
+<span class="sd">            Intermediate output of a layer in the encoder. If ``skip=True``,</span>
+<span class="sd">            ``feature`` is concatenated (along the channel axis) to the output</span>
+<span class="sd">            of the respective upsampling layer in the decoder (skip connection)</span>
+<span class="sd">            .</span>
+<span class="sd">        indices : :py:class:`torch.Tensor` or `None`</span>
 <span class="sd">            Indices of the encoder downsampling method.</span>
 <span class="sd">        skip : `bool`</span>
 <span class="sd">            Whether to apply the skip connection.</span>
 
 <span class="sd">        Returns</span>
 <span class="sd">        -------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
+<span class="sd">        x : :py:class:`torch.Tensor`, shape=(b, c, h, w)</span>
 <span class="sd">            Output of the decoder block.</span>
 
 <span class="sd">        &quot;&quot;&quot;</span>
@@ -484,35 +463,36 @@
     <span class="k">def</span> <span class="nf">upsample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">feature</span><span class="p">,</span> <span class="n">indices</span><span class="p">):</span>
         <span class="sd">&quot;&quot;&quot;Define the upsampling method.</span>
 
-<span class="sd">        The `~pysegcnn.core.layers.DecoderBlock.upsample` method should</span>
-<span class="sd">        implement the spatial upsampling operation.</span>
+<span class="sd">        The :py:meth:`~pysegcnn.core.layers.DecoderBlock.upsample` method</span>
+<span class="sd">        should implement the spatial upsampling operation.</span>
 
 <span class="sd">        Use one of the following functions to upsample:</span>
-<span class="sd">            - `torch.nn.functional.max_unpool2d`</span>
-<span class="sd">            - `torch.nn.functional.interpolate`</span>
+<span class="sd">            - :py:func:`torch.nn.functional.max_unpool2d`</span>
+<span class="sd">            - :py:func:`torch.nn.functional.interpolate`</span>
 
-<span class="sd">        See `pysegcnn.core.layers.ConvBnReluMaxUnpool` or</span>
-<span class="sd">        `pysegcnn.core.layers.ConvBnReluUpsample` for an example</span>
+<span class="sd">        See :py:class:`pysegcnn.core.layers.ConvBnReluMaxUnpool` or</span>
+<span class="sd">        :py:class:`pysegcnn.core.layers.ConvBnReluUpsample` for an example</span>
 <span class="sd">        implementation.</span>
 
 <span class="sd">        Parameters</span>
 <span class="sd">        ----------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
+<span class="sd">        x : :py:class:`torch.Tensor`, shape=(b, c, h, w)</span>
 <span class="sd">            Input tensor, e.g. output of a convolutional block.</span>
-<span class="sd">        feature : `torch.Tensor`, shape=(batch, channel, height, width)</span>
+<span class="sd">        feature : :py:class:`torch.Tensor`, shape=(b, c, h, w)</span>
 <span class="sd">            Intermediate output of a layer in the encoder. Used to implement</span>
 <span class="sd">            skip connections.</span>
-<span class="sd">        indices : `torch.Tensor` or `None`</span>
+<span class="sd">        indices : :py:class:`torch.Tensor` or `None`</span>
 <span class="sd">            Indices of the encoder downsampling method.</span>
 
 <span class="sd">        Raises</span>
 <span class="sd">        ------</span>
 <span class="sd">        NotImplementedError</span>
-<span class="sd">            Raised if `pysegcnn.core.layers.DecoderBlock` is not inherited.</span>
+<span class="sd">            Raised if :py:class:`pysegcnn.core.layers.DecoderBlock` is not</span>
+<span class="sd">            inherited.</span>
 
 <span class="sd">        Returns</span>
 <span class="sd">        -------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
+<span class="sd">        x : :py:class:`torch.Tensor`, shape=(b, c, h, w)</span>
 <span class="sd">            The spatially upsampled tensor.</span>
 
 <span class="sd">        &quot;&quot;&quot;</span>
@@ -523,31 +503,50 @@
     <span class="sd">&quot;&quot;&quot;Generic convolutional encoder.</span>
 
 <span class="sd">    When instanciating an encoder-decoder architechure, ``filters`` should be</span>
-<span class="sd">    the same for `pysegcnn.core.layers.Encoder` and</span>
-<span class="sd">    `pysegcnn.core.layers.Decoder`.</span>
+<span class="sd">    the same for :py:class:`pysegcnn.core.layers.Encoder` and</span>
+<span class="sd">    :py:class:`pysegcnn.core.layers.Decoder`.</span>
 
-<span class="sd">    See `pysegcnn.core.models.UNet` for an example implementation.</span>
+<span class="sd">    See :py:class:`pysegcnn.core.models.UNet` for an example implementation.</span>
 
-<span class="sd">    Parameters</span>
+<span class="sd">    Attributes</span>
 <span class="sd">    ----------</span>
-<span class="sd">    filters : `list` [`int`]</span>
-<span class="sd">        List of input channels to each convolutional block. The length of</span>
-<span class="sd">        ``filters`` determines the depth of the encoder. The first element of</span>
-<span class="sd">        ``filters`` has to be the number of channels of the input images.</span>
-<span class="sd">    block : `pysegcnn.core.layers.EncoderBlock`</span>
+<span class="sd">    features : :py:class:`numpy.ndarray`</span>
+<span class="sd">        Input channels to each convolutional block, i.e. ``filters``.</span>
+<span class="sd">    block : :py:class:`pysegcnn.core.layers.EncoderBlock`</span>
 <span class="sd">        The convolutional block defining a layer in the encoder.</span>
-<span class="sd">        A subclass of `pysegcnn.core.layers.EncoderBlock`, e.g.</span>
-<span class="sd">        `pysegcnn.core.layers.ConvBnReluMaxPool`.</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">        Additional arguments passed to `pysegcnn.core.layers.Conv2dSame`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
+<span class="sd">        A subclass of :py:class:`pysegcnn.core.layers.EncoderBlock`, e.g.</span>
+<span class="sd">        :py:class:`pysegcnn.core.layers.ConvBnReluMaxPool`.</span>
+<span class="sd">    layers : :py:class:`torch.nn.ModuleList`</span>
+<span class="sd">        List of blocks in the encoder.</span>
+<span class="sd">    cache : `dict`</span>
+<span class="sd">        Intermediate encoder outputs. Dictionary with keys:</span>
+<span class="sd">            ``&#39;feature&#39;``</span>
+<span class="sd">                The intermediate encoder outputs (:py:class:`torch.Tensor`).</span>
+<span class="sd">            ``&#39;indices&#39;``</span>
+<span class="sd">                The indices of the max pooling layer, if required</span>
+<span class="sd">                (:py:class:`torch.Tensor`).</span>
 
 <span class="sd">    &quot;&quot;&quot;</span>
 
 <div class="viewcode-block" id="Encoder.__init__"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.layers.Encoder.html#pysegcnn.core.layers.Encoder.__init__">[docs]</a>    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filters</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;Initialize.</span>
+
+<span class="sd">        Parameters</span>
+<span class="sd">        ----------</span>
+<span class="sd">        filters : `list` [`int`]</span>
+<span class="sd">            List of input channels to each convolutional block. The length of</span>
+<span class="sd">            ``filters`` determines the depth of the encoder. The first element</span>
+<span class="sd">            of ``filters`` has to be the number of channels of the input</span>
+<span class="sd">            images.</span>
+<span class="sd">        block : :py:class:`pysegcnn.core.layers.EncoderBlock`</span>
+<span class="sd">            The convolutional block defining a layer in the encoder.</span>
+<span class="sd">            A subclass of :py:class:`pysegcnn.core.layers.EncoderBlock`, e.g.</span>
+<span class="sd">            :py:class:`pysegcnn.core.layers.ConvBnReluMaxPool`.</span>
+<span class="sd">        **kwargs: `dict` [`str`]</span>
+<span class="sd">            Additional arguments passed to</span>
+<span class="sd">            :py:class:`pysegcnn.core.layers.Conv2dSame`.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
         <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
 
         <span class="c1"># the number of filters for each block: the first element of filters</span>
@@ -573,22 +572,22 @@
         <span class="sd">&quot;&quot;&quot;Forward pass of the encoder.</span>
 
 <span class="sd">        Stores intermediate outputs in a dictionary. The keys of the dictionary</span>
-<span class="sd">        are the number of the network layers and the values are dictionaries</span>
+<span class="sd">        are the numbers of the network layers and the values are dictionaries</span>
 <span class="sd">        with the following (key, value) pairs:</span>
-<span class="sd">            ``&quot;feature&quot;``</span>
-<span class="sd">                The intermediate encoder outputs (`torch.Tensor`).</span>
-<span class="sd">            ``&quot;indices&quot;``</span>
+<span class="sd">            ``&#39;feature&#39;``</span>
+<span class="sd">                The intermediate encoder outputs (:py:class:`torch.Tensor`).</span>
+<span class="sd">            ``&#39;indices&#39;``</span>
 <span class="sd">                The indices of the max pooling layer, if required</span>
-<span class="sd">                (`torch.Tensor`).</span>
+<span class="sd">                (:py:class:`torch.Tensor`).</span>
 
 <span class="sd">        Parameters</span>
 <span class="sd">        ----------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
+<span class="sd">        x : :py:class:`torch.Tensor`, shape=(b, c, h, w)</span>
 <span class="sd">            Input image.</span>
 
 <span class="sd">        Returns</span>
 <span class="sd">        -------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
+<span class="sd">        x : :py:class:`torch.Tensor`, shape=(b, c, h, w)</span>
 <span class="sd">            Output of the encoder.</span>
 
 <span class="sd">        &quot;&quot;&quot;</span>
@@ -609,33 +608,47 @@
     <span class="sd">&quot;&quot;&quot;Generic convolutional decoder.</span>
 
 <span class="sd">    When instanciating an encoder-decoder architechure, ``filters`` should be</span>
-<span class="sd">    the same for `pysegcnn.core.layers.Encoder` and</span>
-<span class="sd">    `pysegcnn.core.layers.Decoder`.</span>
+<span class="sd">    the same for :py:class:`pysegcnn.core.layers.Encoder` and</span>
+<span class="sd">    :py:class:`pysegcnn.core.layers.Decoder`.</span>
 
-<span class="sd">    See `pysegcnn.core.models.UNet` for an example implementation.</span>
+<span class="sd">    See :py:class:`pysegcnn.core.models.UNet` for an example implementation.</span>
 
-<span class="sd">    Parameters</span>
+<span class="sd">    Attributes</span>
 <span class="sd">    ----------</span>
-<span class="sd">    filters : `list` [`int`]</span>
-<span class="sd">        List of input channels to each convolutional block. The length of</span>
-<span class="sd">        ``filters`` determines the depth of the decoder. The first element of</span>
-<span class="sd">        ``filters`` has to be the number of channels of the input images.</span>
-<span class="sd">    block : `pysegcnn.core.layers.DecoderBlock`</span>
+<span class="sd">    features : :py:class:`numpy.ndarray`</span>
+<span class="sd">        Input channels to each convolutional block, i.e. ``filters``.</span>
+<span class="sd">    block : :py:class:`pysegcnn.core.layers.EncoderBlock`</span>
 <span class="sd">        The convolutional block defining a layer in the decoder.</span>
-<span class="sd">        A subclass of `pysegcnn.core.layers.DecoderBlock`, e.g.</span>
-<span class="sd">        `pysegcnn.core.layers.ConvBnReluMaxUnpool`.</span>
+<span class="sd">        A subclass of :py:class:`pysegcnn.core.layers.EncoderBlock`, e.g.</span>
+<span class="sd">        :py:class:`pysegcnn.core.layers.ConvBnReluMaxPool`.</span>
 <span class="sd">    skip : `bool`</span>
 <span class="sd">        Whether to apply skip connections from the encoder to the decoder.</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">        Additional arguments passed to `pysegcnn.core.layers.Conv2dSame`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
+<span class="sd">    layers : :py:class:`torch.nn.ModuleList`</span>
+<span class="sd">        List of blocks in the decoder.</span>
 
 <span class="sd">    &quot;&quot;&quot;</span>
 
 <div class="viewcode-block" id="Decoder.__init__"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.layers.Decoder.html#pysegcnn.core.layers.Decoder.__init__">[docs]</a>    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filters</span><span class="p">,</span> <span class="n">block</span><span class="p">,</span> <span class="n">skip</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;Initialize.</span>
+
+<span class="sd">        Parameters</span>
+<span class="sd">        ----------</span>
+<span class="sd">        filters : `list` [`int`]</span>
+<span class="sd">            List of input channels to each convolutional block. The length of</span>
+<span class="sd">            ``filters`` determines the depth of the decoder. The first element</span>
+<span class="sd">            of ``filters`` has to be the number of channels of the input</span>
+<span class="sd">            images.</span>
+<span class="sd">        block : :py:class:`pysegcnn.core.layers.DecoderBlock`</span>
+<span class="sd">            The convolutional block defining a layer in the decoder.</span>
+<span class="sd">            A subclass of :py:class:`pysegcnn.core.layers.DecoderBlock`, e.g.</span>
+<span class="sd">            :py:class:`pysegcnn.core.layers.ConvBnReluMaxUnpool`.</span>
+<span class="sd">        skip : `bool`, optional</span>
+<span class="sd">            Whether to apply skip connections from the encoder to the decoder.</span>
+<span class="sd">        **kwargs: `dict` [`str`]</span>
+<span class="sd">            Additional arguments passed to</span>
+<span class="sd">            :py:class:`pysegcnn.core.layers.Conv2dSame`.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
         <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
 
         <span class="c1"># the block of operations defining a layer in the decoder</span>
@@ -670,20 +683,22 @@
 
 <span class="sd">        Parameters</span>
 <span class="sd">        ----------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
+<span class="sd">        x : :py:class:`torch.Tensor`, shape=(b, c, h, w)</span>
 <span class="sd">            Output of the encoder.</span>
 <span class="sd">        enc_cache : `dict` [`dict`]</span>
 <span class="sd">            Cache dictionary. The keys of the dictionary are the number of the</span>
 <span class="sd">            network layers and the values are dictionaries with the following</span>
 <span class="sd">            (key, value) pairs:</span>
-<span class="sd">                ``&quot;feature&quot;``</span>
-<span class="sd">                    The intermediate encoder outputs (`torch.Tensor`).</span>
-<span class="sd">                ``&quot;indices&quot;``</span>
-<span class="sd">                    The indices of the max pooling layer (`torch.Tensor`).</span>
+<span class="sd">                ``&#39;feature&#39;``</span>
+<span class="sd">                    The intermediate encoder outputs</span>
+<span class="sd">                    (:py:class:`torch.Tensor`).</span>
+<span class="sd">                ``&#39;indices&#39;``</span>
+<span class="sd">                    The indices of the max pooling layer</span>
+<span class="sd">                    (:py:class:`torch.Tensor`).</span>
 
 <span class="sd">        Returns</span>
 <span class="sd">        -------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
+<span class="sd">        x : :py:class:`torch.Tensor`, shape=(b, c, h, w)</span>
 <span class="sd">            Output of the decoder.</span>
 
 <span class="sd">        &quot;&quot;&quot;</span>
@@ -702,23 +717,7 @@
 
 
 <div class="viewcode-block" id="ConvBnReluMaxPool"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.layers.ConvBnReluMaxPool.html#pysegcnn.core.layers.ConvBnReluMaxPool">[docs]</a><span class="k">class</span> <span class="nc">ConvBnReluMaxPool</span><span class="p">(</span><span class="n">EncoderBlock</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Block of convolution, batchnorm, relu and 2x2 max pool.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    in_channels : `int`</span>
-<span class="sd">        Number of input channels.</span>
-<span class="sd">    out_channels : `int`</span>
-<span class="sd">        Number of output channels.</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">        Additional keyword arguments passed to</span>
-<span class="sd">        `pysegcnn.core.layers.Conv2dSame`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="sd">&quot;&quot;&quot;Block of convolution, batchnorm, relu and 2x2 max pool.&quot;&quot;&quot;</span>
 
 <div class="viewcode-block" id="ConvBnReluMaxPool.__init__"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.layers.ConvBnReluMaxPool.html#pysegcnn.core.layers.ConvBnReluMaxPool.__init__">[docs]</a>    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
         <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
@@ -728,29 +727,30 @@
 
 <span class="sd">        Returns</span>
 <span class="sd">        -------</span>
-<span class="sd">        layers : `torch.nn.Sequential` [`torch.nn.Module`]</span>
-<span class="sd">            An instance of `torch.nn.Sequential` containing the sequence</span>
-<span class="sd">            of convolution, batchnorm and relu layer (`torch.nn.Module`)</span>
-<span class="sd">            instances.</span>
+<span class="sd">        layers : :py:class:`torch.nn.Sequential` [:py:class:`torch.nn.Module`]</span>
+<span class="sd">            An instance of :py:class:`torch.nn.Sequential` containing the</span>
+<span class="sd">            sequence of convolution, batchnorm and relu layer</span>
+<span class="sd">            (:py:class:`torch.nn.Module`) instances.</span>
 
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">return</span> <span class="n">conv_bn_relu</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">in_channels</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">)</span>
 
     <span class="k">def</span> <span class="nf">downsample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
-        <span class="sd">&quot;&quot;&quot;2x2 max pooling layer, `torch.nn.functional.max_pool2d`.</span>
+        <span class="sd">&quot;&quot;&quot;2x2 max pooling layer.</span>
 
 <span class="sd">        Parameters</span>
 <span class="sd">        ----------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
+<span class="sd">        x : :py:class:`torch.Tensor`, shape=(b, c, h, w)</span>
 <span class="sd">            Input tensor.</span>
 
 <span class="sd">        Returns</span>
 <span class="sd">        -------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height // 2, width // 2)</span>
+<span class="sd">        x : :py:class:`torch.Tensor`, shape=(b, c, h // 2, w // 2)</span>
 <span class="sd">            The 2x2 max pooled tensor.</span>
-<span class="sd">        indices : `torch.Tensor` or `None`</span>
+<span class="sd">        indices : :py:class:`torch.Tensor` or `None`</span>
 <span class="sd">            The indices of the maxima. Useful for upsampling with</span>
-<span class="sd">            `torch.nn.functional.max_unpool2d`.</span>
+<span class="sd">            :py:func:`torch.nn.functional.max_unpool2d`.</span>
+
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="n">x</span><span class="p">,</span> <span class="n">indices</span> <span class="o">=</span> <span class="n">F</span><span class="o">.</span><span class="n">max_pool2d</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">return_indices</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
         <span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">indices</span>
@@ -768,23 +768,7 @@
 
 
 <div class="viewcode-block" id="ConvBnReluMaxUnpool"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.layers.ConvBnReluMaxUnpool.html#pysegcnn.core.layers.ConvBnReluMaxUnpool">[docs]</a><span class="k">class</span> <span class="nc">ConvBnReluMaxUnpool</span><span class="p">(</span><span class="n">DecoderBlock</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Block of convolution, batchnorm, relu and 2x2 max unpool.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    in_channels : `int`</span>
-<span class="sd">        Number of input channels.</span>
-<span class="sd">    out_channels : `int`</span>
-<span class="sd">        Number of output channels</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">        Additional keyword arguments passed to</span>
-<span class="sd">        `pysegcnn.core.layers.Conv2dSame`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="sd">&quot;&quot;&quot;Block of convolution, batchnorm, relu and 2x2 max unpool.&quot;&quot;&quot;</span>
 
 <div class="viewcode-block" id="ConvBnReluMaxUnpool.__init__"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.layers.ConvBnReluMaxUnpool.html#pysegcnn.core.layers.ConvBnReluMaxUnpool.__init__">[docs]</a>    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
         <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
@@ -794,10 +778,10 @@
 
 <span class="sd">        Returns</span>
 <span class="sd">        -------</span>
-<span class="sd">        layers : `torch.nn.Sequential` [`torch.nn.Module`]</span>
-<span class="sd">            An instance of `torch.nn.Sequential` containing the sequence</span>
-<span class="sd">            of convolution, batchnorm and relu layer (`torch.nn.Module`)</span>
-<span class="sd">            instances.</span>
+<span class="sd">        layers : :py:class:`torch.nn.Sequential` [:py:class:`torch.nn.Module`]</span>
+<span class="sd">            An instance of :py:class:`torch.nn.Sequential` containing the</span>
+<span class="sd">            sequence of convolution, batchnorm and relu layer</span>
+<span class="sd">            (:py:class:`torch.nn.Module`) instances.</span>
 
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">return</span> <span class="n">conv_bn_relu</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">in_channels</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">)</span>
@@ -807,18 +791,18 @@
 
 <span class="sd">        Parameters</span>
 <span class="sd">        ----------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
+<span class="sd">        x : :py:class:`torch.Tensor`, shape=(b, c, h, w)</span>
 <span class="sd">            Input tensor.</span>
-<span class="sd">        feature : `torch.Tensor`, shape=(batch, channel, height, width)</span>
+<span class="sd">        feature : :py:class:`torch.Tensor`, shape=(b, c, h, w)</span>
 <span class="sd">            Intermediate output of a layer in the encoder. Used to determine</span>
 <span class="sd">            the output shape of the upsampling operation.</span>
-<span class="sd">        indices : `torch.Tensor`</span>
+<span class="sd">        indices : :py:class:`torch.Tensor`</span>
 <span class="sd">            The indices of the maxima of the max pooling operation</span>
-<span class="sd">            (as returned by `torch.nn.functional.max_pool2d`).</span>
+<span class="sd">            (as returned by :py:func:`torch.nn.functional.max_pool2d`).</span>
 
 <span class="sd">        Returns</span>
 <span class="sd">        -------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height * 2, width * 2)</span>
+<span class="sd">        x : :py:class:`torch.Tensor`, shape=(b, c, h * 2, w * 2)</span>
 <span class="sd">            The 2x2 max unpooled tensor.</span>
 
 <span class="sd">        &quot;&quot;&quot;</span>
@@ -838,22 +822,7 @@
 
 
 <div class="viewcode-block" id="ConvBnReluUpsample"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.layers.ConvBnReluUpsample.html#pysegcnn.core.layers.ConvBnReluUpsample">[docs]</a><span class="k">class</span> <span class="nc">ConvBnReluUpsample</span><span class="p">(</span><span class="n">DecoderBlock</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;Block of convolution, batchnorm, relu and nearest neighbor upsampling.</span>
-
-<span class="sd">    Parameters</span>
-<span class="sd">    ----------</span>
-<span class="sd">    in_channels : `int`</span>
-<span class="sd">        Number of input channels.</span>
-<span class="sd">    out_channels : `int`</span>
-<span class="sd">        Number of output channels</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">        Additional arguments passed to `pysegcnn.core.layers.Conv2dSame`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="sd">&quot;&quot;&quot;Block of convolution, batchnorm, relu and nearest neighbor upsample.&quot;&quot;&quot;</span>
 
 <div class="viewcode-block" id="ConvBnReluUpsample.__init__"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.layers.ConvBnReluUpsample.html#pysegcnn.core.layers.ConvBnReluUpsample.__init__">[docs]</a>    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
         <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">in_channels</span><span class="p">,</span> <span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
@@ -863,10 +832,10 @@
 
 <span class="sd">        Returns</span>
 <span class="sd">        -------</span>
-<span class="sd">        layers : `torch.nn.Sequential` [`torch.nn.Module`]</span>
-<span class="sd">            An instance of `torch.nn.Sequential` containing the sequence</span>
-<span class="sd">            of convolution, batchnorm and relu layer (`torch.nn.Module`)</span>
-<span class="sd">            instances.</span>
+<span class="sd">        layers : :py:class:`torch.nn.Sequential` [:py:class:`torch.nn.Module`]</span>
+<span class="sd">            An instance of :py:class:`torch.nn.Sequential` containing the</span>
+<span class="sd">            sequence of convolution, batchnorm and relu layer</span>
+<span class="sd">            (:py:class:`torch.nn.Module`) instances.</span>
 
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="k">return</span> <span class="n">conv_bn_relu</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">in_channels</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">out_channels</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">)</span>
@@ -876,19 +845,19 @@
 
 <span class="sd">        Parameters</span>
 <span class="sd">        ----------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
+<span class="sd">        x : :py:class:`torch.Tensor`, shape=(b, c, h, w)</span>
 <span class="sd">            Input tensor.</span>
-<span class="sd">        feature : `torch.Tensor`, shape=(batch, channel, height, width)</span>
+<span class="sd">        feature : :py:class:`torch.Tensor`, shape=(b, c, h, w)</span>
 <span class="sd">            Intermediate output of a layer in the encoder. Used to determine</span>
 <span class="sd">            the output shape of the upsampling operation.</span>
 <span class="sd">        indices : `None`, optional</span>
 <span class="sd">            The indices of the maxima of the max pooling operation</span>
-<span class="sd">            (as returned by `torch.nn.functional.max_pool2d`). Not required by</span>
-<span class="sd">            this upsampling method.</span>
+<span class="sd">            (as returned by :py:func:`torch.nn.functional.max_pool2d`).</span>
+<span class="sd">            Not required by this upsampling method.</span>
 
 <span class="sd">        Returns</span>
 <span class="sd">        -------</span>
-<span class="sd">        x : `torch.Tensor`, shape=(batch, channel, height, width)</span>
+<span class="sd">        x : :py:class:`torch.Tensor`, shape=(b, c, h, w)</span>
 <span class="sd">            The 2x2 upsampled tensor.</span>
 
 <span class="sd">        &quot;&quot;&quot;</span>
diff --git a/docs/_build/html/_modules/pysegcnn/core/models.html b/docs/_build/html/_modules/pysegcnn/core/models.html
index ed55a39..4e951b1 100644
--- a/docs/_build/html/_modules/pysegcnn/core/models.html
+++ b/docs/_build/html/_modules/pysegcnn/core/models.html
@@ -187,15 +187,17 @@
     <span class="sd">&quot;&quot;&quot;Generic Network class.</span>
 
 <span class="sd">    The base class for each model. If you want to implement a new model,</span>
-<span class="sd">    inherit the ``~pysegcnn.core.models.Network`` class.</span>
+<span class="sd">    inherit the :py:class:`pysegcnn.core.models.Network` class.</span>
 
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
+<span class="sd">    Attributes</span>
+<span class="sd">    ----------</span>
+<span class="sd">    state_file : `str` or `None` or :py:class:`pathlib.Path`</span>
+<span class="sd">        The model state file, where the model parameters are saved.</span>
 
 <span class="sd">    &quot;&quot;&quot;</span>
 
 <div class="viewcode-block" id="Network.__init__"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.models.Network.html#pysegcnn.core.models.Network.__init__">[docs]</a>    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;Initialize.&quot;&quot;&quot;</span>
         <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
 
         <span class="c1"># initialize state file</span>
@@ -239,9 +241,9 @@
 
 <span class="sd">        Parameters</span>
 <span class="sd">        ----------</span>
-<span class="sd">        state_file : `str` or `pathlib.Path`</span>
+<span class="sd">        state_file : `str` or :py:class:`pathlib.Path`</span>
 <span class="sd">            Path to save the model state.</span>
-<span class="sd">        optimizer : `torch.optim.Optimizer`</span>
+<span class="sd">        optimizer : :py:class:`torch.optim.Optimizer`</span>
 <span class="sd">            The optimizer used to train the model.</span>
 <span class="sd">        bands : `list` [`str`] or `None`, optional</span>
 <span class="sd">            List of bands the model is trained with. The default is None.</span>
@@ -252,7 +254,7 @@
 <span class="sd">        Returns</span>
 <span class="sd">        -------</span>
 <span class="sd">        model_state : `dict`</span>
-<span class="sd">            A dictionary containing the model and optimizer state</span>
+<span class="sd">            A dictionary containing the model and optimizer state.</span>
 
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="c1"># check if the output path exists and if not, create it</span>
@@ -306,7 +308,7 @@
 
 <span class="sd">        Parameters</span>
 <span class="sd">        ----------</span>
-<span class="sd">        state_file : `str` or `pathlib.Path`</span>
+<span class="sd">        state_file : `str` or :py:class:`pathlib.Path`</span>
 <span class="sd">           The model state file. Model state files are stored in</span>
 <span class="sd">           pysegcnn/main/_models.</span>
 
@@ -317,13 +319,13 @@
 
 <span class="sd">        Returns</span>
 <span class="sd">        -------</span>
-<span class="sd">        model : `pysegcnn.core.models.Network`</span>
+<span class="sd">        model : :py:class:`pysegcnn.core.models.Network`</span>
 <span class="sd">            The pretrained model.</span>
-<span class="sd">        optimizer : `torch.optim.Optimizer`</span>
+<span class="sd">        optimizer : :py:class:`torch.optim.Optimizer`</span>
 <span class="sd">           The optimizer used to train the model.</span>
-<span class="sd">        model_state : &#39;`dict`</span>
+<span class="sd">        model_state : `dict`</span>
 <span class="sd">            A dictionary containing the model and optimizer state, as</span>
-<span class="sd">            constructed by `~pysegcnn.core.Network.save`.</span>
+<span class="sd">            constructed by :py:meth:`~pysegcnn.core.Network.save`.</span>
 
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="c1"># load the pretrained model</span>
@@ -366,7 +368,7 @@
 
 <span class="sd">        Returns</span>
 <span class="sd">        -------</span>
-<span class="sd">        state_file : `pathlib.Path` or `None`</span>
+<span class="sd">        state_file : :py:class:`pathlib.Path` or `None`</span>
 <span class="sd">            The model state file.</span>
 
 <span class="sd">        &quot;&quot;&quot;</span>
@@ -374,36 +376,58 @@
 
 
 <div class="viewcode-block" id="UNet"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.models.UNet.html#pysegcnn.core.models.UNet">[docs]</a><span class="k">class</span> <span class="nc">UNet</span><span class="p">(</span><span class="n">Network</span><span class="p">):</span>
-    <span class="sd">&quot;&quot;&quot;A PyTorch implementation of `U-Net`_.</span>
+    <span class="sd">&quot;&quot;&quot;A slightly modified implementation of `U-Net`_ in PyTorch.</span>
+
+<span class="sd">    .. important::</span>
 
-<span class="sd">    Slightly modified version of U-Net:</span>
-<span class="sd">        - each convolution is followed by a batch normalization layer</span>
-<span class="sd">        - the upsampling is implemented by a 2x2 max unpooling operation</span>
+<span class="sd">        - Each convolution is followed by a batch normalization layer</span>
+<span class="sd">        - Upsampling is implemented by a 2x2 max unpooling operation</span>
 
 <span class="sd">    .. _U-Net:</span>
 <span class="sd">        https://arxiv.org/abs/1505.04597</span>
 
-<span class="sd">    Parameters</span>
+<span class="sd">    Attributes</span>
 <span class="sd">    ----------</span>
 <span class="sd">    in_channels : `int`</span>
 <span class="sd">        Number of channels of the input images.</span>
 <span class="sd">    nclasses : `int`</span>
 <span class="sd">        Number of classes.</span>
-<span class="sd">    filters : `list` [`int`]</span>
+<span class="sd">    kwargs : `dict` [`str`]</span>
+<span class="sd">        Additional keyword arguments passed to</span>
+<span class="sd">        :py:class:`pysegcnn.core.layers.Conv2dSame`.</span>
+<span class="sd">    nfilters : `list` [`int`]</span>
 <span class="sd">        List of input channels to each convolutional block.</span>
 <span class="sd">    skip : `bool`</span>
 <span class="sd">        Whether to apply skip connections from the encoder to the decoder.</span>
-<span class="sd">    **kwargs: &#39;dict&#39; [`str`]</span>
-<span class="sd">        Additional keyword arguments passed to</span>
-<span class="sd">        `pysegcnn.core.layers.Conv2dSame`.</span>
-
-<span class="sd">    Returns</span>
-<span class="sd">    -------</span>
-<span class="sd">    None.</span>
+<span class="sd">    epoch : `int`</span>
+<span class="sd">        Number of epochs the model was trained.</span>
+<span class="sd">    encoder : :py:class:`pysegcnn.core.layers.Encoder`</span>
+<span class="sd">        The convolutional encoder.</span>
+<span class="sd">    decoder : :py:class:`pysegcnn.core.layers.Decoder`</span>
+<span class="sd">        The convolutional decoder.</span>
+<span class="sd">    classifier : :py:class:`pysegcnn.core.layers.Conv2dSame`</span>
+<span class="sd">        The classification layer, a 1x1 convolution.</span>
 
 <span class="sd">    &quot;&quot;&quot;</span>
 
 <div class="viewcode-block" id="UNet.__init__"><a class="viewcode-back" href="../../../source/generated/pysegcnn.core.models.UNet.html#pysegcnn.core.models.UNet.__init__">[docs]</a>    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">in_channels</span><span class="p">,</span> <span class="n">nclasses</span><span class="p">,</span> <span class="n">filters</span><span class="p">,</span> <span class="n">skip</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;Initialize.</span>
+
+<span class="sd">        Parameters</span>
+<span class="sd">        ----------</span>
+<span class="sd">        in_channels : `int`</span>
+<span class="sd">            Number of channels of the input images.</span>
+<span class="sd">        nclasses : `int`</span>
+<span class="sd">            Number of classes.</span>
+<span class="sd">        filters : `list` [`int`]</span>
+<span class="sd">            List of input channels to each convolutional block.</span>
+<span class="sd">        skip : `bool`</span>
+<span class="sd">            Whether to apply skip connections from the encoder to the decoder.</span>
+<span class="sd">        **kwargs: `dict` [`str`]</span>
+<span class="sd">            Additional keyword arguments passed to</span>
+<span class="sd">            :py:class:`pysegcnn.core.layers.Conv2dSame`.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
         <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
 
         <span class="c1"># number of input channels</span>
diff --git a/docs/_build/html/_sources/modules.rst.txt b/docs/_build/html/_sources/modules.rst.txt
deleted file mode 100644
index 383d07e..0000000
--- a/docs/_build/html/_sources/modules.rst.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-Modules
-=======
-
-.. autosummary::
-    :toctree: modules
-
-    pysegcnn.core.cli
-    pysegcnn.core.constants
-    pysegcnn.core.dataset
-
diff --git a/docs/_build/html/_sources/modules/pysegcnn.core.cli.rst.txt b/docs/_build/html/_sources/modules/pysegcnn.core.cli.rst.txt
deleted file mode 100644
index 3a5c0e3..0000000
--- a/docs/_build/html/_sources/modules/pysegcnn.core.cli.rst.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-pysegcnn.core.cli
-=================
-
-.. automodule:: pysegcnn.core.cli
-
-   
-   
-   
-
-   
-   
-   .. rubric:: Functions
-
-   .. autosummary::
-   
-      structure_parser
-   
-   
-
-   
-   
-   
-
-   
-   
-   
-
-
-
diff --git a/docs/_build/html/_sources/modules/pysegcnn.core.constants.rst.txt b/docs/_build/html/_sources/modules/pysegcnn.core.constants.rst.txt
deleted file mode 100644
index abb68f1..0000000
--- a/docs/_build/html/_sources/modules/pysegcnn.core.constants.rst.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-pysegcnn.core.constants
-=======================
-
-.. automodule:: pysegcnn.core.constants
-
-   
-   
-   
-
-   
-   
-   
-
-   
-   
-   .. rubric:: Classes
-
-   .. autosummary::
-   
-      Cloud95Labels
-      Label
-      Landsat8
-      ProSnowLabels
-      Sentinel2
-      SparcsLabels
-   
-   
-
-   
-   
-   
-
-
-
diff --git a/docs/_build/html/_sources/modules/pysegcnn.core.dataset.rst.txt b/docs/_build/html/_sources/modules/pysegcnn.core.dataset.rst.txt
deleted file mode 100644
index 2586d74..0000000
--- a/docs/_build/html/_sources/modules/pysegcnn.core.dataset.rst.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-pysegcnn.core.dataset
-=====================
-
-.. automodule:: pysegcnn.core.dataset
-
-   
-   
-   
-
-   
-   
-   
-
-   
-   
-   .. rubric:: Classes
-
-   .. autosummary::
-   
-      Cloud95Dataset
-      ImageDataset
-      ProSnowDataset
-      ProSnowGarmisch
-      ProSnowObergurgl
-      SparcsDataset
-      StandardEoDataset
-      SupportedDatasets
-   
-   
-
-   
-   
-   
-
-
-
diff --git a/docs/_build/html/_sources/readme.rst.txt b/docs/_build/html/_sources/readme.rst.txt
deleted file mode 100644
index 35b29b4..0000000
--- a/docs/_build/html/_sources/readme.rst.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Test
-====
-
-.. mdinclude:: ../README.md
\ No newline at end of file
diff --git a/docs/_build/html/_sources/source/api.rst.txt b/docs/_build/html/_sources/source/api.rst.txt
index 4de52de..6d2aabc 100644
--- a/docs/_build/html/_sources/source/api.rst.txt
+++ b/docs/_build/html/_sources/source/api.rst.txt
@@ -13,9 +13,9 @@ Dataset
 
 Custom dataset classes compliant to the PyTorch `standard <https://pytorch.org/docs/stable/data.html>`_.
 
-Image Dataset
-^^^^^^^^^^^^^
-Generic class to implement `custom datasets <https://pytorch.org/tutorials/beginner/data_loading_tutorial.html>`_.
+Generic classes
+^^^^^^^^^^^^^^^
+Generic class to implement a `custom dataset <https://pytorch.org/tutorials/beginner/data_loading_tutorial.html>`_.
 
 .. autosummary::
     :toctree: generated/
@@ -23,11 +23,21 @@ Generic class to implement `custom datasets <https://pytorch.org/tutorials/begin
 
     core.dataset.ImageDataset
 
-Supported datasets
-^^^^^^^^^^^^^^^^^^
+Generic class to implement a custom dataset following a standard directory
+structure.
+
+.. autosummary::
+    :toctree: generated/
+    :nosignatures:
+
+    core.dataset.StandardEoDataset
+
 
-The following open-source spaceborne multispectral image datasets are supported
-out-of-the-box:
+Specific classes
+^^^^^^^^^^^^^^^^
+
+Specific classes for some open-source image datasets. Currently, the following
+spaceborne multispectral image datasets are supported out-of-the-box:
 
 .. autosummary::
     :toctree: generated/
@@ -36,7 +46,6 @@ out-of-the-box:
     core.dataset.SparcsDataset
     core.dataset.Cloud95Dataset
 
-
 Models
 ------
 
@@ -81,6 +90,9 @@ Neural Networks
     core.models.UNet
 
 
+..
+    Links:
+
 .. _Sparcs:
     https://www.usgs.gov/land-resources/nli/landsat/spatial-procedures-automated-removal-cloud-and-shadow-sparcs-validation
 
@@ -92,3 +104,12 @@ Neural Networks
 
 .. _U-Net:
     https://arxiv.org/abs/1505.04597
+
+.. _Landsat-8:
+    https://www.usgs.gov/land-resources/nli/landsat/landsat-8?qt-science_support_page_related_con=0#qt-science_support_page_related_con
+
+.. _Sentinel-2:
+    https://sentinel.esa.int/web/sentinel/missions/sentinel-2
+
+.. _Hughes & Hayes (2014):
+    https://www.mdpi.com/2072-4292/6/6/4907
diff --git a/docs/_build/html/_sources/source/core.rst.txt b/docs/_build/html/_sources/source/core.rst.txt
deleted file mode 100644
index e57f944..0000000
--- a/docs/_build/html/_sources/source/core.rst.txt
+++ /dev/null
@@ -1,109 +0,0 @@
-core package
-============
-
-Submodules
-----------
-
-core.cli module
----------------
-
-.. automodule:: core.cli
-   :members:
-   :undoc-members:
-   :show-inheritance:
-
-core.constants module
----------------------
-
-.. automodule:: core.constants
-   :members:
-   :undoc-members:
-   :show-inheritance:
-
-core.dataset module
--------------------
-
-.. automodule:: core.dataset
-   :members:
-   :undoc-members:
-   :show-inheritance:
-
-core.graphics module
---------------------
-
-.. automodule:: core.graphics
-   :members:
-   :undoc-members:
-   :show-inheritance:
-
-core.layers module
-------------------
-
-.. automodule:: core.layers
-   :members:
-   :undoc-members:
-   :show-inheritance:
-
-core.logging module
--------------------
-
-.. automodule:: core.logging
-   :members:
-   :undoc-members:
-   :show-inheritance:
-
-core.models module
-------------------
-
-.. automodule:: core.models
-   :members:
-   :undoc-members:
-   :show-inheritance:
-
-core.predict module
--------------------
-
-.. automodule:: core.predict
-   :members:
-   :undoc-members:
-   :show-inheritance:
-
-core.split module
------------------
-
-.. automodule:: core.split
-   :members:
-   :undoc-members:
-   :show-inheritance:
-
-core.trainer module
--------------------
-
-.. automodule:: core.trainer
-   :members:
-   :undoc-members:
-   :show-inheritance:
-
-core.transforms module
-----------------------
-
-.. automodule:: core.transforms
-   :members:
-   :undoc-members:
-   :show-inheritance:
-
-core.utils module
------------------
-
-.. automodule:: core.utils
-   :members:
-   :undoc-members:
-   :show-inheritance:
-
-Module contents
----------------
-
-.. automodule:: core
-   :members:
-   :undoc-members:
-   :show-inheritance:
diff --git a/docs/_build/html/_sources/source/generated/pysegcnn.core.dataset.Cloud95Dataset.rst.txt b/docs/_build/html/_sources/source/generated/pysegcnn.core.dataset.Cloud95Dataset.rst.txt
index 0b86506..a181065 100644
--- a/docs/_build/html/_sources/source/generated/pysegcnn.core.dataset.Cloud95Dataset.rst.txt
+++ b/docs/_build/html/_sources/source/generated/pysegcnn.core.dataset.Cloud95Dataset.rst.txt
@@ -1,4 +1,4 @@
-pysegcnn.core.dataset.Cloud95Dataset
+pysegcnn.core.dataset.Cloud95Dataset
 ====================================
 
 .. currentmodule:: pysegcnn.core.dataset
diff --git a/docs/_build/html/_sources/source/generated/pysegcnn.core.dataset.ImageDataset.rst.txt b/docs/_build/html/_sources/source/generated/pysegcnn.core.dataset.ImageDataset.rst.txt
index c04ed1f..31c36ff 100644
--- a/docs/_build/html/_sources/source/generated/pysegcnn.core.dataset.ImageDataset.rst.txt
+++ b/docs/_build/html/_sources/source/generated/pysegcnn.core.dataset.ImageDataset.rst.txt
@@ -1,4 +1,4 @@
-pysegcnn.core.dataset.ImageDataset
+pysegcnn.core.dataset.ImageDataset
 ==================================
 
 .. currentmodule:: pysegcnn.core.dataset
diff --git a/docs/_build/html/_sources/source/generated/pysegcnn.core.dataset.SparcsDataset.rst.txt b/docs/_build/html/_sources/source/generated/pysegcnn.core.dataset.SparcsDataset.rst.txt
index d5c9fe4..cb357b5 100644
--- a/docs/_build/html/_sources/source/generated/pysegcnn.core.dataset.SparcsDataset.rst.txt
+++ b/docs/_build/html/_sources/source/generated/pysegcnn.core.dataset.SparcsDataset.rst.txt
@@ -1,4 +1,4 @@
-pysegcnn.core.dataset.SparcsDataset
+pysegcnn.core.dataset.SparcsDataset
 ===================================
 
 .. currentmodule:: pysegcnn.core.dataset
diff --git a/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.Block.rst.txt b/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.Block.rst.txt
index 3e960b4..3187534 100644
--- a/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.Block.rst.txt
+++ b/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.Block.rst.txt
@@ -1,4 +1,4 @@
-pysegcnn.core.layers.Block
+pysegcnn.core.layers.Block
 ==========================
 
 .. currentmodule:: pysegcnn.core.layers
diff --git a/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.Conv2dSame.rst.txt b/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.Conv2dSame.rst.txt
index 7c81180..42b472e 100644
--- a/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.Conv2dSame.rst.txt
+++ b/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.Conv2dSame.rst.txt
@@ -1,4 +1,4 @@
-pysegcnn.core.layers.Conv2dSame
+pysegcnn.core.layers.Conv2dSame
 ===============================
 
 .. currentmodule:: pysegcnn.core.layers
diff --git a/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.ConvBnReluMaxPool.rst.txt b/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.ConvBnReluMaxPool.rst.txt
index 7a99902..6260fe5 100644
--- a/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.ConvBnReluMaxPool.rst.txt
+++ b/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.ConvBnReluMaxPool.rst.txt
@@ -1,4 +1,4 @@
-pysegcnn.core.layers.ConvBnReluMaxPool
+pysegcnn.core.layers.ConvBnReluMaxPool
 ======================================
 
 .. currentmodule:: pysegcnn.core.layers
diff --git a/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.ConvBnReluMaxUnpool.rst.txt b/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.ConvBnReluMaxUnpool.rst.txt
index c83252a..386abc1 100644
--- a/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.ConvBnReluMaxUnpool.rst.txt
+++ b/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.ConvBnReluMaxUnpool.rst.txt
@@ -1,4 +1,4 @@
-pysegcnn.core.layers.ConvBnReluMaxUnpool
+pysegcnn.core.layers.ConvBnReluMaxUnpool
 ========================================
 
 .. currentmodule:: pysegcnn.core.layers
diff --git a/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.ConvBnReluUpsample.rst.txt b/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.ConvBnReluUpsample.rst.txt
index bac34ee..6d4f3e6 100644
--- a/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.ConvBnReluUpsample.rst.txt
+++ b/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.ConvBnReluUpsample.rst.txt
@@ -1,4 +1,4 @@
-pysegcnn.core.layers.ConvBnReluUpsample
+pysegcnn.core.layers.ConvBnReluUpsample
 =======================================
 
 .. currentmodule:: pysegcnn.core.layers
diff --git a/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.Decoder.rst.txt b/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.Decoder.rst.txt
index 9ca6527..a5fcf7f 100644
--- a/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.Decoder.rst.txt
+++ b/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.Decoder.rst.txt
@@ -1,4 +1,4 @@
-pysegcnn.core.layers.Decoder
+pysegcnn.core.layers.Decoder
 ============================
 
 .. currentmodule:: pysegcnn.core.layers
diff --git a/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.DecoderBlock.rst.txt b/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.DecoderBlock.rst.txt
index 3acc653..d6a87bc 100644
--- a/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.DecoderBlock.rst.txt
+++ b/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.DecoderBlock.rst.txt
@@ -1,4 +1,4 @@
-pysegcnn.core.layers.DecoderBlock
+pysegcnn.core.layers.DecoderBlock
 =================================
 
 .. currentmodule:: pysegcnn.core.layers
diff --git a/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.Encoder.rst.txt b/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.Encoder.rst.txt
index 09aa71c..fcd00c6 100644
--- a/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.Encoder.rst.txt
+++ b/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.Encoder.rst.txt
@@ -1,4 +1,4 @@
-pysegcnn.core.layers.Encoder
+pysegcnn.core.layers.Encoder
 ============================
 
 .. currentmodule:: pysegcnn.core.layers
diff --git a/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.EncoderBlock.rst.txt b/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.EncoderBlock.rst.txt
index 37385b2..454ce41 100644
--- a/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.EncoderBlock.rst.txt
+++ b/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.EncoderBlock.rst.txt
@@ -1,4 +1,4 @@
-pysegcnn.core.layers.EncoderBlock
+pysegcnn.core.layers.EncoderBlock
 =================================
 
 .. currentmodule:: pysegcnn.core.layers
diff --git a/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.rst.txt b/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.rst.txt
deleted file mode 100644
index 5e2f125..0000000
--- a/docs/_build/html/_sources/source/generated/pysegcnn.core.layers.rst.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-pysegcnn.core.layers
-====================
-
-.. automodule:: pysegcnn.core.layers
-
-   
-   
-   
-
-   
-   
-   .. rubric:: Functions
-
-   .. autosummary::
-   
-      conv_bn_relu
-   
-   
-
-   
-   
-   .. rubric:: Classes
-
-   .. autosummary::
-   
-      Block
-      Conv2dSame
-      ConvBnReluMaxPool
-      ConvBnReluMaxUnpool
-      ConvBnReluUpsample
-      Decoder
-      DecoderBlock
-      Encoder
-      EncoderBlock
-   
-   
-
-   
-   
-   
-
-
-
diff --git a/docs/_build/html/_sources/source/generated/pysegcnn.core.models.Network.rst.txt b/docs/_build/html/_sources/source/generated/pysegcnn.core.models.Network.rst.txt
index a5b21f0..99819a3 100644
--- a/docs/_build/html/_sources/source/generated/pysegcnn.core.models.Network.rst.txt
+++ b/docs/_build/html/_sources/source/generated/pysegcnn.core.models.Network.rst.txt
@@ -1,4 +1,4 @@
-pysegcnn.core.models.Network
+pysegcnn.core.models.Network
 ============================
 
 .. currentmodule:: pysegcnn.core.models
diff --git a/docs/_build/html/_sources/source/generated/pysegcnn.core.models.UNet.rst.txt b/docs/_build/html/_sources/source/generated/pysegcnn.core.models.UNet.rst.txt
index 933d3fc..92cb118 100644
--- a/docs/_build/html/_sources/source/generated/pysegcnn.core.models.UNet.rst.txt
+++ b/docs/_build/html/_sources/source/generated/pysegcnn.core.models.UNet.rst.txt
@@ -1,4 +1,4 @@
-pysegcnn.core.models.UNet
+pysegcnn.core.models.UNet
 =========================
 
 .. currentmodule:: pysegcnn.core.models
diff --git a/docs/_build/html/_sources/source/generated/pysegcnn.core.models.rst.txt b/docs/_build/html/_sources/source/generated/pysegcnn.core.models.rst.txt
deleted file mode 100644
index 3c9f372..0000000
--- a/docs/_build/html/_sources/source/generated/pysegcnn.core.models.rst.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-pysegcnn.core.models
-====================
-
-.. automodule:: pysegcnn.core.models
-
-   
-   
-   
-
-   
-   
-   
-
-   
-   
-   .. rubric:: Classes
-
-   .. autosummary::
-   
-      Network
-      SupportedLossFunctions
-      SupportedModels
-      SupportedOptimizers
-      UNet
-   
-   
-
-   
-   
-   
-
-
-
diff --git a/docs/_build/html/_sources/source/install.rst.txt b/docs/_build/html/_sources/source/install.rst.txt
deleted file mode 100644
index eb91803..0000000
--- a/docs/_build/html/_sources/source/install.rst.txt
+++ /dev/null
@@ -1,77 +0,0 @@
-Installation
-============
-
-Download
----------
-You can download ``pysegcnn`` from this repository's
-`website <https://gitlab.inf.unibz.it/REMSEN/ccisnow/pysegcnn>`_
-or alternatively use ``git`` from terminal:
-
-.. code-block:: bash
-
-    git clone https://gitlab.inf.unibz.it/REMSEN/ccisnow/pysegcnn.git
-
-This creates a copy of the repository in your current directory on the file
-system.
-
-Conda
------
-
-To install ``pysegcnn``, I recommend to use the ``conda`` package manager.
-You can download ``conda`` `here <https://docs.conda.io/en/latest/miniconda.html>`_.
-Once successfully installed ``conda``, I recommend to add ``conda-forge`` as
-your default channel:
-
-.. code-block:: bash
-
-    conda config --add channels conda-forge
-
-Conda environments
-------------------
-
-To install ``pysegcnn``, I recommend to create a specific ``conda``
-`environment <https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html>`_,
-by using the provided ``environment.yml`` file. In a terminal, navigate to the
-**cloned git repositories root directory** (``/pysegcnn``) and type:
-
-.. code-block:: bash
-
-    conda env create -f environment.yml
-
-This may take a while. The above command creates a conda environment with all
-required dependencies except the ``pytorch`` package. The first line in
-``environment.yml`` defines the environment name, in this case ``pysegcnn``.
-Activate your environment using:
-
-.. code-block:: bash
-
-    conda activate pysegcnn
-
-Install PyTorch
----------------
-The installation of ``pytorch`` is heavily dependent on the hardware of your
-machine. Therefore, after activating your environment, install the version of
-`PyTorch <https://pytorch.org/>`_ that your system supports by following the
-official `instructions <https://pytorch.org/get-started/locally/>`_.
-
-If you have to build ``pytorch`` from source, follow this
-`guide <https://github.com/pytorch/pytorch#from-source>`_.
-
-`Here <https://pytorch.org/get-started/locally/#linux-verification>`_ is how to
-check if ``pytorch`` is installed correctly.
-
-Install PySegCNN
-----------------
-To finally install ``pysegcnn`` run the below command **from this repositories
-root directory within the activated ``pysegcnn`` conda environment**:
-
-.. code-block:: bash
-
-    pip install -e .
-
-If successful, you should be able to import ``pysegcnn`` from any Python
-interpreter using:
-
-.. code-block:: python
-
-    import pysegcnn
diff --git a/docs/_build/html/_sources/source/main.rst.txt b/docs/_build/html/_sources/source/main.rst.txt
deleted file mode 100644
index 8fd3716..0000000
--- a/docs/_build/html/_sources/source/main.rst.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-main package
-============
-
-Submodules
-----------
-
-main.config module
-------------------
-
-.. automodule:: main.config
-   :members:
-   :undoc-members:
-   :show-inheritance:
-
-main.eval module
-----------------
-
-.. automodule:: main.eval
-   :members:
-   :undoc-members:
-   :show-inheritance:
-
-main.train module
------------------
-
-.. automodule:: main.train
-   :members:
-   :undoc-members:
-   :show-inheritance:
-
-Module contents
----------------
-
-.. automodule:: main
-   :members:
-   :undoc-members:
-   :show-inheritance:
diff --git a/docs/_build/html/_sources/source/modules.rst.txt b/docs/_build/html/_sources/source/modules.rst.txt
deleted file mode 100644
index 55e8645..0000000
--- a/docs/_build/html/_sources/source/modules.rst.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-pysegcnn
-========
-
-.. toctree::
-   :maxdepth: 4
-
-   core
-   main
-   preprocessing
diff --git a/docs/_build/html/_sources/source/preprocessing.rst.txt b/docs/_build/html/_sources/source/preprocessing.rst.txt
deleted file mode 100644
index 06afc1c..0000000
--- a/docs/_build/html/_sources/source/preprocessing.rst.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-preprocessing package
-=====================
-
-Submodules
-----------
-
-preprocessing.sparcs module
----------------------------
-
-.. automodule:: preprocessing.sparcs
-   :members:
-   :undoc-members:
-   :show-inheritance:
-
-Module contents
----------------
-
-.. automodule:: preprocessing
-   :members:
-   :undoc-members:
-   :show-inheritance:
diff --git a/docs/_build/html/_sources/source/readme.rst.txt b/docs/_build/html/_sources/source/readme.rst.txt
deleted file mode 100644
index 3f2eb6f..0000000
--- a/docs/_build/html/_sources/source/readme.rst.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-README
-======
-
-.. include: ../../README.md
\ No newline at end of file
diff --git a/docs/_build/html/_static/alabaster.css b/docs/_build/html/_static/alabaster.css
deleted file mode 100644
index 0eddaeb..0000000
--- a/docs/_build/html/_static/alabaster.css
+++ /dev/null
@@ -1,701 +0,0 @@
-@import url("basic.css");
-
-/* -- page layout ----------------------------------------------------------- */
-
-body {
-    font-family: Georgia, serif;
-    font-size: 17px;
-    background-color: #fff;
-    color: #000;
-    margin: 0;
-    padding: 0;
-}
-
-
-div.document {
-    width: 940px;
-    margin: 30px auto 0 auto;
-}
-
-div.documentwrapper {
-    float: left;
-    width: 100%;
-}
-
-div.bodywrapper {
-    margin: 0 0 0 220px;
-}
-
-div.sphinxsidebar {
-    width: 220px;
-    font-size: 14px;
-    line-height: 1.5;
-}
-
-hr {
-    border: 1px solid #B1B4B6;
-}
-
-div.body {
-    background-color: #fff;
-    color: #3E4349;
-    padding: 0 30px 0 30px;
-}
-
-div.body > .section {
-    text-align: left;
-}
-
-div.footer {
-    width: 940px;
-    margin: 20px auto 30px auto;
-    font-size: 14px;
-    color: #888;
-    text-align: right;
-}
-
-div.footer a {
-    color: #888;
-}
-
-p.caption {
-    font-family: inherit;
-    font-size: inherit;
-}
-
-
-div.relations {
-    display: none;
-}
-
-
-div.sphinxsidebar a {
-    color: #444;
-    text-decoration: none;
-    border-bottom: 1px dotted #999;
-}
-
-div.sphinxsidebar a:hover {
-    border-bottom: 1px solid #999;
-}
-
-div.sphinxsidebarwrapper {
-    padding: 18px 10px;
-}
-
-div.sphinxsidebarwrapper p.logo {
-    padding: 0;
-    margin: -10px 0 0 0px;
-    text-align: center;
-}
-
-div.sphinxsidebarwrapper h1.logo {
-    margin-top: -10px;
-    text-align: center;
-    margin-bottom: 5px;
-    text-align: left;
-}
-
-div.sphinxsidebarwrapper h1.logo-name {
-    margin-top: 0px;
-}
-
-div.sphinxsidebarwrapper p.blurb {
-    margin-top: 0;
-    font-style: normal;
-}
-
-div.sphinxsidebar h3,
-div.sphinxsidebar h4 {
-    font-family: Georgia, serif;
-    color: #444;
-    font-size: 24px;
-    font-weight: normal;
-    margin: 0 0 5px 0;
-    padding: 0;
-}
-
-div.sphinxsidebar h4 {
-    font-size: 20px;
-}
-
-div.sphinxsidebar h3 a {
-    color: #444;
-}
-
-div.sphinxsidebar p.logo a,
-div.sphinxsidebar h3 a,
-div.sphinxsidebar p.logo a:hover,
-div.sphinxsidebar h3 a:hover {
-    border: none;
-}
-
-div.sphinxsidebar p {
-    color: #555;
-    margin: 10px 0;
-}
-
-div.sphinxsidebar ul {
-    margin: 10px 0;
-    padding: 0;
-    color: #000;
-}
-
-div.sphinxsidebar ul li.toctree-l1 > a {
-    font-size: 120%;
-}
-
-div.sphinxsidebar ul li.toctree-l2 > a {
-    font-size: 110%;
-}
-
-div.sphinxsidebar input {
-    border: 1px solid #CCC;
-    font-family: Georgia, serif;
-    font-size: 1em;
-}
-
-div.sphinxsidebar hr {
-    border: none;
-    height: 1px;
-    color: #AAA;
-    background: #AAA;
-
-    text-align: left;
-    margin-left: 0;
-    width: 50%;
-}
-
-div.sphinxsidebar .badge {
-    border-bottom: none;
-}
-
-div.sphinxsidebar .badge:hover {
-    border-bottom: none;
-}
-
-/* To address an issue with donation coming after search */
-div.sphinxsidebar h3.donation {
-    margin-top: 10px;
-}
-
-/* -- body styles ----------------------------------------------------------- */
-
-a {
-    color: #004B6B;
-    text-decoration: underline;
-}
-
-a:hover {
-    color: #6D4100;
-    text-decoration: underline;
-}
-
-div.body h1,
-div.body h2,
-div.body h3,
-div.body h4,
-div.body h5,
-div.body h6 {
-    font-family: Georgia, serif;
-    font-weight: normal;
-    margin: 30px 0px 10px 0px;
-    padding: 0;
-}
-
-div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
-div.body h2 { font-size: 180%; }
-div.body h3 { font-size: 150%; }
-div.body h4 { font-size: 130%; }
-div.body h5 { font-size: 100%; }
-div.body h6 { font-size: 100%; }
-
-a.headerlink {
-    color: #DDD;
-    padding: 0 4px;
-    text-decoration: none;
-}
-
-a.headerlink:hover {
-    color: #444;
-    background: #EAEAEA;
-}
-
-div.body p, div.body dd, div.body li {
-    line-height: 1.4em;
-}
-
-div.admonition {
-    margin: 20px 0px;
-    padding: 10px 30px;
-    background-color: #EEE;
-    border: 1px solid #CCC;
-}
-
-div.admonition tt.xref, div.admonition code.xref, div.admonition a tt {
-    background-color: #FBFBFB;
-    border-bottom: 1px solid #fafafa;
-}
-
-div.admonition p.admonition-title {
-    font-family: Georgia, serif;
-    font-weight: normal;
-    font-size: 24px;
-    margin: 0 0 10px 0;
-    padding: 0;
-    line-height: 1;
-}
-
-div.admonition p.last {
-    margin-bottom: 0;
-}
-
-div.highlight {
-    background-color: #fff;
-}
-
-dt:target, .highlight {
-    background: #FAF3E8;
-}
-
-div.warning {
-    background-color: #FCC;
-    border: 1px solid #FAA;
-}
-
-div.danger {
-    background-color: #FCC;
-    border: 1px solid #FAA;
-    -moz-box-shadow: 2px 2px 4px #D52C2C;
-    -webkit-box-shadow: 2px 2px 4px #D52C2C;
-    box-shadow: 2px 2px 4px #D52C2C;
-}
-
-div.error {
-    background-color: #FCC;
-    border: 1px solid #FAA;
-    -moz-box-shadow: 2px 2px 4px #D52C2C;
-    -webkit-box-shadow: 2px 2px 4px #D52C2C;
-    box-shadow: 2px 2px 4px #D52C2C;
-}
-
-div.caution {
-    background-color: #FCC;
-    border: 1px solid #FAA;
-}
-
-div.attention {
-    background-color: #FCC;
-    border: 1px solid #FAA;
-}
-
-div.important {
-    background-color: #EEE;
-    border: 1px solid #CCC;
-}
-
-div.note {
-    background-color: #EEE;
-    border: 1px solid #CCC;
-}
-
-div.tip {
-    background-color: #EEE;
-    border: 1px solid #CCC;
-}
-
-div.hint {
-    background-color: #EEE;
-    border: 1px solid #CCC;
-}
-
-div.seealso {
-    background-color: #EEE;
-    border: 1px solid #CCC;
-}
-
-div.topic {
-    background-color: #EEE;
-}
-
-p.admonition-title {
-    display: inline;
-}
-
-p.admonition-title:after {
-    content: ":";
-}
-
-pre, tt, code {
-    font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
-    font-size: 0.9em;
-}
-
-.hll {
-    background-color: #FFC;
-    margin: 0 -12px;
-    padding: 0 12px;
-    display: block;
-}
-
-img.screenshot {
-}
-
-tt.descname, tt.descclassname, code.descname, code.descclassname {
-    font-size: 0.95em;
-}
-
-tt.descname, code.descname {
-    padding-right: 0.08em;
-}
-
-img.screenshot {
-    -moz-box-shadow: 2px 2px 4px #EEE;
-    -webkit-box-shadow: 2px 2px 4px #EEE;
-    box-shadow: 2px 2px 4px #EEE;
-}
-
-table.docutils {
-    border: 1px solid #888;
-    -moz-box-shadow: 2px 2px 4px #EEE;
-    -webkit-box-shadow: 2px 2px 4px #EEE;
-    box-shadow: 2px 2px 4px #EEE;
-}
-
-table.docutils td, table.docutils th {
-    border: 1px solid #888;
-    padding: 0.25em 0.7em;
-}
-
-table.field-list, table.footnote {
-    border: none;
-    -moz-box-shadow: none;
-    -webkit-box-shadow: none;
-    box-shadow: none;
-}
-
-table.footnote {
-    margin: 15px 0;
-    width: 100%;
-    border: 1px solid #EEE;
-    background: #FDFDFD;
-    font-size: 0.9em;
-}
-
-table.footnote + table.footnote {
-    margin-top: -15px;
-    border-top: none;
-}
-
-table.field-list th {
-    padding: 0 0.8em 0 0;
-}
-
-table.field-list td {
-    padding: 0;
-}
-
-table.field-list p {
-    margin-bottom: 0.8em;
-}
-
-/* Cloned from
- * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68
- */
-.field-name {
-    -moz-hyphens: manual;
-    -ms-hyphens: manual;
-    -webkit-hyphens: manual;
-    hyphens: manual;
-}
-
-table.footnote td.label {
-    width: .1px;
-    padding: 0.3em 0 0.3em 0.5em;
-}
-
-table.footnote td {
-    padding: 0.3em 0.5em;
-}
-
-dl {
-    margin: 0;
-    padding: 0;
-}
-
-dl dd {
-    margin-left: 30px;
-}
-
-blockquote {
-    margin: 0 0 0 30px;
-    padding: 0;
-}
-
-ul, ol {
-    /* Matches the 30px from the narrow-screen "li > ul" selector below */
-    margin: 10px 0 10px 30px;
-    padding: 0;
-}
-
-pre {
-    background: #EEE;
-    padding: 7px 30px;
-    margin: 15px 0px;
-    line-height: 1.3em;
-}
-
-div.viewcode-block:target {
-    background: #ffd;
-}
-
-dl pre, blockquote pre, li pre {
-    margin-left: 0;
-    padding-left: 30px;
-}
-
-tt, code {
-    background-color: #ecf0f3;
-    color: #222;
-    /* padding: 1px 2px; */
-}
-
-tt.xref, code.xref, a tt {
-    background-color: #FBFBFB;
-    border-bottom: 1px solid #fff;
-}
-
-a.reference {
-    text-decoration: none;
-    border-bottom: 1px dotted #004B6B;
-}
-
-/* Don't put an underline on images */
-a.image-reference, a.image-reference:hover {
-    border-bottom: none;
-}
-
-a.reference:hover {
-    border-bottom: 1px solid #6D4100;
-}
-
-a.footnote-reference {
-    text-decoration: none;
-    font-size: 0.7em;
-    vertical-align: top;
-    border-bottom: 1px dotted #004B6B;
-}
-
-a.footnote-reference:hover {
-    border-bottom: 1px solid #6D4100;
-}
-
-a:hover tt, a:hover code {
-    background: #EEE;
-}
-
-
-@media screen and (max-width: 870px) {
-
-    div.sphinxsidebar {
-    	display: none;
-    }
-
-    div.document {
-       width: 100%;
-
-    }
-
-    div.documentwrapper {
-    	margin-left: 0;
-    	margin-top: 0;
-    	margin-right: 0;
-    	margin-bottom: 0;
-    }
-
-    div.bodywrapper {
-    	margin-top: 0;
-    	margin-right: 0;
-    	margin-bottom: 0;
-    	margin-left: 0;
-    }
-
-    ul {
-    	margin-left: 0;
-    }
-
-	li > ul {
-        /* Matches the 30px from the "ul, ol" selector above */
-		margin-left: 30px;
-	}
-
-    .document {
-    	width: auto;
-    }
-
-    .footer {
-    	width: auto;
-    }
-
-    .bodywrapper {
-    	margin: 0;
-    }
-
-    .footer {
-    	width: auto;
-    }
-
-    .github {
-        display: none;
-    }
-
-
-
-}
-
-
-
-@media screen and (max-width: 875px) {
-
-    body {
-        margin: 0;
-        padding: 20px 30px;
-    }
-
-    div.documentwrapper {
-        float: none;
-        background: #fff;
-    }
-
-    div.sphinxsidebar {
-        display: block;
-        float: none;
-        width: 102.5%;
-        margin: 50px -30px -20px -30px;
-        padding: 10px 20px;
-        background: #333;
-        color: #FFF;
-    }
-
-    div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
-    div.sphinxsidebar h3 a {
-        color: #fff;
-    }
-
-    div.sphinxsidebar a {
-        color: #AAA;
-    }
-
-    div.sphinxsidebar p.logo {
-        display: none;
-    }
-
-    div.document {
-        width: 100%;
-        margin: 0;
-    }
-
-    div.footer {
-        display: none;
-    }
-
-    div.bodywrapper {
-        margin: 0;
-    }
-
-    div.body {
-        min-height: 0;
-        padding: 0;
-    }
-
-    .rtd_doc_footer {
-        display: none;
-    }
-
-    .document {
-        width: auto;
-    }
-
-    .footer {
-        width: auto;
-    }
-
-    .footer {
-        width: auto;
-    }
-
-    .github {
-        display: none;
-    }
-}
-
-
-/* misc. */
-
-.revsys-inline {
-    display: none!important;
-}
-
-/* Make nested-list/multi-paragraph items look better in Releases changelog
- * pages. Without this, docutils' magical list fuckery causes inconsistent
- * formatting between different release sub-lists.
- */
-div#changelog > div.section > ul > li > p:only-child {
-    margin-bottom: 0;
-}
-
-/* Hide fugly table cell borders in ..bibliography:: directive output */
-table.docutils.citation, table.docutils.citation td, table.docutils.citation th {
-  border: none;
-  /* Below needed in some edge cases; if not applied, bottom shadows appear */
-  -moz-box-shadow: none;
-  -webkit-box-shadow: none;
-  box-shadow: none;
-}
-
-
-/* relbar */
-
-.related {
-    line-height: 30px;
-    width: 100%;
-    font-size: 0.9rem;
-}
-
-.related.top {
-    border-bottom: 1px solid #EEE;
-    margin-bottom: 20px;
-}
-
-.related.bottom {
-    border-top: 1px solid #EEE;
-}
-
-.related ul {
-    padding: 0;
-    margin: 0;
-    list-style: none;
-}
-
-.related li {
-    display: inline;
-}
-
-nav#rellinks {
-    float: right;
-}
-
-nav#rellinks li+li:before {
-    content: "|";
-}
-
-nav#breadcrumbs li+li:before {
-    content: "\00BB";
-}
-
-/* Hide certain items when printing */
-@media print {
-    div.related {
-        display: none;
-    }
-}
\ No newline at end of file
diff --git a/docs/_build/html/_static/custom.css b/docs/_build/html/_static/custom.css
deleted file mode 100644
index 2a924f1..0000000
--- a/docs/_build/html/_static/custom.css
+++ /dev/null
@@ -1 +0,0 @@
-/* This file intentionally left blank. */
diff --git a/docs/_build/html/genindex.html b/docs/_build/html/genindex.html
index 7fb412d..d44bdbf 100644
--- a/docs/_build/html/genindex.html
+++ b/docs/_build/html/genindex.html
@@ -152,6 +152,7 @@
 
 <div class="genindex-jumpbox">
  <a href="#_"><strong>_</strong></a>
+ | <a href="#A"><strong>A</strong></a>
  | <a href="#B"><strong>B</strong></a>
  | <a href="#C"><strong>C</strong></a>
  | <a href="#D"><strong>D</strong></a>
@@ -171,6 +172,8 @@
         <li><a href="source/generated/pysegcnn.core.dataset.ImageDataset.html#pysegcnn.core.dataset.ImageDataset.__init__">(pysegcnn.core.dataset.ImageDataset method)</a>
 </li>
         <li><a href="source/generated/pysegcnn.core.dataset.SparcsDataset.html#pysegcnn.core.dataset.SparcsDataset.__init__">(pysegcnn.core.dataset.SparcsDataset method)</a>
+</li>
+        <li><a href="source/generated/pysegcnn.core.dataset.StandardEoDataset.html#pysegcnn.core.dataset.StandardEoDataset.__init__">(pysegcnn.core.dataset.StandardEoDataset method)</a>
 </li>
         <li><a href="source/generated/pysegcnn.core.layers.Block.html#pysegcnn.core.layers.Block.__init__">(pysegcnn.core.layers.Block method)</a>
 </li>
@@ -193,11 +196,21 @@
         <li><a href="source/generated/pysegcnn.core.models.Network.html#pysegcnn.core.models.Network.__init__">(pysegcnn.core.models.Network method)</a>
 </li>
         <li><a href="source/generated/pysegcnn.core.models.UNet.html#pysegcnn.core.models.UNet.__init__">(pysegcnn.core.models.UNet method)</a>
+</li>
+        <li><a href="source/generated/pysegcnn.core.transforms.Augment.html#pysegcnn.core.transforms.Augment.__init__">(pysegcnn.core.transforms.Augment method)</a>
 </li>
       </ul></li>
   </ul></td>
 </tr></table>
 
+<h2 id="A">A</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="source/generated/pysegcnn.core.transforms.Augment.html#pysegcnn.core.transforms.Augment">Augment (class in pysegcnn.core.transforms)</a>
+</li>
+  </ul></td>
+</tr></table>
+
 <h2 id="B">B</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
@@ -268,6 +281,10 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="source/generated/pysegcnn.core.dataset.SparcsDataset.html#pysegcnn.core.dataset.SparcsDataset">SparcsDataset (class in pysegcnn.core.dataset)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="source/generated/pysegcnn.core.dataset.StandardEoDataset.html#pysegcnn.core.dataset.StandardEoDataset">StandardEoDataset (class in pysegcnn.core.dataset)</a>
 </li>
   </ul></td>
 </tr></table>
diff --git a/docs/_build/html/modules.html b/docs/_build/html/modules.html
deleted file mode 100644
index a1bf15a..0000000
--- a/docs/_build/html/modules.html
+++ /dev/null
@@ -1,131 +0,0 @@
-
-<!DOCTYPE html>
-
-<html>
-  <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <title>Modules &#8212; PySegCNN  documentation</title>
-    <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
-    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-    <script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/language_data.js"></script>
-    <link rel="index" title="Index" href="genindex.html" />
-    <link rel="search" title="Search" href="search.html" />
-    <link rel="next" title="pysegcnn.core.cli" href="modules/pysegcnn.core.cli.html" />
-    <link rel="prev" title="PySegCNN: Image segmentation with convolutional neural networks in Python" href="index.html" />
-   
-  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
-  
-  
-  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
-  </head><body>
-  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          
-
-          <div class="body" role="main">
-            
-  <div class="section" id="modules">
-<h1>Modules<a class="headerlink" href="#modules" title="Permalink to this headline">¶</a></h1>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><a class="reference internal" href="modules/pysegcnn.core.cli.html#module-pysegcnn.core.cli" title="pysegcnn.core.cli"><code class="xref py py-obj docutils literal notranslate"><span class="pre">pysegcnn.core.cli</span></code></a></p></td>
-<td><p>Command line interface parsers.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="modules/pysegcnn.core.constants.html#module-pysegcnn.core.constants" title="pysegcnn.core.constants"><code class="xref py py-obj docutils literal notranslate"><span class="pre">pysegcnn.core.constants</span></code></a></p></td>
-<td><p>A collection of constant values.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="modules/pysegcnn.core.dataset.html#module-pysegcnn.core.dataset" title="pysegcnn.core.dataset"><code class="xref py py-obj docutils literal notranslate"><span class="pre">pysegcnn.core.dataset</span></code></a></p></td>
-<td><p>Custom dataset classes compliant to the PyTorch standard.</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-
-
-          </div>
-          
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="index.html">PySegCNN</a></h1>
-
-
-
-
-
-
-
-
-<h3>Navigation</h3>
-<p class="caption"><span class="caption-text">Table of contents:</span></p>
-<ul class="current">
-<li class="toctree-l1 current"><a class="current reference internal" href="#">Modules</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="modules/pysegcnn.core.cli.html">pysegcnn.core.cli</a></li>
-<li class="toctree-l2"><a class="reference internal" href="modules/pysegcnn.core.constants.html">pysegcnn.core.constants</a></li>
-<li class="toctree-l2"><a class="reference internal" href="modules/pysegcnn.core.dataset.html">pysegcnn.core.dataset</a></li>
-</ul>
-</li>
-</ul>
-
-<div class="relations">
-<h3>Related Topics</h3>
-<ul>
-  <li><a href="index.html">Documentation overview</a><ul>
-      <li>Previous: <a href="index.html" title="previous chapter">PySegCNN: Image segmentation with convolutional neural networks in Python</a></li>
-      <li>Next: <a href="modules/pysegcnn.core.cli.html" title="next chapter">pysegcnn.core.cli</a></li>
-  </ul></li>
-</ul>
-</div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Quick search</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" />
-      <input type="submit" value="Go" />
-    </form>
-    </div>
-</div>
-<script>$('#searchbox').show(0);</script>
-
-
-
-
-
-
-
-
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="footer">
-      &copy;2020, Daniel Frisinghelli.
-      
-      |
-      Powered by <a href="http://sphinx-doc.org/">Sphinx 3.2.1</a>
-      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
-      
-      |
-      <a href="_sources/modules.rst.txt"
-          rel="nofollow">Page source</a>
-    </div>
-
-    
-
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/modules/pysegcnn.core.cli.html b/docs/_build/html/modules/pysegcnn.core.cli.html
deleted file mode 100644
index 9c3e68b..0000000
--- a/docs/_build/html/modules/pysegcnn.core.cli.html
+++ /dev/null
@@ -1,137 +0,0 @@
-
-<!DOCTYPE html>
-
-<html>
-  <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <title>pysegcnn.core.cli &#8212; PySegCNN  documentation</title>
-    <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
-    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-    <script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-    <script src="../_static/jquery.js"></script>
-    <script src="../_static/underscore.js"></script>
-    <script src="../_static/doctools.js"></script>
-    <script src="../_static/language_data.js"></script>
-    <link rel="index" title="Index" href="../genindex.html" />
-    <link rel="search" title="Search" href="../search.html" />
-    <link rel="next" title="pysegcnn.core.constants" href="pysegcnn.core.constants.html" />
-    <link rel="prev" title="Modules" href="../modules.html" />
-   
-  <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
-  
-  
-  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
-  </head><body>
-  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          
-
-          <div class="body" role="main">
-            
-  <div class="section" id="module-pysegcnn.core.cli">
-<span id="pysegcnn-core-cli"></span><h1>pysegcnn.core.cli<a class="headerlink" href="#module-pysegcnn.core.cli" title="Permalink to this headline">¶</a></h1>
-<p>Command line interface parsers.</p>
-<div class="section" id="license">
-<h2>License<a class="headerlink" href="#license" title="Permalink to this headline">¶</a></h2>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-<p class="rubric">Functions</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">structure_parser</span></code>()</p></td>
-<td><p>Command line argument parser to standardize dataset structure.</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-</div>
-
-
-          </div>
-          
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="../index.html">PySegCNN</a></h1>
-
-
-
-
-
-
-
-
-<h3>Navigation</h3>
-<p class="caption"><span class="caption-text">Table of contents:</span></p>
-<ul class="current">
-<li class="toctree-l1 current"><a class="reference internal" href="../modules.html">Modules</a><ul class="current">
-<li class="toctree-l2 current"><a class="current reference internal" href="#">pysegcnn.core.cli</a></li>
-<li class="toctree-l2"><a class="reference internal" href="pysegcnn.core.constants.html">pysegcnn.core.constants</a></li>
-<li class="toctree-l2"><a class="reference internal" href="pysegcnn.core.dataset.html">pysegcnn.core.dataset</a></li>
-</ul>
-</li>
-</ul>
-
-<div class="relations">
-<h3>Related Topics</h3>
-<ul>
-  <li><a href="../index.html">Documentation overview</a><ul>
-  <li><a href="../modules.html">Modules</a><ul>
-      <li>Previous: <a href="../modules.html" title="previous chapter">Modules</a></li>
-      <li>Next: <a href="pysegcnn.core.constants.html" title="next chapter">pysegcnn.core.constants</a></li>
-  </ul></li>
-  </ul></li>
-</ul>
-</div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Quick search</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="../search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" />
-      <input type="submit" value="Go" />
-    </form>
-    </div>
-</div>
-<script>$('#searchbox').show(0);</script>
-
-
-
-
-
-
-
-
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="footer">
-      &copy;2020, Daniel Frisinghelli.
-      
-      |
-      Powered by <a href="http://sphinx-doc.org/">Sphinx 3.2.1</a>
-      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
-      
-      |
-      <a href="../_sources/modules/pysegcnn.core.cli.rst.txt"
-          rel="nofollow">Page source</a>
-    </div>
-
-    
-
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/modules/pysegcnn.core.constants.html b/docs/_build/html/modules/pysegcnn.core.constants.html
deleted file mode 100644
index 84a61df..0000000
--- a/docs/_build/html/modules/pysegcnn.core.constants.html
+++ /dev/null
@@ -1,152 +0,0 @@
-
-<!DOCTYPE html>
-
-<html>
-  <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <title>pysegcnn.core.constants &#8212; PySegCNN  documentation</title>
-    <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
-    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-    <script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-    <script src="../_static/jquery.js"></script>
-    <script src="../_static/underscore.js"></script>
-    <script src="../_static/doctools.js"></script>
-    <script src="../_static/language_data.js"></script>
-    <link rel="index" title="Index" href="../genindex.html" />
-    <link rel="search" title="Search" href="../search.html" />
-    <link rel="next" title="pysegcnn.core.dataset" href="pysegcnn.core.dataset.html" />
-    <link rel="prev" title="pysegcnn.core.cli" href="pysegcnn.core.cli.html" />
-   
-  <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
-  
-  
-  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
-  </head><body>
-  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          
-
-          <div class="body" role="main">
-            
-  <div class="section" id="module-pysegcnn.core.constants">
-<span id="pysegcnn-core-constants"></span><h1>pysegcnn.core.constants<a class="headerlink" href="#module-pysegcnn.core.constants" title="Permalink to this headline">¶</a></h1>
-<p>A collection of constant values.</p>
-<div class="section" id="license">
-<h2>License<a class="headerlink" href="#license" title="Permalink to this headline">¶</a></h2>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-<p class="rubric">Classes</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">Cloud95Labels</span></code>(value)</p></td>
-<td><p>Class labels of the <a href="#id1"><span class="problematic" id="id2">`Cloud-95`_</span></a> dataset.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">Label</span></code>(value)</p></td>
-<td><p>Generic enumeration for class labels.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">Landsat8</span></code>(value)</p></td>
-<td><p>The spectral bands of the Landsat 8 sensors.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProSnowLabels</span></code>(value)</p></td>
-<td><p>Class labels of the ProSnow datasets.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">Sentinel2</span></code>(value)</p></td>
-<td><p>The spectral bands of the Sentinel-2 MultiSpectral Instrument (MSI).</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">SparcsLabels</span></code>(value)</p></td>
-<td><p>Class labels of the <a href="#id3"><span class="problematic" id="id4">`Sparcs`_</span></a> dataset.</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-</div>
-
-
-          </div>
-          
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="../index.html">PySegCNN</a></h1>
-
-
-
-
-
-
-
-
-<h3>Navigation</h3>
-<p class="caption"><span class="caption-text">Table of contents:</span></p>
-<ul class="current">
-<li class="toctree-l1 current"><a class="reference internal" href="../modules.html">Modules</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="pysegcnn.core.cli.html">pysegcnn.core.cli</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">pysegcnn.core.constants</a></li>
-<li class="toctree-l2"><a class="reference internal" href="pysegcnn.core.dataset.html">pysegcnn.core.dataset</a></li>
-</ul>
-</li>
-</ul>
-
-<div class="relations">
-<h3>Related Topics</h3>
-<ul>
-  <li><a href="../index.html">Documentation overview</a><ul>
-  <li><a href="../modules.html">Modules</a><ul>
-      <li>Previous: <a href="pysegcnn.core.cli.html" title="previous chapter">pysegcnn.core.cli</a></li>
-      <li>Next: <a href="pysegcnn.core.dataset.html" title="next chapter">pysegcnn.core.dataset</a></li>
-  </ul></li>
-  </ul></li>
-</ul>
-</div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Quick search</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="../search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" />
-      <input type="submit" value="Go" />
-    </form>
-    </div>
-</div>
-<script>$('#searchbox').show(0);</script>
-
-
-
-
-
-
-
-
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="footer">
-      &copy;2020, Daniel Frisinghelli.
-      
-      |
-      Powered by <a href="http://sphinx-doc.org/">Sphinx 3.2.1</a>
-      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
-      
-      |
-      <a href="../_sources/modules/pysegcnn.core.constants.rst.txt"
-          rel="nofollow">Page source</a>
-    </div>
-
-    
-
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/modules/pysegcnn.core.dataset.html b/docs/_build/html/modules/pysegcnn.core.dataset.html
deleted file mode 100644
index f80679b..0000000
--- a/docs/_build/html/modules/pysegcnn.core.dataset.html
+++ /dev/null
@@ -1,161 +0,0 @@
-
-<!DOCTYPE html>
-
-<html>
-  <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <title>pysegcnn.core.dataset &#8212; PySegCNN  documentation</title>
-    <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
-    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-    <script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-    <script src="../_static/jquery.js"></script>
-    <script src="../_static/underscore.js"></script>
-    <script src="../_static/doctools.js"></script>
-    <script src="../_static/language_data.js"></script>
-    <link rel="index" title="Index" href="../genindex.html" />
-    <link rel="search" title="Search" href="../search.html" />
-    <link rel="prev" title="pysegcnn.core.constants" href="pysegcnn.core.constants.html" />
-   
-  <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
-  
-  
-  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
-  </head><body>
-  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          
-
-          <div class="body" role="main">
-            
-  <div class="section" id="module-pysegcnn.core.dataset">
-<span id="pysegcnn-core-dataset"></span><h1>pysegcnn.core.dataset<a class="headerlink" href="#module-pysegcnn.core.dataset" title="Permalink to this headline">¶</a></h1>
-<p>Custom dataset classes compliant to the PyTorch standard.</p>
-<p>Each custom dataset should inherit from torch.utils.data.Dataset to benefit
-from the torch.utils.data.DataLoader class, which implements helpful utilities
-during model training.</p>
-<p>For any kind of image-like dataset, inherit the ImageDataset class to create
-your custom dataset.</p>
-<div class="section" id="license">
-<h2>License<a class="headerlink" href="#license" title="Permalink to this headline">¶</a></h2>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-<p class="rubric">Classes</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">Cloud95Dataset</span></code>(root_dir[, use_bands, …])</p></td>
-<td><p>Class for the <a href="#id3"><span class="problematic" id="id4">`Cloud-95`_</span></a> dataset by <a href="#id1"><span class="problematic" id="id2">`</span></a>Mohajerani et al.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">ImageDataset</span></code>(root_dir[, use_bands, …])</p></td>
-<td><p>Base class for multispectral image data.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProSnowDataset</span></code>(root_dir[, use_bands, …])</p></td>
-<td><p>Class for the ProSnow datasets.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProSnowGarmisch</span></code>(root_dir[, use_bands, …])</p></td>
-<td><p>Class for the ProSnow Garmisch dataset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProSnowObergurgl</span></code>(root_dir[, use_bands, …])</p></td>
-<td><p>Class for the ProSnow Obergurgl dataset.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">SparcsDataset</span></code>(root_dir[, use_bands, …])</p></td>
-<td><p>Class for the <a href="#id5"><span class="problematic" id="id6">`Sparcs`_</span></a> dataset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">StandardEoDataset</span></code>(root_dir[, use_bands, …])</p></td>
-<td><p>Base class for standard Earth Observation style datasets.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">SupportedDatasets</span></code>(value)</p></td>
-<td><p>Names and corresponding classes of the implemented datasets.</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-</div>
-
-
-          </div>
-          
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="../index.html">PySegCNN</a></h1>
-
-
-
-
-
-
-
-
-<h3>Navigation</h3>
-<p class="caption"><span class="caption-text">Table of contents:</span></p>
-<ul class="current">
-<li class="toctree-l1 current"><a class="reference internal" href="../modules.html">Modules</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="pysegcnn.core.cli.html">pysegcnn.core.cli</a></li>
-<li class="toctree-l2"><a class="reference internal" href="pysegcnn.core.constants.html">pysegcnn.core.constants</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">pysegcnn.core.dataset</a></li>
-</ul>
-</li>
-</ul>
-
-<div class="relations">
-<h3>Related Topics</h3>
-<ul>
-  <li><a href="../index.html">Documentation overview</a><ul>
-  <li><a href="../modules.html">Modules</a><ul>
-      <li>Previous: <a href="pysegcnn.core.constants.html" title="previous chapter">pysegcnn.core.constants</a></li>
-  </ul></li>
-  </ul></li>
-</ul>
-</div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Quick search</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="../search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" />
-      <input type="submit" value="Go" />
-    </form>
-    </div>
-</div>
-<script>$('#searchbox').show(0);</script>
-
-
-
-
-
-
-
-
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="footer">
-      &copy;2020, Daniel Frisinghelli.
-      
-      |
-      Powered by <a href="http://sphinx-doc.org/">Sphinx 3.2.1</a>
-      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
-      
-      |
-      <a href="../_sources/modules/pysegcnn.core.dataset.rst.txt"
-          rel="nofollow">Page source</a>
-    </div>
-
-    
-
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv
index 3e4fffbf2f1c6de6f65ee83cfcdc7726224a294e..79d2d2a07a6c0f2a6e41a623d9c9a89486f6cb12 100644
GIT binary patch
delta 708
zcmV;#0z3Wl1+fN@d4F=+FciG&E8a|d#hG-bhjL3u4jjTTFq|3HegRKp$(7_L{Cy3E
zAje?qN%WLN+I_ogAiOPi1~;jcNvbp^8MoY^O(sHB*{`2Z&7V;2#;M@Oz&#jM=@joa
zC{c5Z*<I-|AlceNeESX~=7nCbbD7)qdaqlc-Ky+=2~P{Y!GG|SE}bG3m5?I3EV)ii
zc)%8)Bo-BsCTqFOxXzwcM9!}>$f9w1edPt;p*G2*Q0W^Xrc3h~9TbKjGEwsHk8H^c
zq=z_jy+vZ;kmMfa0!8)0Kjun_uxPCjRLR(&!Qv}f#wTuu&}DCynrL8E8eWtFV`86X
zkVS73+Ee}sQ-77ArUyL|{l>>cA_)cl`*hg^p&P{Vk$jecuhEg{H$El|Nht6&a@ho-
z8^r3BENX->$qeng(v(<jqTl$SFeIVXjI?DrERVr4_WLBP=F+?>U6|yd+7u`$5xQi5
znV>*@f;A_X8GeAV*;w%3C}4CCr_%!tru$#n8J4MZ4}WqH^W73Rli6$xheiRl`d)_H
zTuFG(?H1DddqRn7f4~Jutn}f>;T>Y?QT2#AjAZr0zu>3bjZPPh;ET$t`rEQ`=G+d@
z8j&{JU|kTlZDMoQaF)&eyw1gr51N;``ykGz4dY=xg$2H%MwxzcXl3)l_<*(wK1deO
z6$9*bs(&U7<5)<?3-H$Mh~NQap^YrW;l)-5o?u3(TLg2RmIl}F8MPwOeSE1`FaTnK
zT_(&}w+?|HmIarONTW`J0beu=Ee$bVTg3xB!Hl#t)9tw>0{Re)zP$&#8TzEUFh<%~
z>6Y9L9{LcBzB&iH8G1l2jFGlrf~5=VGxQ;t|2;lSck#Ie!_{j>UOx#ouI#QbggTkZ
qrLkOyW)tnoy4R;=_k401qVZ3aYuwK@7lydk&5(t2!u|oD^-ee+@L&f3

delta 645
zcmV;00($+i2J;1wd4FyiF%-P}E1uL|*(jBID7Pl*fkO}iaYpX$E3D$Rx3;$le_w;y
z;4K9FY<dFhnKv_D0poUSa9v7SluBb!amx+b;!&us`u6q7e}r~BE(JFR?!l-|mw2~E
ziJDui?%Id}#l|+`(`Oj5DD-Mo%i6A1JKYBDMpgeyc+&7Srhlgl=@hA~gcQ+5%XMke
z0}l8kv8;$uvVw0>o8m#J@`VsBq{WO*3PKQhRPxW4YQY<%hd6ShMRMYh<R0W4Mfc3#
zW=e^)XoC?{$=smH;!D})C-y_=vNuajG_Y(9Z(4ylvHKZh(c6TMlz+lfRjBDf55&0f
zIgv<0i9eqqn|~m5gIF<=KV;%FIuPT==Y$~%B|f8&O%S?4tc#M3LkLq$(Y`88i8Um~
zjZX?g5?W44%_?9;49>AXlyKl$R`>?SR%5|`qJYso^s9RuOm=VC5mu>k2MQ3g?E=@2
z)9D!YEfkz=gVJ(aD+#Z)-9YJnPnGC)3tWK2PVZm#Cx2<&C^y2Tkj$Ap<EPz@`VBAm
ztg6oat9WO@?iHFB8L|z!Qn?ut{hH@2{Qk`4VuusvZ5<xOan&=v&n7U(U#L-*?;P3%
z<;?hm8xF)ES;GAy!QRRB1g_&)%Do`L+v&XmB7lrg_6ep=?g;SlKBE?Nx{rU#JzN2?
z#3r3)?0&S2LmZYRSKmydL4Sr=G)t|lIbH{~7b3xoRN3hE!U_wQ5RBd(lighVriL&^
z>PvJ>VSj{62u3e%$!@M4PzYnB4o0waro6!=1dDG|bQkX(3_jfM^=oM?7s6MmQ=xFX
fZ)?Yueu&23U9EA~$;_D{;kF+#4_4S;?-nX7ulqif

diff --git a/docs/_build/html/py-modindex.html b/docs/_build/html/py-modindex.html
deleted file mode 100644
index 856c1bb..0000000
--- a/docs/_build/html/py-modindex.html
+++ /dev/null
@@ -1,227 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>Python Module Index &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
-        <script src="_static/jquery.js"></script>
-        <script src="_static/underscore.js"></script>
-        <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="genindex.html" />
-    <link rel="search" title="Search" href="search.html" />
- 
-
-
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul>
-<li class="toctree-l1"><a class="reference internal" href="source/requirements.html">Requirements</a></li>
-<li class="toctree-l1"><a class="reference internal" href="source/installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="source/api.html">API Reference</a></li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
-      <li>Python Module Index</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-
-   <h1>Python Module Index</h1>
-
-   <div class="modindex-jumpbox">
-   <a href="#cap-p"><strong>p</strong></a>
-   </div>
-
-   <table class="indextable modindextable">
-     <tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
-     <tr class="cap" id="cap-p"><td></td><td>
-       <strong>p</strong></td><td></td></tr>
-     <tr>
-       <td><img src="_static/minus.png" class="toggler"
-              id="toggle-1" style="display: none" alt="-" /></td>
-       <td>
-       <code class="xref">pysegcnn</code></td><td>
-       <em></em></td></tr>
-     <tr class="cg-1">
-       <td></td>
-       <td>&#160;&#160;&#160;
-       <a href="source/generated/pysegcnn.core.layers.html#module-pysegcnn.core.layers"><code class="xref">pysegcnn.core.layers</code></a></td><td>
-       <em></em></td></tr>
-     <tr class="cg-1">
-       <td></td>
-       <td>&#160;&#160;&#160;
-       <a href="source/generated/pysegcnn.core.models.html#module-pysegcnn.core.models"><code class="xref">pysegcnn.core.models</code></a></td><td>
-       <em></em></td></tr>
-   </table>
-
-
-           </div>
-           
-          </div>
-          <footer>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/readme.html b/docs/_build/html/readme.html
deleted file mode 100644
index 6e6adb7..0000000
--- a/docs/_build/html/readme.html
+++ /dev/null
@@ -1,209 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>Test &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
-        <script src="_static/jquery.js"></script>
-        <script src="_static/underscore.js"></script>
-        <script src="_static/doctools.js"></script>
-        <script src="_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="genindex.html" />
-    <link rel="search" title="Search" href="search.html" />
-    <link rel="prev" title="&lt;no title&gt;" href="index.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul class="current">
-<li class="toctree-l1 current"><a class="current reference internal" href="#">Test</a></li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
-        
-      <li>Test</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-            
-            <a href="_sources/readme.rst.txt" rel="nofollow"> View page source</a>
-          
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <div class="section" id="test">
-<h1>Test<a class="headerlink" href="#test" title="Permalink to this headline">¶</a></h1>
-</div>
-
-
-           </div>
-           
-          </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-      
-        <a href="index.html" class="btn btn-neutral float-left" title="&lt;no title&gt;" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
-    </div>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js
index 9287d50..121f50f 100644
--- a/docs/_build/html/searchindex.js
+++ b/docs/_build/html/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["index","source/api","source/generated/pysegcnn.core.dataset.Cloud95Dataset","source/generated/pysegcnn.core.dataset.ImageDataset","source/generated/pysegcnn.core.dataset.SparcsDataset","source/generated/pysegcnn.core.layers.Block","source/generated/pysegcnn.core.layers.Conv2dSame","source/generated/pysegcnn.core.layers.ConvBnReluMaxPool","source/generated/pysegcnn.core.layers.ConvBnReluMaxUnpool","source/generated/pysegcnn.core.layers.ConvBnReluUpsample","source/generated/pysegcnn.core.layers.Decoder","source/generated/pysegcnn.core.layers.DecoderBlock","source/generated/pysegcnn.core.layers.Encoder","source/generated/pysegcnn.core.layers.EncoderBlock","source/generated/pysegcnn.core.models.Network","source/generated/pysegcnn.core.models.UNet","source/installation","source/requirements"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.viewcode":1,sphinx:56},filenames:["index.rst","source\\api.rst","source\\generated\\pysegcnn.core.dataset.Cloud95Dataset.rst","source\\generated\\pysegcnn.core.dataset.ImageDataset.rst","source\\generated\\pysegcnn.core.dataset.SparcsDataset.rst","source\\generated\\pysegcnn.core.layers.Block.rst","source\\generated\\pysegcnn.core.layers.Conv2dSame.rst","source\\generated\\pysegcnn.core.layers.ConvBnReluMaxPool.rst","source\\generated\\pysegcnn.core.layers.ConvBnReluMaxUnpool.rst","source\\generated\\pysegcnn.core.layers.ConvBnReluUpsample.rst","source\\generated\\pysegcnn.core.layers.Decoder.rst","source\\generated\\pysegcnn.core.layers.DecoderBlock.rst","source\\generated\\pysegcnn.core.layers.Encoder.rst","source\\generated\\pysegcnn.core.layers.EncoderBlock.rst","source\\generated\\pysegcnn.core.models.Network.rst","source\\generated\\pysegcnn.core.models.UNet.rst","source\\installation.rst","source\\requirements.rst"],objects:{"pysegcnn.core.dataset":{Cloud95Dataset:[2,0,1,""],ImageDataset:[3,0,1,""],SparcsDataset:[4,0,1,""]},"pysegcnn.core.dataset.Cloud95Dataset":{__init__:[2,1,1,""]},"pysegcnn.core.dataset.ImageDataset":{__init__:[3,1,1,""]},"pysegcnn.core.dataset.SparcsDataset":{__init__:[4,1,1,""]},"pysegcnn.core.layers":{Block:[5,0,1,""],Conv2dSame:[6,0,1,""],ConvBnReluMaxPool:[7,0,1,""],ConvBnReluMaxUnpool:[8,0,1,""],ConvBnReluUpsample:[9,0,1,""],Decoder:[10,0,1,""],DecoderBlock:[11,0,1,""],Encoder:[12,0,1,""],EncoderBlock:[13,0,1,""]},"pysegcnn.core.layers.Block":{__init__:[5,1,1,""]},"pysegcnn.core.layers.Conv2dSame":{__init__:[6,1,1,""]},"pysegcnn.core.layers.ConvBnReluMaxPool":{__init__:[7,1,1,""]},"pysegcnn.core.layers.ConvBnReluMaxUnpool":{__init__:[8,1,1,""]},"pysegcnn.core.layers.ConvBnReluUpsample":{__init__:[9,1,1,""]},"pysegcnn.core.layers.Decoder":{__init__:[10,1,1,""]},"pysegcnn.core.layers.DecoderBlock":{__init__:[11,1,1,""]},"pysegcnn.core.layers.Encoder":{__init__:[12,1,1,""]},"pysegcnn.core.layers.EncoderBlock":{__init__:[13,1,1,""]},"pysegcnn.core.models":{Network:[14,0,1,""],UNet:[15,0,1,""]},"pysegcnn.core.models.Network":{__init__:[14,1,1,""]},"pysegcnn.core.models.UNet":{__init__:[15,1,1,""]}},objnames:{"0":["py","class","Python class"],"1":["py","method","Python method"]},objtypes:{"0":"py:class","1":"py:method"},terms:{"001":[],"08768":[],"10077":[],"1901":[],"2001":[],"2014":[],"2019":[],"2020":2,"2072":[],"2x2":[7,8,15],"4292":[],"4907":[],"case":16,"class":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"default":[2,3,4,16],"enum":[],"final":16,"float":[],"function":1,"import":16,"int":[2,3,4,5,6,7,8,9,10,11,12,13,15],"new":14,"public":0,"return":[2,3,4,5,6,7,8,9,10,11,12,13,14,15],"static":[],"true":[2,3,4,10],"var":[],"while":[0,16],And:17,For:[0,2,3,4],NOT:[],Not:[],The:[0,1,2,3,4,10,12,14,16],These:[],Use:[],Used:[2,3,4],Useful:[2,3,4],__call__:[5,6,7,8,9,10,11,12,13,14,15],__init__:[2,3,4,5,6,7,8,9,10,11,12,13,14,15],_earli:[],_equat:[],_graphic:[],_model:[],_mtl:[],_sampl:[],_subplot:[],_torch:6,abl:16,about:[],abov:16,abs:[],access:[],accord:[],accur:[2,3,4],accuraci:[],accuracy_funct:[],acknowledg:[],activ:16,adam:[],add:16,added:[],addit:[5,6,7,8,9,10,11,12,13,15],adjust:[],advanc:[],aerosol:[],after:16,algorithm:[],all:[2,3,4,16,17],along:[],alpha:[],also:[],altern:16,among:[],amount:[],angl:[],ani:16,api:0,append:[],appli:[10,15],arbitrari:[],architechur:[10,12],architectur:1,archiv:[],arg:6,argument:[5,6,7,8,9,10,11,12,13,15],arrai:[],array_lik:[],artifici:[],arxiv:[],aspx:[],assertionerror:[],assum:[],atmopsher:[],atmospher:[],attribut:[5,6,7,8,9,10,11,12,13,14,15],augment:[2,3,4],autom:[],avail:1,axes:[],axessubplot:[],axi:[],band:[2,3,4],band_1:[],band_2:[],band_n:[],band_name_1:[],band_name_2:[],band_name_n:[],base:[0,3,14],baseconfig:[],bash:[],basic:5,batch:15,batch_siz:[],batchnorm:[7,8,9],befor:[],beginn:[],belong:[],below:16,benefit:[],best:[],better:[],bia:[],blob:[],block:[7,8,9,10,11,12,13,15],blue:[],bolzano:0,bool:[2,3,4,10,15],both:[5,6,7,8,9,10,11,12,13,14,15,17],bottom:[],box:1,bright:[],build:[0,1,16,17],build_sampl:[],cach:[],calcul:6,calibr:[],call:[],can:[16,17],care:17,ccisnow:16,center:[2,3,4],centimet:[],chang:[],channel:[5,6,7,8,9,10,11,12,13,15,16],check:[],check_tile_extend:[],checkpoint:[],checkpoint_st:[],chronolog:[2,3,4],cirru:[],classif:[],classifi:[],clear:[],cli:[],clone:16,cloud95:[],cloud95dataset:[],cloud95label:[],cloud:2,cmap:[],code:[0,16],collect:[],color:[],colormap:[],column:[],com:0,command:16,common:[],complet:[],compliant:[1,3],compos:[2,3,4],compose_scen:[],composit:[],compsit:[],comput:[],concaten:[],conda:17,conf_mat:[],config:16,configur:[],confus:[],connect:[10,15],consid:[],constant:[2,3,4],constrast:[],construct:[],contact:[],contain:[],content:[],contrast:[],contrast_stretch:[],contributor:[],control:[],conv2d:6,conv2dsam:[5,7,8,9,10,11,12,13,15],conv:[],conv_bn_relu:[],convbnrelumaxpool:12,convbnrelumaxunpool:10,convbnreluupsampl:[],convent:[2,3,4],convers:[],convert:[],convolut:[1,5,6,7,8,9,10,11,12,13,15],convolv:6,copi:16,copyright:[],core:[],corner:[],correctli:[],correspond:[2,3,4],counter:[],cpu:[],creat:16,criterion:[],crossentropi:[],crossentropyloss:[],cuda:[],current:16,custom:1,customsubset:[],cval:[],dai:[],daniel:0,darkblu:[],data:[2,3,4],data_loading_tutori:[],dataclass:[],dataload:3,dataset:[],dataset_config:[],dataset_nam:[],datasetconfig:[],date:[],date_scene_split:[],dateformat:[],datesplit:[],datetim:[],decod:[11,12,15],decoderblock:10,decreas:[],deep:0,defaul:[],defin:[10,12,16],degre:[],delta:[],depend:16,depth:[10,12],descent:[],describ:[],descript:[],design:0,destack:[],destack_tiff:[],detail:[],determin:[10,12],develop:0,dict:[5,6,7,8,9,10,11,12,13,15],dictconfig:[],dictionari:[],did:[],digit:[],digiti:[],dilat:6,dimens:6,directli:[],directori:[2,3,4,16],disabl:[],disjoint:[],disk:[],distinct:[2,3,4],distribut:[],divid:[2,3,4],divis:[2,3,4],doc:6,document:17,doe:5,doi:[],download:[],downsampl:[],doy2dat:[],drop:[],dtype:[],dure:3,each:[2,3,4,10,12,14,15],earli:[],early_stop:[],earlystop:[],earth:0,easili:[],edu:[],either:[],element:[10,12],els:[],empti:[],enabl:3,enc_cach:[],encod:[10,13,15],encoderblock:12,end:[],entir:[],enumer:[],env:16,environ:17,epoch:[],equal:[],equat:[],error:[],etc:[],eurac:0,eval:[],eval_config:[],evalconfig:[],evalu:[],evenli:[2,3,4],exampl:[10,12],exce:[],except:16,exclud:[],exist:[],explicitli:0,express:[2,3,4],extend:[],extens:[],extra:[],extra_repr:[],extract:[],extract_arch:[],factor:[],factori:[],fals:[2,3,4],fcc:[],featur:[],feed:[],fifth:[],fig:[],figsiz:[],figur:[],file:[2,3,4,14,15,16,17],filenam:[],filenotfounderror:[],filter:[10,12,15],first:[10,12,16],fit:[],flip:[],fliplr:[],flipud:[],flood:[],folder:[],follow:[1,15,16],forg:16,format:[],forward:6,found:[],four:[],fraction:[],framework:0,freez:[],frisinghelli:0,from:[3,10,15,16],fulli:0,further:0,furthermor:3,futur:0,garmisch:[],gaussian:[],gdal:17,gener:[0,1,2,3,4,6,10,12,14],get:[],get_label:[],get_num_thread:[],get_radiometric_const:[],get_sensor:[],get_siz:[],git:16,github:[],gitlab:16,given:6,gmail:0,gnu:0,gov:[],gradient:[],graphic:[],greater:[],green:[],grei:[],ground:[2,3,4],group:[],gt_pattern:[2,3,4],guid:16,handi:3,handl:[],hardwar:16,has:[6,10,12],have:16,hay:[],heavili:16,height:[],help:[2,3,4],here:[16,17],horizont:[],host:[],how:[],howev:[],html:6,http:[6,16],hugh:[],idea:0,identifi:[],ids:[],idx:[],imag:[2,3,4,10,12,15],imagedataset:[],imageri:0,img2np:[],img_siz:[],implement:[1,10,12,14,15],improv:[],in_channel:[5,6,7,8,9,11,13,15],includ:[],increas:[],index:[],indic:[],inf:16,infer:[],inform:0,infrar:[],inherit:[3,14],init_dataset:[],init_log:[],init_loss_funct:[],init_model:[],init_optim:[],init_st:[],init_str:[],initi:[2,3,4,5,6,7,8,9,10,11,12,13,14,15],initili:[],inpath:[],input:[2,3,4,5,6,7,8,9,10,11,12,13,15],instal:[0,17],instanc:[2,3,4,5],instanci:[10,12],instead:[],institut:0,instruct:16,instrument:[],integ:[],interfac:[],intermedi:[],intern:[5,6,7,8,9,10,11,12,13,14,15],interpol:[],interpret:16,invari:[],invarianttransform:[],is_divis:[],item:[2,3,4],item_in_enum:[],its:6,kei:[],kernel:6,kernel_s:6,keyword:[6,7,8,15],kind:[],kwarg:[5,6,7,8,9,10,11,12,13,15],label:[2,3,4],land:[],landsat8:[],landsat:[],landsat_radiometric_calibr:[],last:[],later:[],latest:[],launch:[],layer:15,learn:0,left:[],len:[],length:[10,12],level:[],licens:[],lightblu:[],lightgreen:[],like:[],line:16,linear:[],linux:17,list:[1,2,3,4,6,10,12,15,17],load:[],load_checkpoint:[],loader:[],local:[],log:[],log_conf:[],logconfig:[],logfil:[],logging_config:[],loss:[],loss_funct:[],loss_nam:[],machin:[0,16],mai:16,main:[],mainli:[],make:[],manag:[],master:[],match:[2,3,4],matplotlib:17,matrix:[],max:[7,8,15],max_pool2d:[],max_unpool2d:[],maxima:[],maximum:[],mdpi:[],mean:[],measur:[],met:[],metadata:[],method:[2,3,4,5,6,7,8,9,10,11,12,13,14,15],metric:[],min:[],min_delta:[],mini:[],miniconda:[],minimum:[],mode:[],model:[3,10,12],model_config:[],model_dataset_optimizer_splitmode_splitparams_tilesize_batchsize_band:[],model_nam:[],model_st:[],modelconfig:[],modifi:15,modul:[5,6,7,8,9,10,11,12,13,14,15],mohajerani:2,more:[],mountain:[],move:[],msi:[],multispectr:[0,1,3],name:[2,3,4,16],navig:16,nclass:15,ncol:[],ndarrai:[],nearest:9,need:[],neighbor:9,nest:[],net:15,network:[],networktrain:[],neural:[],nir:[],nli:[],nnir:[],nois:[],none:[2,3,4,5,6,7,8,9,10,11,12,13,14,15],norm:[],normal:15,note:[],notimplementederror:[],now:[],nrow:[],nthread:[],ntile:[],number:[5,6,7,8,9,10,11,12,13,15],numpi:17,obergurgl:[],object:[],observ:0,offici:16,oli:[],onc:16,one:[],onli:[2,3,4],open:1,oper:15,optim:[],optim_nam:[],option:[2,3,4],order:[],org:6,origin:[2,3,4],otherwis:0,out:1,out_channel:[5,6,7,8,9,11,13],outpath:[],output:[5,6,7,8,9,11,13],output_pad:[],over:[],overwrit:[],overwritten:[],packag:[0,17],pad:[2,3,4,6],padding_mod:[],page:1,pair:[],pairwis:[],pairwise_disjoint:[],pan:[],paramet:[2,3,4,5,6,7,8,9,10,11,12,13,15],pars:[],parse_landsat_scen:[],parse_scene_id:[],parse_sentinel2_scen:[],parser:[],part:0,pass:[5,6,7,8,9,10,11,12,13,15],path:[2,3,4],pathlib:[],patienc:[],pattern:[],percentil:[],perform:[],pip:16,pixel:[],plane:[],pleas:0,plot:[],plot_band:[],plot_confusion_matrix:[],plot_loss:[],plot_sampl:[],plot_scen:[],point:[],pool:7,posit:6,possibl:[],precis:[],predict:[],predict_sampl:[],predict_scen:[],preprocess:[],preserv:6,pretrain:[],pretrained_model:[],previou:[],primarili:0,print:[],probabl:[],procedur:[],process:[],product:[],project:[],propag:[],properti:[],prosnow:[],prosnowdataset:[],prosnowgarmisch:[],prosnowlabel:[],prosnowobergurgl:[],provid:16,publicli:[],pure:17,pyplot:[],pysegcnn:[1,17],pytest:17,python:[16,17],pytorch:[0,1,3,6,15,17],quit:[],radianc:[],radiometr:[],rais:5,random:[2,3,4],random_scene_split:[],random_tile_split:[],randomli:[],randomscenesplit:[],randomsplit:[],randomsubset:[],randomtilesplit:[],rate:[],ratio:[],raw:[],read:[],read_landsat_metadata:[],read_scen:[],readm:[],recal:[],recommend:16,reconstruct:[],reconstruct_scen:[],rectifi:[],red:[],refer:0,reflect:[],regur:[2,3,4],relu:[7,8,9],remain:[],remot:[],remov:[],remove_raw:[],remsen:16,repositori:[0,16],repres:[],represent:[],reproduc:[2,3,4],requir:[0,16],rescal:[],research:0,reset_paramet:6,reshap:[],resourc:[],respect:[],restructur:[],result:[],resum:[],retriev:[],right:[],root:[2,3,4,16],root_dir:[2,3,4],rotat:[],row:[],run:16,running_mean:[],saeedi:2,same:[6,10,12],same_pad:[],sampl:[2,3,4,16],satellit:0,save:[],save_st:[],scene:[2,3,4],scene_data:[],scene_id:[],scene_id_1:[],scene_id_1_b1:[],scene_id_1_b2:[],scene_id_1_bn:[],scene_id_2:[],scene_id_2_b1:[],scene_id_2_b2:[],scene_id_2_bn:[],scene_id_n:[],scenesubset:[],score:[],scratch:[],script:[],scriptmodul:[5,6,7,8,9,10,11,12,13,14,15],search:[2,3,4],see:[0,2,3,4,10,12,17],seed:[2,3,4],segment:[],self:[2,3,4],semant:0,sens:[],sensor:[],sentinel2:[],sentinel:[],sequenc:[],sequenti:5,seri:[2,3,4],set:[2,3,4],shadow:[],shadow_over_wat:[],shape:[2,3,4,6],share:[5,6,7,8,9,10,11,12,13,14,15],share_memori:[5,6,7,8,9,10,11,12,13,14,15],ship:17,should:[10,12,16],show:[],sienna:[],signatur:[2,3,4],simpli:[],singl:[],size:[2,3,4,6],skip:[10,15],skip_connect:[],skyblu:[],slightli:15,snow:[],snow_fre:[],some:16,sorourmo:[],sort:[2,3,4],sourc:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],source_path:[],spaceborn:1,sparc:4,sparcsdataset:[],sparcslabel:[],spatial:6,specif:16,specifi:[],speckl:[],spectral:[2,3,4],sphinx:17,sphinx_rtd_them:17,split:[2,3,4],split_config:[],split_mod:[],splitconfig:[],squar:[2,3,4],stabl:6,stack:[],standard:[1,3],standard_eo_structur:[],standardeodataset:[],start:[],state:[0,5,6,7,8,9,10,11,12,13,14,15],state_fil:[],stateconfig:[],steelblu:[],step:[],stop:[],store:[],str:[2,3,4,5,6,7,8,9,10,11,12,13,15],stretch:[],stride:6,string:[],strptime:[],structur:[],structure_pars:[],style:[],sub:[],subclass:[10,12],subdir:[],subdirectori:[2,3,4],submodul:[],subset:[],subset_typ:[],success:16,successfulli:16,suffix:[],sum:[],support:16,supporteddataset:[],supportedlossfunct:[],supportedmodel:[],supportedoptim:[],supportedsplit:[],sure:[],swir1:[],swir2:[],system:16,tabl:[],take:[16,17],target_path:[],task:[],temperatur:[],tensor:[],termin:16,test:[2,3,4],test_d:[],test_dl:[],text:[],than:[],thei:[],therefor:16,thermal:[],thi:[0,1,16],thread:[],threshold:[],tif:[2,3,4],tiff:[],tile:[2,3,4],tile_00:[],tile_01:[],tile_0n:[],tile_10:[],tile_11:[],tile_1n:[],tile_m0:[],tile_m1:[],tile_mn:[],tile_s:[2,3,4],tile_topleft_corn:[],time:[2,3,4],tir1:[],tir:[],to_tensor:[],toa_brt:[],toa_rad:[],toa_ref:[],togeth:[2,3,4],top:[],topleft:[],torch:[3,5,6],torch_se:[],total:[2,3,4],train:[2,3,4],train_d:[],train_dl:[],train_val_test_split:[],trainer:[],training_st:[],transfer:[],transfer_model:[],transform:[2,3,4],transpos:[],tree:[],truth:[2,3,4],ttratio:[],tupl:6,tutori:[],tvratio:[],two:[],txt:[],type:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],typeerror:5,under:0,unet:[10,12],unfreez:[],unibz:16,union:[],unit:[],unpool:[8,15],untransform:[2,3,4],updat:[],upsampl:[9,15],usag:[],use:[2,3,4,16,17],use_band:[2,3,4],used:[2,3,4],useful:[],user:[],usg:[],using:[3,16,17],util:3,valid:[2,3,4],valid_d:[],valid_dl:[],valu:[2,3,4],valueerror:[],vapor:[],varianc:[],variant:[],varianttransform:[],verif:[],verifi:16,version:[2,3,4,15,16],vertic:[],violet:[],vnir1:[],vnir2:[],vnir3:[],wait:[],walkthrough:[],want:[14,17],water:[],websit:16,weight:[],when:[10,12],where:[],whether:[2,3,4,10,15],which:[],white:[],width:[],wiki:[],wikipedia:[],window:17,within:16,work:[0,17],worst:[],wrap:[],wrapper:[],write:[],wrote:0,www:[],y_pred:[],year:[],yellow:[],yml:[16,17],you:[14,16,17],your:16,yyyymmdd:[],zero:[2,3,4]},titles:["PySegCNN: Image segmentation with convolutional neural networks in Python","API Reference","pysegcnn.core.dataset.Cloud95Dataset","pysegcnn.core.dataset.ImageDataset","pysegcnn.core.dataset.SparcsDataset","pysegcnn.core.layers.Block","pysegcnn.core.layers.Conv2dSame","pysegcnn.core.layers.ConvBnReluMaxPool","pysegcnn.core.layers.ConvBnReluMaxUnpool","pysegcnn.core.layers.ConvBnReluUpsample","pysegcnn.core.layers.Decoder","pysegcnn.core.layers.DecoderBlock","pysegcnn.core.layers.Encoder","pysegcnn.core.layers.EncoderBlock","pysegcnn.core.models.Network","pysegcnn.core.models.UNet","Installation","Requirements"],titleterms:{Using:0,acknowledg:0,api:1,architechtur:1,block:5,cli:[],cloud95dataset:2,conda:16,config:[],constant:[],contact:0,content:[],contributor:0,conv2dsam:6,convbnrelumaxpool:7,convbnrelumaxunpool:8,convbnreluupsampl:9,convolut:0,core:[2,3,4,5,6,7,8,9,10,11,12,13,14,15],dataset:[1,2,3,4],decod:[1,10],decoderblock:11,depend:17,document:[],download:16,encod:[1,12],encoderblock:13,environ:16,eval:[],framework:17,graphic:[],imag:[0,1],imagedataset:3,instal:16,layer:[1,5,6,7,8,9,10,11,12,13],learn:17,licens:0,log:[],machin:17,main:[],manag:16,model:[1,14,15],modul:[],network:[0,1,14],neural:[0,1],packag:16,predict:[],preprocess:[],pysegcnn:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],python:0,pytorch:16,raster:17,readm:[],refer:1,requir:17,scipi:17,segment:0,sparc:[],sparcsdataset:4,split:[],stack:17,submodul:[],support:1,test:17,tool:17,train:[],trainer:[],transform:[],unet:15,util:[]}})
\ No newline at end of file
+Search.setIndex({docnames:["index","source/api","source/generated/pysegcnn.core.dataset.Cloud95Dataset","source/generated/pysegcnn.core.dataset.ImageDataset","source/generated/pysegcnn.core.dataset.SparcsDataset","source/generated/pysegcnn.core.dataset.StandardEoDataset","source/generated/pysegcnn.core.layers.Block","source/generated/pysegcnn.core.layers.Conv2dSame","source/generated/pysegcnn.core.layers.ConvBnReluMaxPool","source/generated/pysegcnn.core.layers.ConvBnReluMaxUnpool","source/generated/pysegcnn.core.layers.ConvBnReluUpsample","source/generated/pysegcnn.core.layers.Decoder","source/generated/pysegcnn.core.layers.DecoderBlock","source/generated/pysegcnn.core.layers.Encoder","source/generated/pysegcnn.core.layers.EncoderBlock","source/generated/pysegcnn.core.models.Network","source/generated/pysegcnn.core.models.UNet","source/generated/pysegcnn.core.transforms.Augment","source/installation","source/requirements"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.viewcode":1,sphinx:56},filenames:["index.rst","source\\api.rst","source\\generated\\pysegcnn.core.dataset.Cloud95Dataset.rst","source\\generated\\pysegcnn.core.dataset.ImageDataset.rst","source\\generated\\pysegcnn.core.dataset.SparcsDataset.rst","source\\generated\\pysegcnn.core.dataset.StandardEoDataset.rst","source\\generated\\pysegcnn.core.layers.Block.rst","source\\generated\\pysegcnn.core.layers.Conv2dSame.rst","source\\generated\\pysegcnn.core.layers.ConvBnReluMaxPool.rst","source\\generated\\pysegcnn.core.layers.ConvBnReluMaxUnpool.rst","source\\generated\\pysegcnn.core.layers.ConvBnReluUpsample.rst","source\\generated\\pysegcnn.core.layers.Decoder.rst","source\\generated\\pysegcnn.core.layers.DecoderBlock.rst","source\\generated\\pysegcnn.core.layers.Encoder.rst","source\\generated\\pysegcnn.core.layers.EncoderBlock.rst","source\\generated\\pysegcnn.core.models.Network.rst","source\\generated\\pysegcnn.core.models.UNet.rst","source\\generated\\pysegcnn.core.transforms.Augment.rst","source\\installation.rst","source\\requirements.rst"],objects:{"pysegcnn.core.dataset":{Cloud95Dataset:[2,0,1,""],ImageDataset:[3,0,1,""],SparcsDataset:[4,0,1,""],StandardEoDataset:[5,0,1,""]},"pysegcnn.core.dataset.Cloud95Dataset":{__init__:[2,1,1,""]},"pysegcnn.core.dataset.ImageDataset":{__init__:[3,1,1,""]},"pysegcnn.core.dataset.SparcsDataset":{__init__:[4,1,1,""]},"pysegcnn.core.dataset.StandardEoDataset":{__init__:[5,1,1,""]},"pysegcnn.core.layers":{Block:[6,0,1,""],Conv2dSame:[7,0,1,""],ConvBnReluMaxPool:[8,0,1,""],ConvBnReluMaxUnpool:[9,0,1,""],ConvBnReluUpsample:[10,0,1,""],Decoder:[11,0,1,""],DecoderBlock:[12,0,1,""],Encoder:[13,0,1,""],EncoderBlock:[14,0,1,""]},"pysegcnn.core.layers.Block":{__init__:[6,1,1,""]},"pysegcnn.core.layers.Conv2dSame":{__init__:[7,1,1,""]},"pysegcnn.core.layers.ConvBnReluMaxPool":{__init__:[8,1,1,""]},"pysegcnn.core.layers.ConvBnReluMaxUnpool":{__init__:[9,1,1,""]},"pysegcnn.core.layers.ConvBnReluUpsample":{__init__:[10,1,1,""]},"pysegcnn.core.layers.Decoder":{__init__:[11,1,1,""]},"pysegcnn.core.layers.DecoderBlock":{__init__:[12,1,1,""]},"pysegcnn.core.layers.Encoder":{__init__:[13,1,1,""]},"pysegcnn.core.layers.EncoderBlock":{__init__:[14,1,1,""]},"pysegcnn.core.models":{Network:[15,0,1,""],UNet:[16,0,1,""]},"pysegcnn.core.models.Network":{__init__:[15,1,1,""]},"pysegcnn.core.models.UNet":{__init__:[16,1,1,""]},"pysegcnn.core.transforms":{Augment:[17,0,1,""]},"pysegcnn.core.transforms.Augment":{__init__:[17,1,1,""]}},objnames:{"0":["py","class","Python class"],"1":["py","method","Python method"]},objtypes:{"0":"py:class","1":"py:method"},terms:{"1x1":16,"2014":4,"2020":2,"2x2":[8,9,16],"case":18,"class":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"default":[2,3,4,5,18],"final":18,"function":1,"import":18,"int":[2,3,4,5,6,7,8,9,10,11,12,13,14,16],"new":15,"public":0,"return":[6,8,9,10,12,14,17],"true":[2,3,4,5,11],"while":[0,18],And:19,For:[0,2,3,4,5],The:[0,2,3,4,5,6,7,11,13,15,16,18],Used:[2,3,4,5],Useful:[2,3,4,5],__init__:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],abl:18,abov:[5,18],accur:17,activ:18,add:18,addit:[6,7,8,9,10,11,12,13,14,16],after:18,all:[2,3,4,5,18,19],altern:18,amount:7,ani:18,api:0,appli:[11,16,17],architechur:[11,13],architectur:1,arg:7,argument:[6,7,8,9,10,11,12,13,14,16],attribut:[6,7,8,9,10,11,12,13,14,15,16],augment:[2,3,4,5],avail:1,band:[2,3,4,5],base:[0,3,5,15],basic:6,batch:16,batchnorm:[8,9,10],below:18,block:[8,9,10,11,12,13,14,16],bolzano:0,bool:[2,3,4,5,11,16],both:19,box:1,build:[0,1,18,19],cach:13,calcul:7,can:[5,18,19],care:19,ccisnow:18,center:[2,3,4,5],channel:[6,7,8,9,10,11,12,13,14,16,18],chronolog:[2,3,4,5],classif:16,classifi:16,clone:18,cloud:2,code:[0,18],com:0,command:18,compliant:[1,3],compos:[2,3,4,5],compose_scen:5,conda:19,config:18,connect:[11,16],constant:[2,3,4,5],contain:17,conv2d:7,conv2dsam:[6,8,9,10,11,12,13,14,16],conv:6,convbnrelumaxpool:[11,13],convbnrelumaxunpool:11,convent:[2,3,4,5],convolut:[1,6,7,8,9,10,11,12,13,14,16],convolv:7,copi:18,correspond:[2,3,4,5],creat:18,current:[1,18],custom:1,daniel:0,data:[2,3,4,5],dataload:3,decod:[12,13,16],decoderblock:11,deep:0,defin:[11,13,18],depend:18,depth:[11,13],design:0,determin:[11,13],develop:0,dict:[6,7,8,9,10,11,12,13,14,16],dictionari:13,dilat:7,dimens:7,directli:5,directori:[1,2,3,4,5,18],distinct:[2,3,4,5],divid:[2,3,4,5],divis:[2,3,4,5],document:19,doe:[6,8,9,10,12,14],dure:3,each:[2,3,4,5,11,13,15,16,17],earth:[0,5],element:[11,13],enabl:3,encod:[11,14,16],encoderblock:[11,13],env:18,environ:19,epoch:16,eurac:0,evenli:[2,3,4,5],exampl:[5,11,13],except:18,explicitli:0,express:[2,3,4,5],fals:[2,3,4,5],featur:[11,13],file:[2,3,4,5,15,18,19],filter:[11,13,16],first:[11,13,18],follow:[1,5,16,18],forg:18,framework:0,frisinghelli:0,from:[3,11,16,18],fulli:0,further:0,futur:0,gdal:19,gener:[0,2,3,4,5,11,13,15],git:18,gitlab:18,given:7,gmail:0,gnu:0,ground:[2,3,4,5],gt_pattern:[2,3,4,5],guid:18,handi:3,hardwar:18,has:[7,11,13],have:18,hay:4,heavili:18,help:17,here:[18,19],http:18,hugh:4,idea:0,imag:[1,2,3,4,5,11,13,16],imageri:0,implement:[1,5,11,13,15,16],in_channel:[6,7,8,9,10,12,14,16],indic:13,inf:18,inform:0,inherit:[3,5,15],initi:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],input:[2,3,4,5,6,7,8,9,10,11,12,13,14,16],instal:[0,19],instanc:[2,3,4,5,6,8,9,10,12,14,17],instanci:[11,13],institut:0,instruct:18,intermedi:13,interpret:18,invarianttransform:17,item:[2,3,4,5],its:7,kei:13,kernel:7,kernel_s:7,keyword:[7,16],kwarg:[6,7,8,9,10,11,12,13,14,16],label:[2,3,4,5],layer:16,learn:0,length:[11,13],line:18,linux:19,list:[1,2,3,4,5,7,11,13,16,17,19],machin:[0,18],mai:18,match:[2,3,4,5],matplotlib:19,max:[8,9,13,16],method:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],model:[3,11,13],modifi:16,modulelist:[11,13],mohajerani:2,multispectr:[0,1,3],name:[2,3,4,5,18],navig:18,nclass:16,ndarrai:[11,13],nearest:10,neighbor:10,net:16,nfilter:16,none:[2,3,4,5,15,17],normal:16,number:[6,7,8,9,10,11,12,13,14,16],numpi:[11,13,19],observ:[0,5],offici:18,onc:18,onli:[2,3,4,5],open:1,oper:16,option:[2,3,4,5,11],order:17,origin:[2,3,4,5],otherwis:0,out:1,out_channel:[6,7,8,9,10,12,14],output:[6,7,8,9,10,12,13,14],packag:[0,19],pad:[2,3,4,5,7],pad_height:7,pad_width:7,page:1,paramet:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],part:0,pass:[6,7,8,9,10,11,12,13,14,16],path:[2,3,4,5,15],pathlib:15,pip:18,pleas:0,pool:[8,13],posit:7,preserv:7,primarili:0,provid:18,pure:19,pysegcnn:[1,19],pytest:19,python:[18,19],pytorch:[0,1,3,16,19],rais:[6,8,9,10,12,14],random:[2,3,4,5],recommend:18,refer:0,regur:[2,3,4,5],relu:[8,9,10],remain:5,remsen:18,repositori:[0,18],reproduc:[2,3,4,5],requir:[0,13,18],research:0,root:[2,3,4,5,18],root_dir:[2,3,4,5],run:18,saeedi:2,same:[7,11,13],sampl:[2,3,4,5,18],satellit:0,save:15,scene:[2,3,4,5],scene_id_1:5,scene_id_1_b1:5,scene_id_1_b2:5,scene_id_1_bn:5,scene_id_2:5,scene_id_2_b1:5,scene_id_2_b2:5,scene_id_2_bn:5,scene_id_n:5,search:[2,3,4,5],see:[0,5,11,13,17,19],seed:[2,3,4,5],self:17,semant:0,sequenc:17,sequenti:[6,8,9,10,12,14],seri:[2,3,4,5],set:[2,3,4,5],shape:[2,3,4,5,7],share:5,ship:19,should:[11,13,18],signatur:17,size:[2,3,4,5,7],skip:[11,16],slightli:16,some:[1,18],sort:[2,3,4,5],sourc:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],spaceborn:1,sparc:4,sparcsdataset:5,spatial:7,specif:18,spectral:[2,3,4,5],sphinx:19,sphinx_rtd_them:19,split:[2,3,4,5],squar:[2,3,4,5],standard:[1,3,5],standard_eo_structur:5,state:[0,15],state_fil:15,str:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],stride:7,structur:[1,5],style:5,subclass:[11,13],subdirectori:[2,3,4,5],success:18,successfulli:18,support:[1,18],system:18,take:[18,19],tensor:13,termin:18,test:[2,3,4,5],therefor:18,thi:[0,1,3,5,18],tif:[2,3,4,5],tile:[2,3,4,5],tile_s:[2,3,4,5],time:[2,3,4,5],togeth:[2,3,4,5],torch:[3,6,7,8,9,10,11,12,13,14],total:[2,3,4,5],train:[2,3,4,5,16],transfer:5,transform:[2,3,4,5],truth:[2,3,4,5],tupl:[7,17],type:[17,18],typeerror:[6,8,9,10,12,14],under:0,unet:[11,13],unibz:18,unpool:[9,16],untransform:[2,3,4,5],upsampl:[10,16],use:[2,3,4,5,18,19],use_band:[2,3,4,5],used:[2,3,4,5],using:[18,19],util:[3,5],valid:[2,3,4,5],valu:[2,3,4,5],varianttransform:17,verifi:18,version:[2,3,4,5,18],want:[15,19],websit:18,when:[11,13],where:15,whether:[2,3,4,5,11,16],window:19,within:18,work:[0,19],wrote:0,yml:[18,19],you:[5,15,18,19],your:[5,18],zero:[2,3,4,5]},titles:["PySegCNN: Image segmentation with convolutional neural networks in Python","API Reference","pysegcnn.core.dataset.Cloud95Dataset","pysegcnn.core.dataset.ImageDataset","pysegcnn.core.dataset.SparcsDataset","pysegcnn.core.dataset.StandardEoDataset","pysegcnn.core.layers.Block","pysegcnn.core.layers.Conv2dSame","pysegcnn.core.layers.ConvBnReluMaxPool","pysegcnn.core.layers.ConvBnReluMaxUnpool","pysegcnn.core.layers.ConvBnReluUpsample","pysegcnn.core.layers.Decoder","pysegcnn.core.layers.DecoderBlock","pysegcnn.core.layers.Encoder","pysegcnn.core.layers.EncoderBlock","pysegcnn.core.models.Network","pysegcnn.core.models.UNet","pysegcnn.core.transforms.Augment","Installation","Requirements"],titleterms:{"class":1,Using:0,acknowledg:0,api:1,architechtur:1,augment:17,block:6,cloud95dataset:2,conda:18,contact:0,contributor:0,conv2dsam:7,convbnrelumaxpool:8,convbnrelumaxunpool:9,convbnreluupsampl:10,convolut:0,core:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],dataset:[1,2,3,4,5],decod:[1,11],decoderblock:12,depend:19,download:18,encod:[1,13],encoderblock:14,environ:18,framework:19,gener:1,imag:0,imagedataset:3,instal:18,layer:[1,6,7,8,9,10,11,12,13,14],learn:19,licens:0,machin:19,manag:18,model:[1,15,16],network:[0,1,15],neural:[0,1],packag:18,pysegcnn:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],python:0,pytorch:18,raster:19,refer:1,requir:19,scipi:19,segment:0,sparcsdataset:4,specif:1,stack:19,standardeodataset:5,test:19,tool:19,transform:17,unet:16}})
\ No newline at end of file
diff --git a/docs/_build/html/source/api.html b/docs/_build/html/source/api.html
index 8e5f46e..67f2d14 100644
--- a/docs/_build/html/source/api.html
+++ b/docs/_build/html/source/api.html
@@ -87,11 +87,12 @@
 <li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
 <li class="toctree-l1 current"><a class="current reference internal" href="#">API Reference</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="#dataset">Dataset</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="#image-dataset">Image Dataset</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#generic-classes">Generic classes</a><ul>
 <li class="toctree-l4"><a class="reference internal" href="generated/pysegcnn.core.dataset.ImageDataset.html">pysegcnn.core.dataset.ImageDataset</a></li>
+<li class="toctree-l4"><a class="reference internal" href="generated/pysegcnn.core.dataset.StandardEoDataset.html">pysegcnn.core.dataset.StandardEoDataset</a></li>
 </ul>
 </li>
-<li class="toctree-l3"><a class="reference internal" href="#supported-datasets">Supported datasets</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#specific-classes">Specific classes</a><ul>
 <li class="toctree-l4"><a class="reference internal" href="generated/pysegcnn.core.dataset.SparcsDataset.html">pysegcnn.core.dataset.SparcsDataset</a></li>
 <li class="toctree-l4"><a class="reference internal" href="generated/pysegcnn.core.dataset.Cloud95Dataset.html">pysegcnn.core.dataset.Cloud95Dataset</a></li>
 </ul>
@@ -194,9 +195,9 @@
 <div class="section" id="dataset">
 <h2>Dataset<a class="headerlink" href="#dataset" title="Permalink to this headline">¶</a></h2>
 <p>Custom dataset classes compliant to the PyTorch <a class="reference external" href="https://pytorch.org/docs/stable/data.html">standard</a>.</p>
-<div class="section" id="image-dataset">
-<h3>Image Dataset<a class="headerlink" href="#image-dataset" title="Permalink to this headline">¶</a></h3>
-<p>Generic class to implement <a class="reference external" href="https://pytorch.org/tutorials/beginner/data_loading_tutorial.html">custom datasets</a>.</p>
+<div class="section" id="generic-classes">
+<h3>Generic classes<a class="headerlink" href="#generic-classes" title="Permalink to this headline">¶</a></h3>
+<p>Generic class to implement a <a class="reference external" href="https://pytorch.org/tutorials/beginner/data_loading_tutorial.html">custom dataset</a>.</p>
 <table class="longtable docutils align-default">
 <colgroup>
 <col style="width: 10%" />
@@ -208,11 +209,24 @@
 </tr>
 </tbody>
 </table>
+<p>Generic class to implement a custom dataset following a standard directory
+structure.</p>
+<table class="longtable docutils align-default">
+<colgroup>
+<col style="width: 10%" />
+<col style="width: 90%" />
+</colgroup>
+<tbody>
+<tr class="row-odd"><td><p><a class="reference internal" href="generated/pysegcnn.core.dataset.StandardEoDataset.html#pysegcnn.core.dataset.StandardEoDataset" title="pysegcnn.core.dataset.StandardEoDataset"><code class="xref py py-obj docutils literal notranslate"><span class="pre">core.dataset.StandardEoDataset</span></code></a></p></td>
+<td><p>Base class for standard Earth Observation style datasets.</p></td>
+</tr>
+</tbody>
+</table>
 </div>
-<div class="section" id="supported-datasets">
-<h3>Supported datasets<a class="headerlink" href="#supported-datasets" title="Permalink to this headline">¶</a></h3>
-<p>The following open-source spaceborne multispectral image datasets are supported
-out-of-the-box:</p>
+<div class="section" id="specific-classes">
+<h3>Specific classes<a class="headerlink" href="#specific-classes" title="Permalink to this headline">¶</a></h3>
+<p>Specific classes for some open-source image datasets. Currently, the following
+spaceborne multispectral image datasets are supported out-of-the-box:</p>
 <table class="longtable docutils align-default">
 <colgroup>
 <col style="width: 10%" />
@@ -220,7 +234,7 @@ out-of-the-box:</p>
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="generated/pysegcnn.core.dataset.SparcsDataset.html#pysegcnn.core.dataset.SparcsDataset" title="pysegcnn.core.dataset.SparcsDataset"><code class="xref py py-obj docutils literal notranslate"><span class="pre">core.dataset.SparcsDataset</span></code></a></p></td>
-<td><p>Class for the <a class="reference external" href="https://www.usgs.gov/land-resources/nli/landsat/spatial-procedures-automated-removal-cloud-and-shadow-sparcs-validation">Sparcs</a> dataset.</p></td>
+<td><p>Class for the <a class="reference external" href="https://www.usgs.gov/land-resources/nli/landsat/spatial-procedures-automated-removal-cloud-and-shadow-sparcs-validation">Sparcs</a> dataset by <a class="reference external" href="https://www.mdpi.com/2072-4292/6/6/4907">Hughes &amp; Hayes (2014)</a>.</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="generated/pysegcnn.core.dataset.Cloud95Dataset.html#pysegcnn.core.dataset.Cloud95Dataset" title="pysegcnn.core.dataset.Cloud95Dataset"><code class="xref py py-obj docutils literal notranslate"><span class="pre">core.dataset.Cloud95Dataset</span></code></a></p></td>
 <td><p>Class for the <a class="reference external" href="https://github.com/SorourMo/95-Cloud-An-Extension-to-38-Cloud-Dataset">Cloud-95</a> dataset by <a class="reference external" href="https://arxiv.org/abs/2001.08768">Mohajerani &amp; Saeedi (2020)</a>.</p></td>
@@ -253,7 +267,7 @@ out-of-the-box:</p>
 <td><p>Block of convolution, batchnorm, relu and 2x2 max unpool.</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="generated/pysegcnn.core.layers.ConvBnReluUpsample.html#pysegcnn.core.layers.ConvBnReluUpsample" title="pysegcnn.core.layers.ConvBnReluUpsample"><code class="xref py py-obj docutils literal notranslate"><span class="pre">core.layers.ConvBnReluUpsample</span></code></a></p></td>
-<td><p>Block of convolution, batchnorm, relu and nearest neighbor upsampling.</p></td>
+<td><p>Block of convolution, batchnorm, relu and nearest neighbor upsample.</p></td>
 </tr>
 </tbody>
 </table>
@@ -295,7 +309,7 @@ architecture.</p>
 <td><p>Generic Network class.</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="generated/pysegcnn.core.models.UNet.html#pysegcnn.core.models.UNet" title="pysegcnn.core.models.UNet"><code class="xref py py-obj docutils literal notranslate"><span class="pre">core.models.UNet</span></code></a></p></td>
-<td><p>A PyTorch implementation of <a class="reference external" href="https://arxiv.org/abs/1505.04597">U-Net</a>.</p></td>
+<td><p>A slightly modified implementation of <a class="reference external" href="https://arxiv.org/abs/1505.04597">U-Net</a> in PyTorch.</p></td>
 </tr>
 </tbody>
 </table>
diff --git a/docs/_build/html/source/core.html b/docs/_build/html/source/core.html
deleted file mode 100644
index 18c74c4..0000000
--- a/docs/_build/html/source/core.html
+++ /dev/null
@@ -1,6848 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>core package &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-        <script src="../_static/jquery.js"></script>
-        <script src="../_static/underscore.js"></script>
-        <script src="../_static/doctools.js"></script>
-        <script src="../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../genindex.html" />
-    <link rel="search" title="Search" href="../search.html" />
-    <link rel="next" title="main package" href="main.html" />
-    <link rel="prev" title="pysegcnn" href="modules.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul class="current">
-<li class="toctree-l1 current"><a class="reference internal" href="modules.html">pysegcnn</a><ul class="current">
-<li class="toctree-l2 current"><a class="current reference internal" href="#">core package</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="#submodules">Submodules</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#module-core.cli">core.cli module</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#license">License</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="#module-core.constants">core.constants module</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#id1">License</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="#module-core.dataset">core.dataset module</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#id2">License</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="#module-core.graphics">core.graphics module</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#id4">License</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="#module-core.layers">core.layers module</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#id5">License</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="#module-core.logging">core.logging module</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#id6">License</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="#module-core.models">core.models module</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#id7">License</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="#module-core.predict">core.predict module</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#id8">License</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="#module-core.split">core.split module</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#id9">License</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="#module-core.trainer">core.trainer module</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#id10">License</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="#module-core.transforms">core.transforms module</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#id11">License</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="#module-core.utils">core.utils module</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#id12">License</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="#module-core">Module contents</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="main.html">main package</a></li>
-<li class="toctree-l2"><a class="reference internal" href="preprocessing.html">preprocessing package</a></li>
-</ul>
-</li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-          <li><a href="modules.html">pysegcnn</a> &raquo;</li>
-        
-      <li>core package</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-            
-            <a href="../_sources/source/core.rst.txt" rel="nofollow"> View page source</a>
-          
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <div class="section" id="core-package">
-<h1>core package<a class="headerlink" href="#core-package" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="submodules">
-<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
-</div>
-<div class="section" id="module-core.cli">
-<span id="core-cli-module"></span><h2>core.cli module<a class="headerlink" href="#module-core.cli" title="Permalink to this headline">¶</a></h2>
-<p>Command line interface parsers.</p>
-<div class="section" id="license">
-<h3>License<a class="headerlink" href="#license" title="Permalink to this headline">¶</a></h3>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-<dl class="py function">
-<dt id="core.cli.structure_parser">
-<code class="sig-prename descclassname">core.cli.</code><code class="sig-name descname">structure_parser</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/cli.html#structure_parser"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.cli.structure_parser" title="Permalink to this definition">¶</a></dt>
-<dd><p>Command line argument parser to standardize dataset structure.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p></p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p>None.</p>
-</dd>
-</dl>
-</dd></dl>
-
-</div>
-</div>
-<div class="section" id="module-core.constants">
-<span id="core-constants-module"></span><h2>core.constants module<a class="headerlink" href="#module-core.constants" title="Permalink to this headline">¶</a></h2>
-<p>A collection of constant values.</p>
-<div class="section" id="id1">
-<h3>License<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h3>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-<dl class="py class">
-<dt id="core.constants.Cloud95Labels">
-<em class="property">class </em><code class="sig-prename descclassname">core.constants.</code><code class="sig-name descname">Cloud95Labels</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/constants.html#Cloud95Labels"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.constants.Cloud95Labels" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.constants.Label" title="core.constants.Label"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.constants.Label</span></code></a></p>
-<p>Class labels of the <a class="reference external" href="https://github.com/SorourMo/95-Cloud-An-Extension-to-38-Cloud-Dataset">Cloud-95</a> dataset.</p>
-<dl class="py attribute">
-<dt id="core.constants.Cloud95Labels.Clear">
-<code class="sig-name descname">Clear</code><em class="property"> = (0, 'skyblue')</em><a class="headerlink" href="#core.constants.Cloud95Labels.Clear" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Cloud95Labels.Cloud">
-<code class="sig-name descname">Cloud</code><em class="property"> = (1, 'white')</em><a class="headerlink" href="#core.constants.Cloud95Labels.Cloud" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.constants.Label">
-<em class="property">class </em><code class="sig-prename descclassname">core.constants.</code><code class="sig-name descname">Label</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/constants.html#Label"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.constants.Label" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">enum.Enum</span></code></p>
-<p>Generic enumeration for class labels.</p>
-<dl class="py method">
-<dt id="core.constants.Label.color">
-<em class="property">property </em><code class="sig-name descname">color</code><a class="headerlink" href="#core.constants.Label.color" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return the color to plot a class.</p>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.constants.Label.id">
-<em class="property">property </em><code class="sig-name descname">id</code><a class="headerlink" href="#core.constants.Label.id" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return the value of a class in the ground truth.</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.constants.Landsat8">
-<em class="property">class </em><code class="sig-prename descclassname">core.constants.</code><code class="sig-name descname">Landsat8</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/constants.html#Landsat8"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.constants.Landsat8" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">enum.Enum</span></code></p>
-<p>The spectral bands of the Landsat 8 sensors.</p>
-<dl class="simple">
-<dt>sensors:</dt><dd><ul class="simple">
-<li><p>Operational Land Imager (OLI), (bands 1-9)</p></li>
-<li><p>Thermal Infrared Sensor (TIRS), (bands 10, 11)</p></li>
-</ul>
-</dd>
-</dl>
-<dl class="py attribute">
-<dt id="core.constants.Landsat8.blue">
-<code class="sig-name descname">blue</code><em class="property"> = 2</em><a class="headerlink" href="#core.constants.Landsat8.blue" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Landsat8.cirrus">
-<code class="sig-name descname">cirrus</code><em class="property"> = 9</em><a class="headerlink" href="#core.constants.Landsat8.cirrus" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Landsat8.green">
-<code class="sig-name descname">green</code><em class="property"> = 3</em><a class="headerlink" href="#core.constants.Landsat8.green" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Landsat8.nir">
-<code class="sig-name descname">nir</code><em class="property"> = 5</em><a class="headerlink" href="#core.constants.Landsat8.nir" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Landsat8.pan">
-<code class="sig-name descname">pan</code><em class="property"> = 8</em><a class="headerlink" href="#core.constants.Landsat8.pan" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Landsat8.red">
-<code class="sig-name descname">red</code><em class="property"> = 4</em><a class="headerlink" href="#core.constants.Landsat8.red" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Landsat8.swir1">
-<code class="sig-name descname">swir1</code><em class="property"> = 6</em><a class="headerlink" href="#core.constants.Landsat8.swir1" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Landsat8.swir2">
-<code class="sig-name descname">swir2</code><em class="property"> = 7</em><a class="headerlink" href="#core.constants.Landsat8.swir2" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Landsat8.tir1">
-<code class="sig-name descname">tir1</code><em class="property"> = 10</em><a class="headerlink" href="#core.constants.Landsat8.tir1" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Landsat8.violet">
-<code class="sig-name descname">violet</code><em class="property"> = 1</em><a class="headerlink" href="#core.constants.Landsat8.violet" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.constants.ProSnowLabels">
-<em class="property">class </em><code class="sig-prename descclassname">core.constants.</code><code class="sig-name descname">ProSnowLabels</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/constants.html#ProSnowLabels"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.constants.ProSnowLabels" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.constants.Label" title="core.constants.Label"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.constants.Label</span></code></a></p>
-<p>Class labels of the ProSnow datasets.</p>
-<dl class="py attribute">
-<dt id="core.constants.ProSnowLabels.Cloud">
-<code class="sig-name descname">Cloud</code><em class="property"> = (0, 'white')</em><a class="headerlink" href="#core.constants.ProSnowLabels.Cloud" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.ProSnowLabels.Snow">
-<code class="sig-name descname">Snow</code><em class="property"> = (1, 'lightblue')</em><a class="headerlink" href="#core.constants.ProSnowLabels.Snow" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.ProSnowLabels.Snow_free">
-<code class="sig-name descname">Snow_free</code><em class="property"> = (2, 'sienna')</em><a class="headerlink" href="#core.constants.ProSnowLabels.Snow_free" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.constants.Sentinel2">
-<em class="property">class </em><code class="sig-prename descclassname">core.constants.</code><code class="sig-name descname">Sentinel2</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/constants.html#Sentinel2"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.constants.Sentinel2" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">enum.Enum</span></code></p>
-<p>The spectral bands of the Sentinel-2 MultiSpectral Instrument (MSI).</p>
-<dl class="py attribute">
-<dt id="core.constants.Sentinel2.aerosol">
-<code class="sig-name descname">aerosol</code><em class="property"> = 1</em><a class="headerlink" href="#core.constants.Sentinel2.aerosol" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Sentinel2.blue">
-<code class="sig-name descname">blue</code><em class="property"> = 2</em><a class="headerlink" href="#core.constants.Sentinel2.blue" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Sentinel2.cirrus">
-<code class="sig-name descname">cirrus</code><em class="property"> = 10</em><a class="headerlink" href="#core.constants.Sentinel2.cirrus" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Sentinel2.green">
-<code class="sig-name descname">green</code><em class="property"> = 3</em><a class="headerlink" href="#core.constants.Sentinel2.green" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Sentinel2.nir">
-<code class="sig-name descname">nir</code><em class="property"> = 8</em><a class="headerlink" href="#core.constants.Sentinel2.nir" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Sentinel2.nnir">
-<code class="sig-name descname">nnir</code><em class="property"> = '8A'</em><a class="headerlink" href="#core.constants.Sentinel2.nnir" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Sentinel2.red">
-<code class="sig-name descname">red</code><em class="property"> = 4</em><a class="headerlink" href="#core.constants.Sentinel2.red" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Sentinel2.swir1">
-<code class="sig-name descname">swir1</code><em class="property"> = 11</em><a class="headerlink" href="#core.constants.Sentinel2.swir1" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Sentinel2.swir2">
-<code class="sig-name descname">swir2</code><em class="property"> = 12</em><a class="headerlink" href="#core.constants.Sentinel2.swir2" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Sentinel2.vapor">
-<code class="sig-name descname">vapor</code><em class="property"> = 9</em><a class="headerlink" href="#core.constants.Sentinel2.vapor" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Sentinel2.vnir1">
-<code class="sig-name descname">vnir1</code><em class="property"> = 5</em><a class="headerlink" href="#core.constants.Sentinel2.vnir1" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Sentinel2.vnir2">
-<code class="sig-name descname">vnir2</code><em class="property"> = 6</em><a class="headerlink" href="#core.constants.Sentinel2.vnir2" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.Sentinel2.vnir3">
-<code class="sig-name descname">vnir3</code><em class="property"> = 7</em><a class="headerlink" href="#core.constants.Sentinel2.vnir3" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.constants.SparcsLabels">
-<em class="property">class </em><code class="sig-prename descclassname">core.constants.</code><code class="sig-name descname">SparcsLabels</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/constants.html#SparcsLabels"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.constants.SparcsLabels" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.constants.Label" title="core.constants.Label"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.constants.Label</span></code></a></p>
-<p>Class labels of the <a class="reference external" href="https://www.usgs.gov/land-resources/nli/landsat/spatial-procedures-automated-removal-cloud-and-shadow-sparcs-validation">Sparcs</a> dataset.</p>
-<dl class="py attribute">
-<dt id="core.constants.SparcsLabels.Cloud">
-<code class="sig-name descname">Cloud</code><em class="property"> = (5, 'white')</em><a class="headerlink" href="#core.constants.SparcsLabels.Cloud" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.SparcsLabels.Flooded">
-<code class="sig-name descname">Flooded</code><em class="property"> = (6, 'yellow')</em><a class="headerlink" href="#core.constants.SparcsLabels.Flooded" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.SparcsLabels.Land">
-<code class="sig-name descname">Land</code><em class="property"> = (4, 'sienna')</em><a class="headerlink" href="#core.constants.SparcsLabels.Land" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.SparcsLabels.Shadow">
-<code class="sig-name descname">Shadow</code><em class="property"> = (0, 'grey')</em><a class="headerlink" href="#core.constants.SparcsLabels.Shadow" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.SparcsLabels.Shadow_over_water">
-<code class="sig-name descname">Shadow_over_water</code><em class="property"> = (1, 'darkblue')</em><a class="headerlink" href="#core.constants.SparcsLabels.Shadow_over_water" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.SparcsLabels.Snow">
-<code class="sig-name descname">Snow</code><em class="property"> = (3, 'lightblue')</em><a class="headerlink" href="#core.constants.SparcsLabels.Snow" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.constants.SparcsLabels.Water">
-<code class="sig-name descname">Water</code><em class="property"> = (2, 'blue')</em><a class="headerlink" href="#core.constants.SparcsLabels.Water" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-</div>
-</div>
-<div class="section" id="module-core.dataset">
-<span id="core-dataset-module"></span><h2>core.dataset module<a class="headerlink" href="#module-core.dataset" title="Permalink to this headline">¶</a></h2>
-<p>Custom dataset classes compliant to the PyTorch standard.</p>
-<p>Each custom dataset should inherit from torch.utils.data.Dataset to benefit
-from the torch.utils.data.DataLoader class, which implements helpful utilities
-during model training.</p>
-<p>For any kind of image-like dataset, inherit the ImageDataset class to create
-your custom dataset.</p>
-<div class="section" id="id2">
-<h3>License<a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h3>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-<dl class="py class">
-<dt id="core.dataset.Cloud95Dataset">
-<em class="property">class </em><code class="sig-prename descclassname">core.dataset.</code><code class="sig-name descname">Cloud95Dataset</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">root_dir</span></em>, <em class="sig-param"><span class="n">use_bands</span><span class="o">=</span><span class="default_value">[]</span></em>, <em class="sig-param"><span class="n">tile_size</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">pad</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">gt_pattern</span><span class="o">=</span><span class="default_value">'(.*)gt\\.tif'</span></em>, <em class="sig-param"><span class="n">sort</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">seed</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">transforms</span><span class="o">=</span><span class="default_value">[]</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#Cloud95Dataset"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.Cloud95Dataset" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.dataset.ImageDataset" title="core.dataset.ImageDataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.dataset.ImageDataset</span></code></a></p>
-<p>Class for the <a class="reference external" href="https://github.com/SorourMo/95-Cloud-An-Extension-to-38-Cloud-Dataset">Cloud-95</a> dataset by <a class="reference external" href="https://arxiv.org/abs/2001.08768">Mohajerani et al. (2020)</a>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>root_dir</strong> (<cite>str</cite>) – The root directory, path to the dataset.</p></li>
-<li><p><strong>use_bands</strong> (<cite>list</cite> [<cite>str</cite>], optional) – A list of the spectral bands to use. The default is [].</p></li>
-<li><p><strong>tile_size</strong> (<cite>int</cite> or <cite>None</cite>, optional) – The size of the tiles. If not <cite>None</cite>, each scene is divided into square
-tiles of shape (tile_size, tile_size). The default is None.</p></li>
-<li><p><strong>pad</strong> (<cite>bool</cite>, optional) – Whether to center pad the input image. Set <code class="docutils literal notranslate"><span class="pre">pad</span></code> = True, if the
-images are not evenly divisible by the <code class="docutils literal notranslate"><span class="pre">tile_size</span></code>. The image data is
-padded with a constant padding value of zero. For each image, the
-corresponding ground truth image is padded with a “no data” label.
-The default is False.</p></li>
-<li><p><strong>gt_pattern</strong> (<cite>str</cite>, optional) – A regural expression to match the ground truth naming convention. All
-directories and subdirectories in <code class="docutils literal notranslate"><span class="pre">root_dir</span></code> are searched for files
-matching <code class="docutils literal notranslate"><span class="pre">gt_pattern</span></code>. The default is ‘(.*)gt\.tif’.</p></li>
-<li><p><strong>sort</strong> (<cite>bool</cite>, optional) – Whether to chronologically sort the samples. Useful for time series
-data. The default is False.</p></li>
-<li><p><strong>seed</strong> (<cite>int</cite>, optional) – The random seed. Used to split the dataset into training, validation
-and test set. Useful for reproducibility. The default is 0.</p></li>
-<li><p><strong>transforms</strong> (<cite>list</cite> [<cite>pysegcnn.core.split.Augment</cite>], optional) – List of <cite>pysegcnn.core.split.Augment</cite> instances. Each item in
-<code class="docutils literal notranslate"><span class="pre">transforms</span></code> generates a distinct transformed version of the dataset.
-The total dataset is composed of the original untransformed dataset
-together with each transformed version of it.
-If <code class="docutils literal notranslate"><span class="pre">transforms</span></code> = [], only the original dataset is used.
-The default is [].</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">build_samples</span></code>(scene)</p></td>
-<td><p>Stack the bands of a sample in a single array.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.dataset.Cloud95Dataset.compose_scenes" title="core.dataset.Cloud95Dataset.compose_scenes"><code class="xref py py-obj docutils literal notranslate"><span class="pre">compose_scenes</span></code></a>()</p></td>
-<td><p>Build the list of samples of the dataset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.dataset.Cloud95Dataset.get_labels" title="core.dataset.Cloud95Dataset.get_labels"><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_labels</span></code></a>()</p></td>
-<td><p>Class labels of the Cloud-95 dataset.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.dataset.Cloud95Dataset.get_sensor" title="core.dataset.Cloud95Dataset.get_sensor"><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_sensor</span></code></a>()</p></td>
-<td><p>Landsat 8 bands of the Cloud-95 dataset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.dataset.Cloud95Dataset.get_size" title="core.dataset.Cloud95Dataset.get_size"><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_size</span></code></a>()</p></td>
-<td><p>Image size of the Cloud-95 dataset.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.dataset.Cloud95Dataset.parse_scene_id" title="core.dataset.Cloud95Dataset.parse_scene_id"><code class="xref py py-obj docutils literal notranslate"><span class="pre">parse_scene_id</span></code></a>(scene_id)</p></td>
-<td><p>Parse Sparcs scene identifiers (Landsat 8).</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.dataset.Cloud95Dataset.preprocess" title="core.dataset.Cloud95Dataset.preprocess"><code class="xref py py-obj docutils literal notranslate"><span class="pre">preprocess</span></code></a>(data, gt)</p></td>
-<td><p>Preprocess Cloud-95 dataset images.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">read_scene</span></code>(idx)</p></td>
-<td><p>Read the data of the sample with index <code class="docutils literal notranslate"><span class="pre">idx</span></code>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to_tensor</span></code>(x, dtype)</p></td>
-<td><p>Convert <code class="docutils literal notranslate"><span class="pre">x</span></code> to <cite>torch.Tensor</cite>.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.dataset.Cloud95Dataset.compose_scenes">
-<code class="sig-name descname">compose_scenes</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#Cloud95Dataset.compose_scenes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.Cloud95Dataset.compose_scenes" title="Permalink to this definition">¶</a></dt>
-<dd><p>Build the list of samples of the dataset.</p>
-<p>Each sample is represented by a dictionary.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><p><strong>scenes</strong> –</p>
-<dl class="simple">
-<dt>Each item in <code class="docutils literal notranslate"><span class="pre">scenes</span></code> is a <cite>dict</cite> with keys:</dt><dd><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">'band_name_1'</span></code></dt><dd><p>Path to the file of band_1.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'band_name_2'</span></code></dt><dd><p>Path to the file of band_2.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'band_name_n'</span></code></dt><dd><p>Path to the file of band_n.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'gt'</span></code></dt><dd><p>Path to the ground truth file.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'date'</span></code></dt><dd><p>The date of the sample.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'tile'</span></code></dt><dd><p>The tile id of the sample.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'transform'</span></code></dt><dd><p>The transformation to apply.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'id'</span></code></dt><dd><p>The scene identifier.</p>
-</dd>
-</dl>
-</dd>
-</dl>
-</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>list</cite> [<cite>dict</cite>]</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.dataset.Cloud95Dataset.get_labels">
-<code class="sig-name descname">get_labels</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#Cloud95Dataset.get_labels"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.Cloud95Dataset.get_labels" title="Permalink to this definition">¶</a></dt>
-<dd><p>Class labels of the Cloud-95 dataset.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>labels</strong> – The class labels.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>enum.Enum</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.dataset.Cloud95Dataset.get_sensor">
-<code class="sig-name descname">get_sensor</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#Cloud95Dataset.get_sensor"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.Cloud95Dataset.get_sensor" title="Permalink to this definition">¶</a></dt>
-<dd><p>Landsat 8 bands of the Cloud-95 dataset.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>sensor</strong> – An enumeration of the bands of the sensor.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>enum.Enum</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.dataset.Cloud95Dataset.get_size">
-<code class="sig-name descname">get_size</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#Cloud95Dataset.get_size"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.Cloud95Dataset.get_size" title="Permalink to this definition">¶</a></dt>
-<dd><p>Image size of the Cloud-95 dataset.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>size</strong> – The image size (height, width).</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>tuple</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.dataset.Cloud95Dataset.parse_scene_id">
-<code class="sig-name descname">parse_scene_id</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">scene_id</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#Cloud95Dataset.parse_scene_id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.Cloud95Dataset.parse_scene_id" title="Permalink to this definition">¶</a></dt>
-<dd><p>Parse Sparcs scene identifiers (Landsat 8).</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>scene_id</strong> (<cite>str</cite>) – A scene identifier.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>scene</strong> – A dictionary containing scene metadata. If <cite>None</cite>, <code class="docutils literal notranslate"><span class="pre">scene_id</span></code> is
-not a valid Landsat scene identifier.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>dict</cite> or <cite>None</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.dataset.Cloud95Dataset.preprocess">
-<code class="sig-name descname">preprocess</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">data</span></em>, <em class="sig-param"><span class="n">gt</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#Cloud95Dataset.preprocess"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.Cloud95Dataset.preprocess" title="Permalink to this definition">¶</a></dt>
-<dd><p>Preprocess Cloud-95 dataset images.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>data</strong> (<cite>numpy.ndarray</cite>) – The sample input data.</p></li>
-<li><p><strong>gt</strong> (<cite>numpy.ndarray</cite>) – The sample ground truth.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><ul class="simple">
-<li><p><strong>data</strong> (<cite>numpy.ndarray</cite>) – The preprocessed input data.</p></li>
-<li><p><strong>gt</strong> (<cite>numpy.ndarray</cite>) – The preprocessed ground truth data.</p></li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.dataset.ImageDataset">
-<em class="property">class </em><code class="sig-prename descclassname">core.dataset.</code><code class="sig-name descname">ImageDataset</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">root_dir</span></em>, <em class="sig-param"><span class="n">use_bands</span><span class="o">=</span><span class="default_value">[]</span></em>, <em class="sig-param"><span class="n">tile_size</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">pad</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">gt_pattern</span><span class="o">=</span><span class="default_value">'(.*)gt.tif'</span></em>, <em class="sig-param"><span class="n">sort</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">seed</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">transforms</span><span class="o">=</span><span class="default_value">[]</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#ImageDataset"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.ImageDataset" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.utils.data.dataset.Dataset</span></code></p>
-<p>Base class for multispectral image data.</p>
-<p>Inheriting from <cite>torch.utils.data.Dataset</cite> to be compliant to the PyTorch
-standard. Furthermore, using instances of <cite>torch.utils.data.Dataset</cite>
-enables the use of the handy <cite>torch.utils.data.DataLoader</cite> class during
-model training.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>root_dir</strong> (<cite>str</cite>) – The root directory, path to the dataset.</p></li>
-<li><p><strong>use_bands</strong> (<cite>list</cite> [<cite>str</cite>], optional) – A list of the spectral bands to use. The default is [].</p></li>
-<li><p><strong>tile_size</strong> (<cite>int</cite> or <cite>None</cite>, optional) – The size of the tiles. If not <cite>None</cite>, each scene is divided into square
-tiles of shape (tile_size, tile_size). The default is None.</p></li>
-<li><p><strong>pad</strong> (<cite>bool</cite>, optional) – Whether to center pad the input image. Set <code class="docutils literal notranslate"><span class="pre">pad</span></code> = True, if the
-images are not evenly divisible by the <code class="docutils literal notranslate"><span class="pre">tile_size</span></code>. The image data is
-padded with a constant padding value of zero. For each image, the
-corresponding ground truth image is padded with a “no data” label.
-The default is False.</p></li>
-<li><p><strong>gt_pattern</strong> (<cite>str</cite>, optional) – A regural expression to match the ground truth naming convention.
-All directories and subdirectories in <code class="docutils literal notranslate"><span class="pre">root_dir</span></code> are searched for
-files matching <code class="docutils literal notranslate"><span class="pre">gt_pattern</span></code>. The default is ‘(.*)gt\.tif’.</p></li>
-<li><p><strong>sort</strong> (<cite>bool</cite>, optional) – Whether to chronologically sort the samples. Useful for time series
-data. The default is False.</p></li>
-<li><p><strong>seed</strong> (<cite>int</cite>, optional) – The random seed. Used to split the dataset into training, validation
-and test set. Useful for reproducibility. The default is 0.</p></li>
-<li><p><strong>transforms</strong> (<cite>list</cite> [<cite>pysegcnn.core.split.Augment</cite>], optional) – List of <cite>pysegcnn.core.split.Augment</cite> instances. Each item in
-<code class="docutils literal notranslate"><span class="pre">transforms</span></code> generates a distinct transformed version of the dataset.
-The total dataset is composed of the original untransformed dataset
-together with each transformed version of it.
-If <code class="docutils literal notranslate"><span class="pre">transforms</span></code> = [], only the original dataset is used.
-The default is [].</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.dataset.ImageDataset.build_samples" title="core.dataset.ImageDataset.build_samples"><code class="xref py py-obj docutils literal notranslate"><span class="pre">build_samples</span></code></a>(scene)</p></td>
-<td><p>Stack the bands of a sample in a single array.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.dataset.ImageDataset.compose_scenes" title="core.dataset.ImageDataset.compose_scenes"><code class="xref py py-obj docutils literal notranslate"><span class="pre">compose_scenes</span></code></a>()</p></td>
-<td><p>Build the list of samples of the dataset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.dataset.ImageDataset.get_labels" title="core.dataset.ImageDataset.get_labels"><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_labels</span></code></a>()</p></td>
-<td><p>Return an enumeration of the class labels of the dataset.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.dataset.ImageDataset.get_sensor" title="core.dataset.ImageDataset.get_sensor"><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_sensor</span></code></a>()</p></td>
-<td><p>Return an enumeration of the bands of the sensor of the dataset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.dataset.ImageDataset.get_size" title="core.dataset.ImageDataset.get_size"><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_size</span></code></a>()</p></td>
-<td><p>Return the size of the images in the dataset.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.dataset.ImageDataset.parse_scene_id" title="core.dataset.ImageDataset.parse_scene_id"><code class="xref py py-obj docutils literal notranslate"><span class="pre">parse_scene_id</span></code></a>(scene_id)</p></td>
-<td><p>Parse the scene identifier.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.dataset.ImageDataset.preprocess" title="core.dataset.ImageDataset.preprocess"><code class="xref py py-obj docutils literal notranslate"><span class="pre">preprocess</span></code></a>(data, gt)</p></td>
-<td><p>Preprocess a sample before feeding it to a model.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.dataset.ImageDataset.read_scene" title="core.dataset.ImageDataset.read_scene"><code class="xref py py-obj docutils literal notranslate"><span class="pre">read_scene</span></code></a>(idx)</p></td>
-<td><p>Read the data of the sample with index <code class="docutils literal notranslate"><span class="pre">idx</span></code>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.dataset.ImageDataset.to_tensor" title="core.dataset.ImageDataset.to_tensor"><code class="xref py py-obj docutils literal notranslate"><span class="pre">to_tensor</span></code></a>(x, dtype)</p></td>
-<td><p>Convert <code class="docutils literal notranslate"><span class="pre">x</span></code> to <cite>torch.Tensor</cite>.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.dataset.ImageDataset.build_samples">
-<code class="sig-name descname">build_samples</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">scene</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#ImageDataset.build_samples"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.ImageDataset.build_samples" title="Permalink to this definition">¶</a></dt>
-<dd><p>Stack the bands of a sample in a single array.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>scene</strong> (<cite>dict</cite>) – <dl class="simple">
-<dt>The sample data dictionary with keys:</dt><dd><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">'band_name_1'</span></code></dt><dd><p>data of band_1 (<cite>numpy.ndarray</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'band_name_2'</span></code></dt><dd><p>data of band_2 (<cite>numpy.ndarray</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'band_name_n'</span></code></dt><dd><p>data of band_n (<cite>numpy.ndarray</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'gt'</span></code></dt><dd><p>data of the ground truth (<cite>numpy.ndarray</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'date'</span></code></dt><dd><p>The date of the sample.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'tile'</span></code></dt><dd><p>The tile id of the sample.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'transform'</span></code></dt><dd><p>The transformation to apply.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'id'</span></code></dt><dd><p>The scene identifier.</p>
-</dd>
-</dl>
-</dd>
-</dl>
-</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><ul class="simple">
-<li><p><strong>stack</strong> (<cite>numpy.ndarray</cite>) – The input data of the sample.</p></li>
-<li><p><strong>gt</strong> (<em>TYPE</em>) – The ground truth of the sample.</p></li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.dataset.ImageDataset.compose_scenes">
-<code class="sig-name descname">compose_scenes</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#ImageDataset.compose_scenes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.ImageDataset.compose_scenes" title="Permalink to this definition">¶</a></dt>
-<dd><p>Build the list of samples of the dataset.</p>
-<p>Each sample is represented by a dictionary.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Raises</dt>
-<dd class="field-odd"><p><strong>NotImplementedError</strong> – Raised if the <cite>pysegcnn.core.dataset.ImageDataset</cite> class is not
-inherited.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><p><strong>samples</strong> –</p>
-<dl class="simple">
-<dt>Each dictionary representing a sample should have keys:</dt><dd><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">'band_name_1'</span></code></dt><dd><p>Path to the file of band_1.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'band_name_2'</span></code></dt><dd><p>Path to the file of band_2.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'band_name_n'</span></code></dt><dd><p>Path to the file of band_n.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'gt'</span></code></dt><dd><p>Path to the ground truth file.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'date'</span></code></dt><dd><p>The date of the sample.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'tile'</span></code></dt><dd><p>The tile id of the sample.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'transform'</span></code></dt><dd><p>The transformation to apply.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'id'</span></code></dt><dd><p>The scene identifier.</p>
-</dd>
-</dl>
-</dd>
-</dl>
-</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>list</cite> [<cite>dict</cite>]</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.dataset.ImageDataset.get_labels">
-<code class="sig-name descname">get_labels</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#ImageDataset.get_labels"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.ImageDataset.get_labels" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return an enumeration of the class labels of the dataset.</p>
-<p>Examples can be found in <cite>pysegcnn.core.constants</cite>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Raises</dt>
-<dd class="field-odd"><p><strong>NotImplementedError</strong> – Raised if the <cite>pysegcnn.core.dataset.ImageDataset</cite> class is not
-inherited.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>labels</strong> – The class labels.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>enum.Enum</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.dataset.ImageDataset.get_sensor">
-<code class="sig-name descname">get_sensor</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#ImageDataset.get_sensor"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.ImageDataset.get_sensor" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return an enumeration of the bands of the sensor of the dataset.</p>
-<p>Examples can be found in <cite>pysegcnn.core.constants</cite>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Raises</dt>
-<dd class="field-odd"><p><strong>NotImplementedError</strong> – Raised if the <cite>pysegcnn.core.dataset.ImageDataset</cite> class is not
-inherited.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>sensor</strong> – An enumeration of the bands of the sensor.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>enum.Enum</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.dataset.ImageDataset.get_size">
-<code class="sig-name descname">get_size</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#ImageDataset.get_size"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.ImageDataset.get_size" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return the size of the images in the dataset.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Raises</dt>
-<dd class="field-odd"><p><strong>NotImplementedError</strong> – Raised if the <cite>pysegcnn.core.dataset.ImageDataset</cite> class is not
-inherited.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>size</strong> – The image size (height, width).</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>tuple</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.dataset.ImageDataset.parse_scene_id">
-<code class="sig-name descname">parse_scene_id</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">scene_id</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#ImageDataset.parse_scene_id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.ImageDataset.parse_scene_id" title="Permalink to this definition">¶</a></dt>
-<dd><p>Parse the scene identifier.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>scene_id</strong> (<cite>str</cite>) – A scene identifier.</p>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>NotImplementedError</strong> – Raised if the <cite>pysegcnn.core.dataset.ImageDataset</cite> class is not
-inherited.</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>scene</strong> – A dictionary containing scene metadata. If <cite>None</cite>, <code class="docutils literal notranslate"><span class="pre">scene_id</span></code> is
-not a valid scene identifier.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>dict</cite> or <cite>None</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.dataset.ImageDataset.preprocess">
-<code class="sig-name descname">preprocess</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">data</span></em>, <em class="sig-param"><span class="n">gt</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#ImageDataset.preprocess"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.ImageDataset.preprocess" title="Permalink to this definition">¶</a></dt>
-<dd><p>Preprocess a sample before feeding it to a model.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>data</strong> (<cite>numpy.ndarray</cite>) – The sample input data.</p></li>
-<li><p><strong>gt</strong> (<cite>numpy.ndarray</cite>) – The sample ground truth.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>NotImplementedError</strong> – Raised if the <cite>pysegcnn.core.dataset.ImageDataset</cite> class is not
-inherited.</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><ul class="simple">
-<li><p><strong>data</strong> (<cite>numpy.ndarray</cite>) – The preprocessed input data.</p></li>
-<li><p><strong>gt</strong> (<cite>numpy.ndarray</cite>) – The preprocessed ground truth data.</p></li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.dataset.ImageDataset.read_scene">
-<code class="sig-name descname">read_scene</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">idx</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#ImageDataset.read_scene"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.ImageDataset.read_scene" title="Permalink to this definition">¶</a></dt>
-<dd><p>Read the data of the sample with index <code class="docutils literal notranslate"><span class="pre">idx</span></code>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>idx</strong> (<cite>int</cite>) – The index of the sample.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><p><strong>scene_data</strong> –</p>
-<dl class="simple">
-<dt>The sample data dictionary with keys:</dt><dd><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">'band_name_1'</span></code></dt><dd><p>data of band_1 (<cite>numpy.ndarray</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'band_name_2'</span></code></dt><dd><p>data of band_2 (<cite>numpy.ndarray</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'band_name_n'</span></code></dt><dd><p>data of band_n (<cite>numpy.ndarray</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'gt'</span></code></dt><dd><p>data of the ground truth (<cite>numpy.ndarray</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'date'</span></code></dt><dd><p>The date of the sample.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'tile'</span></code></dt><dd><p>The tile id of the sample.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'transform'</span></code></dt><dd><p>The transformation to apply.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'id'</span></code></dt><dd><p>The scene identifier.</p>
-</dd>
-</dl>
-</dd>
-</dl>
-</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>dict</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.dataset.ImageDataset.to_tensor">
-<code class="sig-name descname">to_tensor</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">x</span></em>, <em class="sig-param"><span class="n">dtype</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#ImageDataset.to_tensor"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.ImageDataset.to_tensor" title="Permalink to this definition">¶</a></dt>
-<dd><p>Convert <code class="docutils literal notranslate"><span class="pre">x</span></code> to <cite>torch.Tensor</cite>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>x</strong> (<em>array_like</em>) – The input data.</p></li>
-<li><p><strong>dtype</strong> (<cite>torch.dtype</cite>) – The data type used to convert <code class="docutils literal notranslate"><span class="pre">x</span></code>.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>x</strong> – The input data tensor.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>torch.Tensor</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.dataset.ProSnowDataset">
-<em class="property">class </em><code class="sig-prename descclassname">core.dataset.</code><code class="sig-name descname">ProSnowDataset</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">root_dir</span></em>, <em class="sig-param"><span class="n">use_bands</span><span class="o">=</span><span class="default_value">[]</span></em>, <em class="sig-param"><span class="n">tile_size</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">pad</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">gt_pattern</span><span class="o">=</span><span class="default_value">'(.*)gt\\.tif'</span></em>, <em class="sig-param"><span class="n">sort</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">seed</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">transforms</span><span class="o">=</span><span class="default_value">[]</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#ProSnowDataset"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.ProSnowDataset" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.dataset.StandardEoDataset" title="core.dataset.StandardEoDataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.dataset.StandardEoDataset</span></code></a></p>
-<p>Class for the ProSnow datasets.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>root_dir</strong> (<cite>str</cite>) – The root directory, path to the dataset.</p></li>
-<li><p><strong>use_bands</strong> (<cite>list</cite> [<cite>str</cite>], optional) – A list of the spectral bands to use. The default is [].</p></li>
-<li><p><strong>tile_size</strong> (<cite>int</cite> or <cite>None</cite>, optional) – The size of the tiles. If not <cite>None</cite>, each scene is divided into square
-tiles of shape (tile_size, tile_size). The default is None.</p></li>
-<li><p><strong>pad</strong> (<cite>bool</cite>, optional) – Whether to center pad the input image. Set <code class="docutils literal notranslate"><span class="pre">pad</span></code> = True, if the
-images are not evenly divisible by the <code class="docutils literal notranslate"><span class="pre">tile_size</span></code>. The image data is
-padded with a constant padding value of zero. For each image, the
-corresponding ground truth image is padded with a “no data” label.
-The default is False.</p></li>
-<li><p><strong>gt_pattern</strong> (<cite>str</cite>, optional) – A regural expression to match the ground truth naming convention. All
-directories and subdirectories in <code class="docutils literal notranslate"><span class="pre">root_dir</span></code> are searched for files
-matching <code class="docutils literal notranslate"><span class="pre">gt_pattern</span></code>. The default is ‘(.*)gt\.tif’.</p></li>
-<li><p><strong>sort</strong> (<cite>bool</cite>, optional) – Whether to chronologically sort the samples. Useful for time series
-data. The default is False.</p></li>
-<li><p><strong>seed</strong> (<cite>int</cite>, optional) – The random seed. Used to split the dataset into training, validation
-and test set. Useful for reproducibility. The default is 0.</p></li>
-<li><p><strong>transforms</strong> (<cite>list</cite> [<cite>pysegcnn.core.split.Augment</cite>], optional) – List of <cite>pysegcnn.core.split.Augment</cite> instances. Each item in
-<code class="docutils literal notranslate"><span class="pre">transforms</span></code> generates a distinct transformed version of the dataset.
-The total dataset is composed of the original untransformed dataset
-together with each transformed version of it.
-If <code class="docutils literal notranslate"><span class="pre">transforms</span></code> = [], only the original dataset is used.
-The default is [].</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">build_samples</span></code>(scene)</p></td>
-<td><p>Stack the bands of a sample in a single array.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">compose_scenes</span></code>()</p></td>
-<td><p>Build the list of samples of the dataset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.dataset.ProSnowDataset.get_labels" title="core.dataset.ProSnowDataset.get_labels"><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_labels</span></code></a>()</p></td>
-<td><p>Class labels of the ProSnow datasets.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.dataset.ProSnowDataset.get_sensor" title="core.dataset.ProSnowDataset.get_sensor"><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_sensor</span></code></a>()</p></td>
-<td><p>Sentinel 2 bands of the ProSnow datasets.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_size</span></code>()</p></td>
-<td><p>Return the size of the images in the dataset.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.dataset.ProSnowDataset.parse_scene_id" title="core.dataset.ProSnowDataset.parse_scene_id"><code class="xref py py-obj docutils literal notranslate"><span class="pre">parse_scene_id</span></code></a>(scene_id)</p></td>
-<td><p>Parse ProSnow scene identifiers (Sentinel 2).</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.dataset.ProSnowDataset.preprocess" title="core.dataset.ProSnowDataset.preprocess"><code class="xref py py-obj docutils literal notranslate"><span class="pre">preprocess</span></code></a>(data, gt)</p></td>
-<td><p>Preprocess ProSnow dataset images.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">read_scene</span></code>(idx)</p></td>
-<td><p>Read the data of the sample with index <code class="docutils literal notranslate"><span class="pre">idx</span></code>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to_tensor</span></code>(x, dtype)</p></td>
-<td><p>Convert <code class="docutils literal notranslate"><span class="pre">x</span></code> to <cite>torch.Tensor</cite>.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.dataset.ProSnowDataset.get_labels">
-<code class="sig-name descname">get_labels</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#ProSnowDataset.get_labels"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.ProSnowDataset.get_labels" title="Permalink to this definition">¶</a></dt>
-<dd><p>Class labels of the ProSnow datasets.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>labels</strong> – The class labels.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>enum.Enum</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.dataset.ProSnowDataset.get_sensor">
-<code class="sig-name descname">get_sensor</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#ProSnowDataset.get_sensor"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.ProSnowDataset.get_sensor" title="Permalink to this definition">¶</a></dt>
-<dd><p>Sentinel 2 bands of the ProSnow datasets.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>sensor</strong> – An enumeration of the bands of the sensor.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>enum.Enum</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.dataset.ProSnowDataset.parse_scene_id">
-<code class="sig-name descname">parse_scene_id</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">scene_id</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#ProSnowDataset.parse_scene_id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.ProSnowDataset.parse_scene_id" title="Permalink to this definition">¶</a></dt>
-<dd><p>Parse ProSnow scene identifiers (Sentinel 2).</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>scene_id</strong> (<cite>str</cite>) – A scene identifier.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>scene</strong> – A dictionary containing scene metadata. If <cite>None</cite>, <code class="docutils literal notranslate"><span class="pre">scene_id</span></code> is
-not a valid Sentinel-2 scene identifier.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>dict</cite> or <cite>None</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.dataset.ProSnowDataset.preprocess">
-<code class="sig-name descname">preprocess</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">data</span></em>, <em class="sig-param"><span class="n">gt</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#ProSnowDataset.preprocess"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.ProSnowDataset.preprocess" title="Permalink to this definition">¶</a></dt>
-<dd><p>Preprocess ProSnow dataset images.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>data</strong> (<cite>numpy.ndarray</cite>) – The sample input data.</p></li>
-<li><p><strong>gt</strong> (<cite>numpy.ndarray</cite>) – The sample ground truth.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><ul class="simple">
-<li><p><strong>data</strong> (<cite>numpy.ndarray</cite>) – The preprocessed input data.</p></li>
-<li><p><strong>gt</strong> (<cite>numpy.ndarray</cite>) – The preprocessed ground truth data.</p></li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.dataset.ProSnowGarmisch">
-<em class="property">class </em><code class="sig-prename descclassname">core.dataset.</code><code class="sig-name descname">ProSnowGarmisch</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">root_dir</span></em>, <em class="sig-param"><span class="n">use_bands</span><span class="o">=</span><span class="default_value">[]</span></em>, <em class="sig-param"><span class="n">tile_size</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">pad</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">gt_pattern</span><span class="o">=</span><span class="default_value">'(.*)gt\\.tif'</span></em>, <em class="sig-param"><span class="n">sort</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">seed</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">transforms</span><span class="o">=</span><span class="default_value">[]</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#ProSnowGarmisch"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.ProSnowGarmisch" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.dataset.ProSnowDataset" title="core.dataset.ProSnowDataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.dataset.ProSnowDataset</span></code></a></p>
-<p>Class for the ProSnow Garmisch dataset.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>root_dir</strong> (<cite>str</cite>) – The root directory, path to the dataset.</p></li>
-<li><p><strong>use_bands</strong> (<cite>list</cite> [<cite>str</cite>], optional) – A list of the spectral bands to use. The default is [].</p></li>
-<li><p><strong>tile_size</strong> (<cite>int</cite> or <cite>None</cite>, optional) – The size of the tiles. If not <cite>None</cite>, each scene is divided into square
-tiles of shape (tile_size, tile_size). The default is None.</p></li>
-<li><p><strong>pad</strong> (<cite>bool</cite>, optional) – Whether to center pad the input image. Set <code class="docutils literal notranslate"><span class="pre">pad</span></code> = True, if the
-images are not evenly divisible by the <code class="docutils literal notranslate"><span class="pre">tile_size</span></code>. The image data is
-padded with a constant padding value of zero. For each image, the
-corresponding ground truth image is padded with a “no data” label.
-The default is False.</p></li>
-<li><p><strong>gt_pattern</strong> (<cite>str</cite>, optional) – A regural expression to match the ground truth naming convention. All
-directories and subdirectories in <code class="docutils literal notranslate"><span class="pre">root_dir</span></code> are searched for files
-matching <code class="docutils literal notranslate"><span class="pre">gt_pattern</span></code>. The default is ‘(.*)gt\.tif’.</p></li>
-<li><p><strong>sort</strong> (<cite>bool</cite>, optional) – Whether to chronologically sort the samples. Useful for time series
-data. The default is False.</p></li>
-<li><p><strong>seed</strong> (<cite>int</cite>, optional) – The random seed. Used to split the dataset into training, validation
-and test set. Useful for reproducibility. The default is 0.</p></li>
-<li><p><strong>transforms</strong> (<cite>list</cite> [<cite>pysegcnn.core.split.Augment</cite>], optional) – List of <cite>pysegcnn.core.split.Augment</cite> instances. Each item in
-<code class="docutils literal notranslate"><span class="pre">transforms</span></code> generates a distinct transformed version of the dataset.
-The total dataset is composed of the original untransformed dataset
-together with each transformed version of it.
-If <code class="docutils literal notranslate"><span class="pre">transforms</span></code> = [], only the original dataset is used.
-The default is [].</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">build_samples</span></code>(scene)</p></td>
-<td><p>Stack the bands of a sample in a single array.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">compose_scenes</span></code>()</p></td>
-<td><p>Build the list of samples of the dataset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_labels</span></code>()</p></td>
-<td><p>Class labels of the ProSnow datasets.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_sensor</span></code>()</p></td>
-<td><p>Sentinel 2 bands of the ProSnow datasets.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.dataset.ProSnowGarmisch.get_size" title="core.dataset.ProSnowGarmisch.get_size"><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_size</span></code></a>()</p></td>
-<td><p>Image size of the ProSnow Garmisch dataset.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parse_scene_id</span></code>(scene_id)</p></td>
-<td><p>Parse ProSnow scene identifiers (Sentinel 2).</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">preprocess</span></code>(data, gt)</p></td>
-<td><p>Preprocess ProSnow dataset images.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">read_scene</span></code>(idx)</p></td>
-<td><p>Read the data of the sample with index <code class="docutils literal notranslate"><span class="pre">idx</span></code>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to_tensor</span></code>(x, dtype)</p></td>
-<td><p>Convert <code class="docutils literal notranslate"><span class="pre">x</span></code> to <cite>torch.Tensor</cite>.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.dataset.ProSnowGarmisch.get_size">
-<code class="sig-name descname">get_size</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#ProSnowGarmisch.get_size"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.ProSnowGarmisch.get_size" title="Permalink to this definition">¶</a></dt>
-<dd><p>Image size of the ProSnow Garmisch dataset.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>size</strong> – The image size (height, width).</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>tuple</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.dataset.ProSnowObergurgl">
-<em class="property">class </em><code class="sig-prename descclassname">core.dataset.</code><code class="sig-name descname">ProSnowObergurgl</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">root_dir</span></em>, <em class="sig-param"><span class="n">use_bands</span><span class="o">=</span><span class="default_value">[]</span></em>, <em class="sig-param"><span class="n">tile_size</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">pad</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">gt_pattern</span><span class="o">=</span><span class="default_value">'(.*)gt\\.tif'</span></em>, <em class="sig-param"><span class="n">sort</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">seed</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">transforms</span><span class="o">=</span><span class="default_value">[]</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#ProSnowObergurgl"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.ProSnowObergurgl" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.dataset.ProSnowDataset" title="core.dataset.ProSnowDataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.dataset.ProSnowDataset</span></code></a></p>
-<p>Class for the ProSnow Obergurgl dataset.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>root_dir</strong> (<cite>str</cite>) – The root directory, path to the dataset.</p></li>
-<li><p><strong>use_bands</strong> (<cite>list</cite> [<cite>str</cite>], optional) – A list of the spectral bands to use. The default is [].</p></li>
-<li><p><strong>tile_size</strong> (<cite>int</cite> or <cite>None</cite>, optional) – The size of the tiles. If not <cite>None</cite>, each scene is divided into square
-tiles of shape (tile_size, tile_size). The default is None.</p></li>
-<li><p><strong>pad</strong> (<cite>bool</cite>, optional) – Whether to center pad the input image. Set <code class="docutils literal notranslate"><span class="pre">pad</span></code> = True, if the
-images are not evenly divisible by the <code class="docutils literal notranslate"><span class="pre">tile_size</span></code>. The image data is
-padded with a constant padding value of zero. For each image, the
-corresponding ground truth image is padded with a “no data” label.
-The default is False.</p></li>
-<li><p><strong>gt_pattern</strong> (<cite>str</cite>, optional) – A regural expression to match the ground truth naming convention. All
-directories and subdirectories in <code class="docutils literal notranslate"><span class="pre">root_dir</span></code> are searched for files
-matching <code class="docutils literal notranslate"><span class="pre">gt_pattern</span></code>. The default is ‘(.*)gt\.tif’.</p></li>
-<li><p><strong>sort</strong> (<cite>bool</cite>, optional) – Whether to chronologically sort the samples. Useful for time series
-data. The default is False.</p></li>
-<li><p><strong>seed</strong> (<cite>int</cite>, optional) – The random seed. Used to split the dataset into training, validation
-and test set. Useful for reproducibility. The default is 0.</p></li>
-<li><p><strong>transforms</strong> (<cite>list</cite> [<cite>pysegcnn.core.split.Augment</cite>], optional) – List of <cite>pysegcnn.core.split.Augment</cite> instances. Each item in
-<code class="docutils literal notranslate"><span class="pre">transforms</span></code> generates a distinct transformed version of the dataset.
-The total dataset is composed of the original untransformed dataset
-together with each transformed version of it.
-If <code class="docutils literal notranslate"><span class="pre">transforms</span></code> = [], only the original dataset is used.
-The default is [].</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">build_samples</span></code>(scene)</p></td>
-<td><p>Stack the bands of a sample in a single array.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">compose_scenes</span></code>()</p></td>
-<td><p>Build the list of samples of the dataset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_labels</span></code>()</p></td>
-<td><p>Class labels of the ProSnow datasets.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_sensor</span></code>()</p></td>
-<td><p>Sentinel 2 bands of the ProSnow datasets.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.dataset.ProSnowObergurgl.get_size" title="core.dataset.ProSnowObergurgl.get_size"><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_size</span></code></a>()</p></td>
-<td><p>Image size of the ProSnow Obergurgl dataset.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parse_scene_id</span></code>(scene_id)</p></td>
-<td><p>Parse ProSnow scene identifiers (Sentinel 2).</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">preprocess</span></code>(data, gt)</p></td>
-<td><p>Preprocess ProSnow dataset images.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">read_scene</span></code>(idx)</p></td>
-<td><p>Read the data of the sample with index <code class="docutils literal notranslate"><span class="pre">idx</span></code>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to_tensor</span></code>(x, dtype)</p></td>
-<td><p>Convert <code class="docutils literal notranslate"><span class="pre">x</span></code> to <cite>torch.Tensor</cite>.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.dataset.ProSnowObergurgl.get_size">
-<code class="sig-name descname">get_size</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#ProSnowObergurgl.get_size"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.ProSnowObergurgl.get_size" title="Permalink to this definition">¶</a></dt>
-<dd><p>Image size of the ProSnow Obergurgl dataset.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>size</strong> – The image size (height, width).</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>tuple</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.dataset.SparcsDataset">
-<em class="property">class </em><code class="sig-prename descclassname">core.dataset.</code><code class="sig-name descname">SparcsDataset</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">root_dir</span></em>, <em class="sig-param"><span class="n">use_bands</span><span class="o">=</span><span class="default_value">[]</span></em>, <em class="sig-param"><span class="n">tile_size</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">pad</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">gt_pattern</span><span class="o">=</span><span class="default_value">'(.*)gt\\.tif'</span></em>, <em class="sig-param"><span class="n">sort</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">seed</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">transforms</span><span class="o">=</span><span class="default_value">[]</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#SparcsDataset"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.SparcsDataset" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.dataset.StandardEoDataset" title="core.dataset.StandardEoDataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.dataset.StandardEoDataset</span></code></a></p>
-<p>Class for the <a class="reference external" href="https://www.usgs.gov/land-resources/nli/landsat/spatial-procedures-automated-removal-cloud-and-shadow-sparcs-validation">Sparcs</a> dataset.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>root_dir</strong> (<cite>str</cite>) – The root directory, path to the dataset.</p></li>
-<li><p><strong>use_bands</strong> (<cite>list</cite> [<cite>str</cite>], optional) – A list of the spectral bands to use. The default is [].</p></li>
-<li><p><strong>tile_size</strong> (<cite>int</cite> or <cite>None</cite>, optional) – The size of the tiles. If not <cite>None</cite>, each scene is divided into square
-tiles of shape (tile_size, tile_size). The default is None.</p></li>
-<li><p><strong>pad</strong> (<cite>bool</cite>, optional) – Whether to center pad the input image. Set <code class="docutils literal notranslate"><span class="pre">pad</span></code> = True, if the
-images are not evenly divisible by the <code class="docutils literal notranslate"><span class="pre">tile_size</span></code>. The image data is
-padded with a constant padding value of zero. For each image, the
-corresponding ground truth image is padded with a “no data” label.
-The default is False.</p></li>
-<li><p><strong>gt_pattern</strong> (<cite>str</cite>, optional) – A regural expression to match the ground truth naming convention. All
-directories and subdirectories in <code class="docutils literal notranslate"><span class="pre">root_dir</span></code> are searched for files
-matching <code class="docutils literal notranslate"><span class="pre">gt_pattern</span></code>. The default is ‘(.*)gt\.tif’.</p></li>
-<li><p><strong>sort</strong> (<cite>bool</cite>, optional) – Whether to chronologically sort the samples. Useful for time series
-data. The default is False.</p></li>
-<li><p><strong>seed</strong> (<cite>int</cite>, optional) – The random seed. Used to split the dataset into training, validation
-and test set. Useful for reproducibility. The default is 0.</p></li>
-<li><p><strong>transforms</strong> (<cite>list</cite> [<cite>pysegcnn.core.split.Augment</cite>], optional) – List of <cite>pysegcnn.core.split.Augment</cite> instances. Each item in
-<code class="docutils literal notranslate"><span class="pre">transforms</span></code> generates a distinct transformed version of the dataset.
-The total dataset is composed of the original untransformed dataset
-together with each transformed version of it.
-If <code class="docutils literal notranslate"><span class="pre">transforms</span></code> = [], only the original dataset is used.
-The default is [].</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">build_samples</span></code>(scene)</p></td>
-<td><p>Stack the bands of a sample in a single array.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">compose_scenes</span></code>()</p></td>
-<td><p>Build the list of samples of the dataset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.dataset.SparcsDataset.get_labels" title="core.dataset.SparcsDataset.get_labels"><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_labels</span></code></a>()</p></td>
-<td><p>Class labels of the Sparcs dataset.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.dataset.SparcsDataset.get_sensor" title="core.dataset.SparcsDataset.get_sensor"><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_sensor</span></code></a>()</p></td>
-<td><p>Landsat 8 bands of the Sparcs dataset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.dataset.SparcsDataset.get_size" title="core.dataset.SparcsDataset.get_size"><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_size</span></code></a>()</p></td>
-<td><p>Image size of the Sparcs dataset.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.dataset.SparcsDataset.parse_scene_id" title="core.dataset.SparcsDataset.parse_scene_id"><code class="xref py py-obj docutils literal notranslate"><span class="pre">parse_scene_id</span></code></a>(scene_id)</p></td>
-<td><p>Parse Sparcs scene identifiers (Landsat 8).</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.dataset.SparcsDataset.preprocess" title="core.dataset.SparcsDataset.preprocess"><code class="xref py py-obj docutils literal notranslate"><span class="pre">preprocess</span></code></a>(data, gt)</p></td>
-<td><p>Preprocess Sparcs dataset images.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">read_scene</span></code>(idx)</p></td>
-<td><p>Read the data of the sample with index <code class="docutils literal notranslate"><span class="pre">idx</span></code>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to_tensor</span></code>(x, dtype)</p></td>
-<td><p>Convert <code class="docutils literal notranslate"><span class="pre">x</span></code> to <cite>torch.Tensor</cite>.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.dataset.SparcsDataset.get_labels">
-<code class="sig-name descname">get_labels</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#SparcsDataset.get_labels"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.SparcsDataset.get_labels" title="Permalink to this definition">¶</a></dt>
-<dd><p>Class labels of the Sparcs dataset.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>labels</strong> – The class labels.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>enum.Enum</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.dataset.SparcsDataset.get_sensor">
-<code class="sig-name descname">get_sensor</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#SparcsDataset.get_sensor"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.SparcsDataset.get_sensor" title="Permalink to this definition">¶</a></dt>
-<dd><p>Landsat 8 bands of the Sparcs dataset.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>sensor</strong> – An enumeration of the bands of the sensor.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>enum.Enum</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.dataset.SparcsDataset.get_size">
-<code class="sig-name descname">get_size</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#SparcsDataset.get_size"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.SparcsDataset.get_size" title="Permalink to this definition">¶</a></dt>
-<dd><p>Image size of the Sparcs dataset.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>size</strong> – The image size (height, width).</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>tuple</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.dataset.SparcsDataset.parse_scene_id">
-<code class="sig-name descname">parse_scene_id</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">scene_id</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#SparcsDataset.parse_scene_id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.SparcsDataset.parse_scene_id" title="Permalink to this definition">¶</a></dt>
-<dd><p>Parse Sparcs scene identifiers (Landsat 8).</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>scene_id</strong> (<cite>str</cite>) – A scene identifier.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>scene</strong> – A dictionary containing scene metadata. If <cite>None</cite>, <code class="docutils literal notranslate"><span class="pre">scene_id</span></code> is
-not a valid Landsat scene identifier.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>dict</cite> or <cite>None</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.dataset.SparcsDataset.preprocess">
-<code class="sig-name descname">preprocess</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">data</span></em>, <em class="sig-param"><span class="n">gt</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#SparcsDataset.preprocess"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.SparcsDataset.preprocess" title="Permalink to this definition">¶</a></dt>
-<dd><p>Preprocess Sparcs dataset images.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>data</strong> (<cite>numpy.ndarray</cite>) – The sample input data.</p></li>
-<li><p><strong>gt</strong> (<cite>numpy.ndarray</cite>) – The sample ground truth.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><ul class="simple">
-<li><p><strong>data</strong> (<cite>numpy.ndarray</cite>) – The preprocessed input data.</p></li>
-<li><p><strong>gt</strong> (<cite>numpy.ndarray</cite>) – The preprocessed ground truth data.</p></li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.dataset.StandardEoDataset">
-<em class="property">class </em><code class="sig-prename descclassname">core.dataset.</code><code class="sig-name descname">StandardEoDataset</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">root_dir</span></em>, <em class="sig-param"><span class="n">use_bands</span><span class="o">=</span><span class="default_value">[]</span></em>, <em class="sig-param"><span class="n">tile_size</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">pad</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">gt_pattern</span><span class="o">=</span><span class="default_value">'(.*)gt\\.tif'</span></em>, <em class="sig-param"><span class="n">sort</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">seed</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">transforms</span><span class="o">=</span><span class="default_value">[]</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#StandardEoDataset"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.StandardEoDataset" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.dataset.ImageDataset" title="core.dataset.ImageDataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.dataset.ImageDataset</span></code></a></p>
-<p>Base class for standard Earth Observation style datasets.</p>
-<p><cite>pysegcnn.core.dataset.StandardEoDataset</cite> implements the
-<cite>~pysegcnn.core.dataset.StandardEoDataset.compose_scenes</cite> method for
-datasets with the following directory structure:</p>
-<dl>
-<dt>root_dir/</dt><dd><dl class="simple">
-<dt>scene_id_1/</dt><dd><p>scene_id_1_B1.tif
-scene_id_1_B2.tif
-.
-.
-.
-scene_id_1_BN.tif</p>
-</dd>
-<dt>scene_id_2/</dt><dd><p>scene_id_2_B1.tif
-scene_id_2_B2.tif
-.
-.
-.
-scene_id_2_BN.tif</p>
-</dd>
-</dl>
-<p>.
-scene_id_N/</p>
-<blockquote>
-<div><p>.</p>
-</div></blockquote>
-</dd>
-</dl>
-<p>If your dataset shares this directory structure, you can directly inherit
-<cite>pysegcnn.core.dataset.StandardEoDataset</cite> and implement the remaining
-methods.</p>
-<p>See <cite>pysegcnn.core.dataset.SparcsDataset</cite> for an example.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>root_dir</strong> (<cite>str</cite>) – The root directory, path to the dataset.</p></li>
-<li><p><strong>use_bands</strong> (<cite>list</cite> [<cite>str</cite>], optional) – A list of the spectral bands to use. The default is [].</p></li>
-<li><p><strong>tile_size</strong> (<cite>int</cite> or <cite>None</cite>, optional) – The size of the tiles. If not <cite>None</cite>, each scene is divided into square
-tiles of shape (tile_size, tile_size). The default is None.</p></li>
-<li><p><strong>pad</strong> (<cite>bool</cite>, optional) – Whether to center pad the input image. Set <code class="docutils literal notranslate"><span class="pre">pad</span></code> = True, if the
-images are not evenly divisible by the <code class="docutils literal notranslate"><span class="pre">tile_size</span></code>. The image data is
-padded with a constant padding value of zero. For each image, the
-corresponding ground truth image is padded with a “no data” label.
-The default is False.</p></li>
-<li><p><strong>gt_pattern</strong> (<cite>str</cite>, optional) – A regural expression to match the ground truth naming convention. All
-directories and subdirectories in <code class="docutils literal notranslate"><span class="pre">root_dir</span></code> are searched for files
-matching <code class="docutils literal notranslate"><span class="pre">gt_pattern</span></code>. The default is ‘(.*)gt\.tif’.</p></li>
-<li><p><strong>sort</strong> (<cite>bool</cite>, optional) – Whether to chronologically sort the samples. Useful for time series
-data. The default is False.</p></li>
-<li><p><strong>seed</strong> (<cite>int</cite>, optional) – The random seed. Used to split the dataset into training, validation
-and test set. Useful for reproducibility. The default is 0.</p></li>
-<li><p><strong>transforms</strong> (<cite>list</cite> [<cite>pysegcnn.core.split.Augment</cite>], optional) – List of <cite>pysegcnn.core.split.Augment</cite> instances. Each item in
-<code class="docutils literal notranslate"><span class="pre">transforms</span></code> generates a distinct transformed version of the dataset.
-The total dataset is composed of the original untransformed dataset
-together with each transformed version of it.
-If <code class="docutils literal notranslate"><span class="pre">transforms</span></code> = [], only the original dataset is used.
-The default is [].</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">build_samples</span></code>(scene)</p></td>
-<td><p>Stack the bands of a sample in a single array.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.dataset.StandardEoDataset.compose_scenes" title="core.dataset.StandardEoDataset.compose_scenes"><code class="xref py py-obj docutils literal notranslate"><span class="pre">compose_scenes</span></code></a>()</p></td>
-<td><p>Build the list of samples of the dataset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_labels</span></code>()</p></td>
-<td><p>Return an enumeration of the class labels of the dataset.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_sensor</span></code>()</p></td>
-<td><p>Return an enumeration of the bands of the sensor of the dataset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_size</span></code>()</p></td>
-<td><p>Return the size of the images in the dataset.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parse_scene_id</span></code>(scene_id)</p></td>
-<td><p>Parse the scene identifier.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">preprocess</span></code>(data, gt)</p></td>
-<td><p>Preprocess a sample before feeding it to a model.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">read_scene</span></code>(idx)</p></td>
-<td><p>Read the data of the sample with index <code class="docutils literal notranslate"><span class="pre">idx</span></code>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to_tensor</span></code>(x, dtype)</p></td>
-<td><p>Convert <code class="docutils literal notranslate"><span class="pre">x</span></code> to <cite>torch.Tensor</cite>.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.dataset.StandardEoDataset.compose_scenes">
-<code class="sig-name descname">compose_scenes</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#StandardEoDataset.compose_scenes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.StandardEoDataset.compose_scenes" title="Permalink to this definition">¶</a></dt>
-<dd><p>Build the list of samples of the dataset.</p>
-<p>Each sample is represented by a dictionary.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><p><strong>scenes</strong> –</p>
-<dl class="simple">
-<dt>Each item in <code class="docutils literal notranslate"><span class="pre">scenes</span></code> is a <cite>dict</cite> with keys:</dt><dd><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">'band_name_1'</span></code></dt><dd><p>Path to the file of band_1.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'band_name_2'</span></code></dt><dd><p>Path to the file of band_2.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'band_name_n'</span></code></dt><dd><p>Path to the file of band_n.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'gt'</span></code></dt><dd><p>Path to the ground truth file.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'date'</span></code></dt><dd><p>The date of the sample.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'tile'</span></code></dt><dd><p>The tile id of the sample.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'transform'</span></code></dt><dd><p>The transformation to apply.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'id'</span></code></dt><dd><p>The scene identifier.</p>
-</dd>
-</dl>
-</dd>
-</dl>
-</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>list</cite> [<cite>dict</cite>]</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.dataset.SupportedDatasets">
-<em class="property">class </em><code class="sig-prename descclassname">core.dataset.</code><code class="sig-name descname">SupportedDatasets</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/dataset.html#SupportedDatasets"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.dataset.SupportedDatasets" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">enum.Enum</span></code></p>
-<p>Names and corresponding classes of the implemented datasets.</p>
-<dl class="py attribute">
-<dt id="core.dataset.SupportedDatasets.Cloud95">
-<code class="sig-name descname">Cloud95</code><em class="property"> = &lt;class 'core.dataset.Cloud95Dataset'&gt;</em><a class="headerlink" href="#core.dataset.SupportedDatasets.Cloud95" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.dataset.SupportedDatasets.Garmisch">
-<code class="sig-name descname">Garmisch</code><em class="property"> = &lt;class 'core.dataset.ProSnowGarmisch'&gt;</em><a class="headerlink" href="#core.dataset.SupportedDatasets.Garmisch" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.dataset.SupportedDatasets.Obergurgl">
-<code class="sig-name descname">Obergurgl</code><em class="property"> = &lt;class 'core.dataset.ProSnowObergurgl'&gt;</em><a class="headerlink" href="#core.dataset.SupportedDatasets.Obergurgl" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.dataset.SupportedDatasets.Sparcs">
-<code class="sig-name descname">Sparcs</code><em class="property"> = &lt;class 'core.dataset.SparcsDataset'&gt;</em><a class="headerlink" href="#core.dataset.SupportedDatasets.Sparcs" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-</div>
-</div>
-<div class="section" id="module-core.graphics">
-<span id="core-graphics-module"></span><h2>core.graphics module<a class="headerlink" href="#module-core.graphics" title="Permalink to this headline">¶</a></h2>
-<p>Functions to plot multispectral image data and model output.</p>
-<div class="section" id="id4">
-<h3>License<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h3>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-<dl class="py function">
-<dt id="core.graphics.contrast_stretching">
-<code class="sig-prename descclassname">core.graphics.</code><code class="sig-name descname">contrast_stretching</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">image</span></em>, <em class="sig-param"><span class="n">alpha</span><span class="o">=</span><span class="default_value">5</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/graphics.html#contrast_stretching"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.graphics.contrast_stretching" title="Permalink to this definition">¶</a></dt>
-<dd><p>Apply percentile stretching to an image to increase constrast.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>image</strong> (<cite>numpy.ndarray</cite>) – the input image.</p></li>
-<li><p><strong>alpha</strong> (<cite>int</cite>, optional) – The level of the percentiles. The default is 5.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>norm</strong> – the stretched image.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>numpy.ndarray</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.graphics.plot_confusion_matrix">
-<code class="sig-prename descclassname">core.graphics.</code><code class="sig-name descname">plot_confusion_matrix</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">cm</span></em>, <em class="sig-param"><span class="n">labels</span></em>, <em class="sig-param"><span class="n">normalize</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">figsize</span><span class="o">=</span><span class="default_value">10, 10</span></em>, <em class="sig-param"><span class="n">cmap</span><span class="o">=</span><span class="default_value">'Blues'</span></em>, <em class="sig-param"><span class="n">state</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">outpath</span><span class="o">=</span><span class="default_value">'c:\\eurac\\2020\\git\\pysegcnn\\pysegcnn\\main\\_graphics/'</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/graphics.html#plot_confusion_matrix"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.graphics.plot_confusion_matrix" title="Permalink to this definition">¶</a></dt>
-<dd><p>Plot the confusion matrix <code class="docutils literal notranslate"><span class="pre">cm</span></code>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>cm</strong> (<cite>numpy.ndarray</cite>) – The confusion matrix.</p></li>
-<li><p><strong>labels</strong> (<cite>dict</cite> [<cite>int</cite>, <cite>dict</cite>]) – <p>The label dictionary. The keys are the values of the class labels
-in the ground truth <code class="docutils literal notranslate"><span class="pre">y</span></code>. Each nested <cite>dict</cite> should have keys:</p>
-<blockquote>
-<div><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">'color'</span></code></dt><dd><p>A named color (<cite>str</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'label'</span></code></dt><dd><p>The name of the class label (<cite>str</cite>).</p>
-</dd>
-</dl>
-</div></blockquote>
-</p></li>
-<li><p><strong>normalize</strong> (<cite>bool</cite>, optional) – Whether to normalize the confusion matrix. The default is True.</p></li>
-<li><p><strong>figsize</strong> (<cite>tuple</cite>, optional) – The figure size in centimeters. The default is (10, 10).</p></li>
-<li><p><strong>cmap</strong> (<cite>str</cite>, optional) – A colormap in <cite>matplotlib.pyplot.colormaps()</cite>. The default is ‘Blues’.</p></li>
-<li><p><strong>state</strong> (<cite>str</cite> or <cite>None</cite>, optional) – Filename to save the plot to. <code class="docutils literal notranslate"><span class="pre">state</span></code> should be an existing model
-state file ending with ‘.pt’. The default is None, i.e. plot is not
-saved to disk.</p></li>
-<li><p><strong>outpath</strong> (<cite>str</cite> or <cite>pathlib.Path</cite>, optional) – Output path. The default is ‘pysegcnn/main/_graphics/’.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><ul class="simple">
-<li><p><strong>fig</strong> (<cite>matplotlib.figure.Figure</cite>) – The figure handle.</p></li>
-<li><p><strong>ax</strong> (<cite>matplotlib.axes._subplots.AxesSubplot</cite>) – The axes handle.</p></li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.graphics.plot_loss">
-<code class="sig-prename descclassname">core.graphics.</code><code class="sig-name descname">plot_loss</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">state_file</span></em>, <em class="sig-param"><span class="n">figsize</span><span class="o">=</span><span class="default_value">10, 10</span></em>, <em class="sig-param"><span class="n">step</span><span class="o">=</span><span class="default_value">5</span></em>, <em class="sig-param"><span class="n">colors</span><span class="o">=</span><span class="default_value">['lightgreen', 'green', 'skyblue', 'steelblue']</span></em>, <em class="sig-param"><span class="n">outpath</span><span class="o">=</span><span class="default_value">'c:\\eurac\\2020\\git\\pysegcnn\\pysegcnn\\main\\_graphics/'</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/graphics.html#plot_loss"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.graphics.plot_loss" title="Permalink to this definition">¶</a></dt>
-<dd><p>Plot the observed loss and accuracy of a model run.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>state_file</strong> (<cite>str</cite> or <cite>pathlib.Path</cite>) – The model state file. Model state files are stored in
-pysegcnn/main/_models.</p></li>
-<li><p><strong>figsize</strong> (<cite>tuple</cite>, optional) – The figure size in centimeters. The default is (10, 10).</p></li>
-<li><p><strong>step</strong> (<cite>int</cite>, optional) – The step of epochs for the x-axis labels. The default is 5, i.e. label
-each fifth epoch.</p></li>
-<li><p><strong>colors</strong> (<cite>list</cite> [<cite>str</cite>], optional) – A list of four named colors supported by <cite>matplotlib</cite>.
-The default is [‘lightgreen’, ‘green’, ‘skyblue’, ‘steelblue’].</p></li>
-<li><p><strong>outpath</strong> (<cite>str</cite> or <cite>pathlib.Path</cite>, optional) – Output path. The default is ‘pysegcnn/main/_graphics/’.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>fig</strong> – The figure handle.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>matplotlib.figure.Figure</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.graphics.plot_sample">
-<code class="sig-prename descclassname">core.graphics.</code><code class="sig-name descname">plot_sample</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">x</span></em>, <em class="sig-param"><span class="n">use_bands</span></em>, <em class="sig-param"><span class="n">labels</span></em>, <em class="sig-param"><span class="n">y</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">y_pred</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">figsize</span><span class="o">=</span><span class="default_value">10, 10</span></em>, <em class="sig-param"><span class="n">bands</span><span class="o">=</span><span class="default_value">['nir', 'red', 'green']</span></em>, <em class="sig-param"><span class="n">state</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">outpath</span><span class="o">=</span><span class="default_value">'c:\\eurac\\2020\\git\\pysegcnn\\pysegcnn\\main\\_samples/'</span></em>, <em class="sig-param"><span class="n">alpha</span><span class="o">=</span><span class="default_value">0</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/graphics.html#plot_sample"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.graphics.plot_sample" title="Permalink to this definition">¶</a></dt>
-<dd><p>Plot false color composite (FCC), ground truth and model prediction.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>x</strong> (<cite>numpy.ndarray</cite> or <cite>torch.Tensor</cite>, (b, h, w)) – Array containing the raw data of the tile, shape=(bands, height, width)</p></li>
-<li><p><strong>use_bands</strong> (<cite>list</cite> of <cite>str</cite>) – List describing the order of the bands in <code class="docutils literal notranslate"><span class="pre">x</span></code>.</p></li>
-<li><p><strong>labels</strong> (<cite>dict</cite> [<cite>int</cite>, <cite>dict</cite>]) – <p>The label dictionary. The keys are the values of the class labels
-in the ground truth <code class="docutils literal notranslate"><span class="pre">y</span></code>. Each nested <cite>dict</cite> should have keys:</p>
-<blockquote>
-<div><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">'color'</span></code></dt><dd><p>A named color (<cite>str</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'label'</span></code></dt><dd><p>The name of the class label (<cite>str</cite>).</p>
-</dd>
-</dl>
-</div></blockquote>
-</p></li>
-<li><p><strong>y</strong> (<cite>numpy.ndarray</cite> or <cite>torch.Tensor</cite> or <cite>None</cite>, optional) – Array containing the ground truth of tile <code class="docutils literal notranslate"><span class="pre">x</span></code>, shape=(height, width).
-The default is None.</p></li>
-<li><p><strong>y_pred</strong> (<cite>numpy.ndarray</cite> or <cite>torch.Tensor</cite> or <cite>None</cite>, optional) – Array containing the prediction for tile <code class="docutils literal notranslate"><span class="pre">x</span></code>, shape=(height, width).
-The default is None.</p></li>
-<li><p><strong>figsize</strong> (<cite>tuple</cite>, optional) – The figure size in centimeters. The default is (10, 10).</p></li>
-<li><p><strong>bands</strong> (<cite>list</cite> [<cite>str</cite>], optional) – The bands to build the FCC. The default is [‘nir’, ‘red’, ‘green’].</p></li>
-<li><p><strong>state</strong> (<cite>str</cite> or <cite>None</cite>, optional) – Filename to save the plot to. <code class="docutils literal notranslate"><span class="pre">state</span></code> should be an existing model
-state file ending with ‘.pt’. The default is None, i.e. plot is not
-saved to disk.</p></li>
-<li><p><strong>outpath</strong> (<cite>str</cite> or <cite>pathlib.Path</cite>, optional) – Output path. The default is ‘pysegcnn/main/_samples’.</p></li>
-<li><p><strong>alpha</strong> (<cite>int</cite>, optional) – The level of the percentiles to increase constrast in the FCC.
-The default is 0, i.e. no stretching.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><ul class="simple">
-<li><p><strong>fig</strong> (<cite>matplotlib.figure.Figure</cite>) – The figure handle.</p></li>
-<li><p><strong>ax</strong> (<cite>numpy.ndarray</cite> [<cite>matplotlib.axes._subplots.AxesSubplot</cite>]) – An array of the axes handles.</p></li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.graphics.running_mean">
-<code class="sig-prename descclassname">core.graphics.</code><code class="sig-name descname">running_mean</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">x</span></em>, <em class="sig-param"><span class="n">w</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/graphics.html#running_mean"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.graphics.running_mean" title="Permalink to this definition">¶</a></dt>
-<dd><p>Compute a running mean of the input sequence.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>x</strong> (<em>array_like</em>) – The sequence to compute a running mean on.</p></li>
-<li><p><strong>w</strong> (<cite>int</cite>) – The window length of the running mean.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>rm</strong> – The running mean of the sequence <code class="docutils literal notranslate"><span class="pre">x</span></code>.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>numpy.ndarray</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-</div>
-</div>
-<div class="section" id="module-core.layers">
-<span id="core-layers-module"></span><h2>core.layers module<a class="headerlink" href="#module-core.layers" title="Permalink to this headline">¶</a></h2>
-<p>Layers of a convolutional encoder-decoder network.</p>
-<div class="section" id="id5">
-<h3>License<a class="headerlink" href="#id5" title="Permalink to this headline">¶</a></h3>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-<dl class="py class">
-<dt id="core.layers.Block">
-<em class="property">class </em><code class="sig-prename descclassname">core.layers.</code><code class="sig-name descname">Block</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#Block"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.Block" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.nn.modules.module.Module</span></code></p>
-<p>Basic convolutional block.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>in_channels</strong> (<cite>int</cite>) – Number of input channels.</p></li>
-<li><p><strong>out_channels</strong> (<cite>int</cite>) – Number of output channels.</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional arguments passed to <cite>pysegcnn.core.layers.Conv2dSame</cite>.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>TypeError</strong> – Raised if <cite>~pysegcnn.core.layers.Block.layers</cite> method does not return
-an instance of <cite>torch.nn.Sequential</cite>.</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p></p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code>()</p></td>
-<td><p>Set the extra representation of the module</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.layers.Block.forward" title="core.layers.Block.forward"><code class="xref py py-obj docutils literal notranslate"><span class="pre">forward</span></code></a>()</p></td>
-<td><p>Forward pass of the block.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.layers.Block.layers" title="core.layers.Block.layers"><code class="xref py py-obj docutils literal notranslate"><span class="pre">layers</span></code></a>()</p></td>
-<td><p>Define the layers of the block.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 62%" />
-<col style="width: 38%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.layers.Block.forward">
-<code class="sig-name descname">forward</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#Block.forward"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.Block.forward" title="Permalink to this definition">¶</a></dt>
-<dd><p>Forward pass of the block.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Raises</dt>
-<dd class="field-odd"><p><strong>NotImplementedError</strong> – Raised if <cite>pysegcnn.core.layers.Block</cite> is not inherited.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.layers.Block.layers">
-<code class="sig-name descname">layers</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#Block.layers"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.Block.layers" title="Permalink to this definition">¶</a></dt>
-<dd><p>Define the layers of the block.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Raises</dt>
-<dd class="field-odd"><p><strong>NotImplementedError</strong> – Raised if <cite>pysegcnn.core.layers.Block</cite> is not inherited.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>layers</strong> – Return an instance of <cite>torch.nn.Sequential</cite> containing a sequence
-of layer (<cite>torch.nn.Module</cite> ) instances.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>torch.nn.Sequential</cite> [<cite>torch.nn.Module</cite>]</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.layers.Block.training">
-<code class="sig-name descname">training</code><em class="property">: bool</em><a class="headerlink" href="#core.layers.Block.training" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.layers.Conv2dSame">
-<em class="property">class </em><code class="sig-prename descclassname">core.layers.</code><code class="sig-name descname">Conv2dSame</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#Conv2dSame"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.Conv2dSame" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.nn.modules.conv.Conv2d</span></code></p>
-<p>A convolution preserving the shape of its input.</p>
-<p>Given the kernel size, the dilation and a stride of 1, the padding is
-calculated such that the output of the convolution has the same spatial
-dimensions as the input.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>*args</strong> (<cite>list</cite> [<cite>str</cite>]) – <dl class="simple">
-<dt>positional arguments passed to <cite>torch.nn.Conv2d</cite>:</dt><dd><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">'in_channels'</span></code>: <cite>int</cite></dt><dd><p>Number of input channels.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'out_channels'</span></code>: <cite>int</cite></dt><dd><p>Number of output channels.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'kernel_size'</span></code>: <cite>int</cite> or <cite>tuple</cite> [<cite>int</cite>]</dt><dd><p>Size of the convolving kernel.</p>
-</dd>
-</dl>
-</dd>
-</dl>
-</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional keyword arguments passed to <a href="#id23"><span class="problematic" id="id24">`torch.nn.Conv2d`_</span></a>.</p></li>
-<li><p><strong>_torch.nn.Conv2d</strong> (<em>.</em>) – <a class="reference external" href="https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html#torch.nn.Conv2d">https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html#torch.nn.Conv2d</a></p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code>()</p></td>
-<td><p>Set the extra representation of the module</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.layers.Conv2dSame.same_padding" title="core.layers.Conv2dSame.same_padding"><code class="xref py py-obj docutils literal notranslate"><span class="pre">same_padding</span></code></a>(d, k)</p></td>
-<td><p>Calculate the amount of padding.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 67%" />
-<col style="width: 33%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>forward</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><strong>reset_parameters</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
-<dl class="py attribute">
-<dt id="core.layers.Conv2dSame.bias">
-<code class="sig-name descname">bias</code><em class="property">: Optional<span class="p">[</span>torch.Tensor<span class="p">]</span></em><a class="headerlink" href="#core.layers.Conv2dSame.bias" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.layers.Conv2dSame.dilation">
-<code class="sig-name descname">dilation</code><em class="property">: Tuple<span class="p">[</span>int<span class="p">, </span><span class="p">…</span><span class="p">]</span></em><a class="headerlink" href="#core.layers.Conv2dSame.dilation" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.layers.Conv2dSame.groups">
-<code class="sig-name descname">groups</code><em class="property">: int</em><a class="headerlink" href="#core.layers.Conv2dSame.groups" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.layers.Conv2dSame.kernel_size">
-<code class="sig-name descname">kernel_size</code><em class="property">: Tuple<span class="p">[</span>int<span class="p">, </span><span class="p">…</span><span class="p">]</span></em><a class="headerlink" href="#core.layers.Conv2dSame.kernel_size" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.layers.Conv2dSame.out_channels">
-<code class="sig-name descname">out_channels</code><em class="property">: int</em><a class="headerlink" href="#core.layers.Conv2dSame.out_channels" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.layers.Conv2dSame.output_padding">
-<code class="sig-name descname">output_padding</code><em class="property">: Tuple<span class="p">[</span>int<span class="p">, </span><span class="p">…</span><span class="p">]</span></em><a class="headerlink" href="#core.layers.Conv2dSame.output_padding" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.layers.Conv2dSame.padding">
-<code class="sig-name descname">padding</code><em class="property">: Tuple<span class="p">[</span>int<span class="p">, </span><span class="p">…</span><span class="p">]</span></em><a class="headerlink" href="#core.layers.Conv2dSame.padding" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.layers.Conv2dSame.padding_mode">
-<code class="sig-name descname">padding_mode</code><em class="property">: str</em><a class="headerlink" href="#core.layers.Conv2dSame.padding_mode" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py method">
-<dt id="core.layers.Conv2dSame.same_padding">
-<em class="property">static </em><code class="sig-name descname">same_padding</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">d</span></em>, <em class="sig-param"><span class="n">k</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#Conv2dSame.same_padding"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.Conv2dSame.same_padding" title="Permalink to this definition">¶</a></dt>
-<dd><p>Calculate the amount of padding.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>d</strong> (<cite>int</cite>) – The dilation of the convolution.</p></li>
-<li><p><strong>k</strong> (<cite>int</cite>) – The kernel size.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>p</strong> – the amount of padding.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>int</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.layers.Conv2dSame.stride">
-<code class="sig-name descname">stride</code><em class="property">: Tuple<span class="p">[</span>int<span class="p">, </span><span class="p">…</span><span class="p">]</span></em><a class="headerlink" href="#core.layers.Conv2dSame.stride" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.layers.Conv2dSame.transposed">
-<code class="sig-name descname">transposed</code><em class="property">: bool</em><a class="headerlink" href="#core.layers.Conv2dSame.transposed" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.layers.Conv2dSame.weight">
-<code class="sig-name descname">weight</code><em class="property">: torch.Tensor</em><a class="headerlink" href="#core.layers.Conv2dSame.weight" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.layers.ConvBnReluMaxPool">
-<em class="property">class </em><code class="sig-prename descclassname">core.layers.</code><code class="sig-name descname">ConvBnReluMaxPool</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#ConvBnReluMaxPool"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.ConvBnReluMaxPool" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.layers.EncoderBlock" title="core.layers.EncoderBlock"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.layers.EncoderBlock</span></code></a></p>
-<p>Block of convolution, batchnorm, relu and 2x2 max pool.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>in_channels</strong> (<cite>int</cite>) – Number of input channels.</p></li>
-<li><p><strong>out_channels</strong> (<cite>int</cite>) – Number of output channels.</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional keyword arguments passed to
-<cite>pysegcnn.core.layers.Conv2dSame</cite>.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.layers.ConvBnReluMaxPool.downsample" title="core.layers.ConvBnReluMaxPool.downsample"><code class="xref py py-obj docutils literal notranslate"><span class="pre">downsample</span></code></a>(x)</p></td>
-<td><p>2x2 max pooling layer, <cite>torch.nn.functional.max_pool2d</cite>.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.layers.ConvBnReluMaxPool.extra_repr" title="core.layers.ConvBnReluMaxPool.extra_repr"><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code></a>()</p></td>
-<td><p>Define optional extra information about this module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">forward</span></code>(x)</p></td>
-<td><p>Forward pass of an encoder block.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.layers.ConvBnReluMaxPool.layers" title="core.layers.ConvBnReluMaxPool.layers"><code class="xref py py-obj docutils literal notranslate"><span class="pre">layers</span></code></a>()</p></td>
-<td><p>Sequence of convolution, batchnorm and relu layers.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 62%" />
-<col style="width: 38%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.layers.ConvBnReluMaxPool.downsample">
-<code class="sig-name descname">downsample</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">x</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#ConvBnReluMaxPool.downsample"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.ConvBnReluMaxPool.downsample" title="Permalink to this definition">¶</a></dt>
-<dd><p>2x2 max pooling layer, <cite>torch.nn.functional.max_pool2d</cite>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>x</strong> (<cite>torch.Tensor</cite>, shape=(batch, channel, height, width)) – Input tensor.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><ul class="simple">
-<li><p><strong>x</strong> (<cite>torch.Tensor</cite>, shape=(batch, channel, height // 2, width // 2)) – The 2x2 max pooled tensor.</p></li>
-<li><p><strong>indices</strong> (<cite>torch.Tensor</cite> or <cite>None</cite>) – The indices of the maxima. Useful for upsampling with
-<cite>torch.nn.functional.max_unpool2d</cite>.</p></li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.layers.ConvBnReluMaxPool.extra_repr">
-<code class="sig-name descname">extra_repr</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#ConvBnReluMaxPool.extra_repr"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.ConvBnReluMaxPool.extra_repr" title="Permalink to this definition">¶</a></dt>
-<dd><p>Define optional extra information about this module.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p>Extra representation string.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>str</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.layers.ConvBnReluMaxPool.layers">
-<code class="sig-name descname">layers</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#ConvBnReluMaxPool.layers"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.ConvBnReluMaxPool.layers" title="Permalink to this definition">¶</a></dt>
-<dd><p>Sequence of convolution, batchnorm and relu layers.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>layers</strong> – An instance of <cite>torch.nn.Sequential</cite> containing the sequence
-of convolution, batchnorm and relu layer (<cite>torch.nn.Module</cite>)
-instances.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>torch.nn.Sequential</cite> [<cite>torch.nn.Module</cite>]</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.layers.ConvBnReluMaxPool.training">
-<code class="sig-name descname">training</code><em class="property">: bool</em><a class="headerlink" href="#core.layers.ConvBnReluMaxPool.training" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.layers.ConvBnReluMaxUnpool">
-<em class="property">class </em><code class="sig-prename descclassname">core.layers.</code><code class="sig-name descname">ConvBnReluMaxUnpool</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#ConvBnReluMaxUnpool"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.ConvBnReluMaxUnpool" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.layers.DecoderBlock" title="core.layers.DecoderBlock"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.layers.DecoderBlock</span></code></a></p>
-<p>Block of convolution, batchnorm, relu and 2x2 max unpool.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>in_channels</strong> (<cite>int</cite>) – Number of input channels.</p></li>
-<li><p><strong>out_channels</strong> (<cite>int</cite>) – Number of output channels</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional keyword arguments passed to
-<cite>pysegcnn.core.layers.Conv2dSame</cite>.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.layers.ConvBnReluMaxUnpool.extra_repr" title="core.layers.ConvBnReluMaxUnpool.extra_repr"><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code></a>()</p></td>
-<td><p>Define optional extra information about this module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">forward</span></code>(x, feature, indices, skip)</p></td>
-<td><p>Forward pass of a decoder block.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.layers.ConvBnReluMaxUnpool.layers" title="core.layers.ConvBnReluMaxUnpool.layers"><code class="xref py py-obj docutils literal notranslate"><span class="pre">layers</span></code></a>()</p></td>
-<td><p>Sequence of convolution, batchnorm and relu layers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.layers.ConvBnReluMaxUnpool.upsample" title="core.layers.ConvBnReluMaxUnpool.upsample"><code class="xref py py-obj docutils literal notranslate"><span class="pre">upsample</span></code></a>(x, feature, indices)</p></td>
-<td><p>2x2 max unpooling layer.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 62%" />
-<col style="width: 38%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.layers.ConvBnReluMaxUnpool.extra_repr">
-<code class="sig-name descname">extra_repr</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#ConvBnReluMaxUnpool.extra_repr"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.ConvBnReluMaxUnpool.extra_repr" title="Permalink to this definition">¶</a></dt>
-<dd><p>Define optional extra information about this module.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p>Extra representation string.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>str</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.layers.ConvBnReluMaxUnpool.layers">
-<code class="sig-name descname">layers</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#ConvBnReluMaxUnpool.layers"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.ConvBnReluMaxUnpool.layers" title="Permalink to this definition">¶</a></dt>
-<dd><p>Sequence of convolution, batchnorm and relu layers.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>layers</strong> – An instance of <cite>torch.nn.Sequential</cite> containing the sequence
-of convolution, batchnorm and relu layer (<cite>torch.nn.Module</cite>)
-instances.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>torch.nn.Sequential</cite> [<cite>torch.nn.Module</cite>]</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.layers.ConvBnReluMaxUnpool.training">
-<code class="sig-name descname">training</code><em class="property">: bool</em><a class="headerlink" href="#core.layers.ConvBnReluMaxUnpool.training" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py method">
-<dt id="core.layers.ConvBnReluMaxUnpool.upsample">
-<code class="sig-name descname">upsample</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">x</span></em>, <em class="sig-param"><span class="n">feature</span></em>, <em class="sig-param"><span class="n">indices</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#ConvBnReluMaxUnpool.upsample"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.ConvBnReluMaxUnpool.upsample" title="Permalink to this definition">¶</a></dt>
-<dd><p>2x2 max unpooling layer.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>x</strong> (<cite>torch.Tensor</cite>, shape=(batch, channel, height, width)) – Input tensor.</p></li>
-<li><p><strong>feature</strong> (<cite>torch.Tensor</cite>, shape=(batch, channel, height, width)) – Intermediate output of a layer in the encoder. Used to determine
-the output shape of the upsampling operation.</p></li>
-<li><p><strong>indices</strong> (<cite>torch.Tensor</cite>) – The indices of the maxima of the max pooling operation
-(as returned by <cite>torch.nn.functional.max_pool2d</cite>).</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>x</strong> – The 2x2 max unpooled tensor.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>torch.Tensor</cite>, shape=(batch, channel, height * 2, width * 2)</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.layers.ConvBnReluUpsample">
-<em class="property">class </em><code class="sig-prename descclassname">core.layers.</code><code class="sig-name descname">ConvBnReluUpsample</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#ConvBnReluUpsample"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.ConvBnReluUpsample" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.layers.DecoderBlock" title="core.layers.DecoderBlock"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.layers.DecoderBlock</span></code></a></p>
-<p>Block of convolution, batchnorm, relu and nearest neighbor upsampling.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>in_channels</strong> (<cite>int</cite>) – Number of input channels.</p></li>
-<li><p><strong>out_channels</strong> (<cite>int</cite>) – Number of output channels</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional arguments passed to <cite>pysegcnn.core.layers.Conv2dSame</cite>.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.layers.ConvBnReluUpsample.extra_repr" title="core.layers.ConvBnReluUpsample.extra_repr"><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code></a>()</p></td>
-<td><p>Define optional extra information about this module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">forward</span></code>(x, feature, indices, skip)</p></td>
-<td><p>Forward pass of a decoder block.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.layers.ConvBnReluUpsample.layers" title="core.layers.ConvBnReluUpsample.layers"><code class="xref py py-obj docutils literal notranslate"><span class="pre">layers</span></code></a>()</p></td>
-<td><p>Sequence of convolution, batchnorm and relu layers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.layers.ConvBnReluUpsample.upsample" title="core.layers.ConvBnReluUpsample.upsample"><code class="xref py py-obj docutils literal notranslate"><span class="pre">upsample</span></code></a>(x, feature[, indices])</p></td>
-<td><p>Nearest neighbor upsampling.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 62%" />
-<col style="width: 38%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.layers.ConvBnReluUpsample.extra_repr">
-<code class="sig-name descname">extra_repr</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#ConvBnReluUpsample.extra_repr"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.ConvBnReluUpsample.extra_repr" title="Permalink to this definition">¶</a></dt>
-<dd><p>Define optional extra information about this module.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p>Extra representation string.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>str</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.layers.ConvBnReluUpsample.layers">
-<code class="sig-name descname">layers</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#ConvBnReluUpsample.layers"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.ConvBnReluUpsample.layers" title="Permalink to this definition">¶</a></dt>
-<dd><p>Sequence of convolution, batchnorm and relu layers.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>layers</strong> – An instance of <cite>torch.nn.Sequential</cite> containing the sequence
-of convolution, batchnorm and relu layer (<cite>torch.nn.Module</cite>)
-instances.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>torch.nn.Sequential</cite> [<cite>torch.nn.Module</cite>]</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.layers.ConvBnReluUpsample.training">
-<code class="sig-name descname">training</code><em class="property">: bool</em><a class="headerlink" href="#core.layers.ConvBnReluUpsample.training" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py method">
-<dt id="core.layers.ConvBnReluUpsample.upsample">
-<code class="sig-name descname">upsample</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">x</span></em>, <em class="sig-param"><span class="n">feature</span></em>, <em class="sig-param"><span class="n">indices</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#ConvBnReluUpsample.upsample"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.ConvBnReluUpsample.upsample" title="Permalink to this definition">¶</a></dt>
-<dd><p>Nearest neighbor upsampling.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>x</strong> (<cite>torch.Tensor</cite>, shape=(batch, channel, height, width)) – Input tensor.</p></li>
-<li><p><strong>feature</strong> (<cite>torch.Tensor</cite>, shape=(batch, channel, height, width)) – Intermediate output of a layer in the encoder. Used to determine
-the output shape of the upsampling operation.</p></li>
-<li><p><strong>indices</strong> (<cite>None</cite>, optional) – The indices of the maxima of the max pooling operation
-(as returned by <cite>torch.nn.functional.max_pool2d</cite>). Not required by
-this upsampling method.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>x</strong> – The 2x2 upsampled tensor.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>torch.Tensor</cite>, shape=(batch, channel, height, width)</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.layers.Decoder">
-<em class="property">class </em><code class="sig-prename descclassname">core.layers.</code><code class="sig-name descname">Decoder</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">filters</span></em>, <em class="sig-param"><span class="n">block</span></em>, <em class="sig-param"><span class="n">skip</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#Decoder"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.Decoder" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.nn.modules.module.Module</span></code></p>
-<p>Generic convolutional decoder.</p>
-<p>When instanciating an encoder-decoder architechure, <code class="docutils literal notranslate"><span class="pre">filters</span></code> should be
-the same for <cite>pysegcnn.core.layers.Encoder</cite> and
-<cite>pysegcnn.core.layers.Decoder</cite>.</p>
-<p>See <cite>pysegcnn.core.models.UNet</cite> for an example implementation.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>filters</strong> (<cite>list</cite> [<cite>int</cite>]) – List of input channels to each convolutional block. The length of
-<code class="docutils literal notranslate"><span class="pre">filters</span></code> determines the depth of the decoder. The first element of
-<code class="docutils literal notranslate"><span class="pre">filters</span></code> has to be the number of channels of the input images.</p></li>
-<li><p><strong>block</strong> (<cite>pysegcnn.core.layers.DecoderBlock</cite>) – The convolutional block defining a layer in the decoder.
-A subclass of <cite>pysegcnn.core.layers.DecoderBlock</cite>, e.g.
-<cite>pysegcnn.core.layers.ConvBnReluMaxUnpool</cite>.</p></li>
-<li><p><strong>skip</strong> (<cite>bool</cite>) – Whether to apply skip connections from the encoder to the decoder.</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional arguments passed to <cite>pysegcnn.core.layers.Conv2dSame</cite>.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code>()</p></td>
-<td><p>Set the extra representation of the module</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.layers.Decoder.forward" title="core.layers.Decoder.forward"><code class="xref py py-obj docutils literal notranslate"><span class="pre">forward</span></code></a>(x, enc_cache)</p></td>
-<td><p>Forward pass of the decoder.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 62%" />
-<col style="width: 38%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.layers.Decoder.forward">
-<code class="sig-name descname">forward</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">x</span></em>, <em class="sig-param"><span class="n">enc_cache</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#Decoder.forward"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.Decoder.forward" title="Permalink to this definition">¶</a></dt>
-<dd><p>Forward pass of the decoder.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>x</strong> (<cite>torch.Tensor</cite>, shape=(batch, channel, height, width)) – Output of the encoder.</p></li>
-<li><p><strong>enc_cache</strong> (<cite>dict</cite> [<cite>dict</cite>]) – <p>Cache dictionary. The keys of the dictionary are the number of the
-network layers and the values are dictionaries with the following
-(key, value) pairs:</p>
-<blockquote>
-<div><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">&quot;feature&quot;</span></code></dt><dd><p>The intermediate encoder outputs (<cite>torch.Tensor</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">&quot;indices&quot;</span></code></dt><dd><p>The indices of the max pooling layer (<cite>torch.Tensor</cite>).</p>
-</dd>
-</dl>
-</div></blockquote>
-</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>x</strong> – Output of the decoder.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>torch.Tensor</cite>, shape=(batch, channel, height, width)</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.layers.Decoder.training">
-<code class="sig-name descname">training</code><em class="property">: bool</em><a class="headerlink" href="#core.layers.Decoder.training" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.layers.DecoderBlock">
-<em class="property">class </em><code class="sig-prename descclassname">core.layers.</code><code class="sig-name descname">DecoderBlock</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#DecoderBlock"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.DecoderBlock" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.layers.Block" title="core.layers.Block"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.layers.Block</span></code></a></p>
-<p>Block of a convolutional decoder.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>in_channels</strong> (<cite>int</cite>) – Number of input channels.</p></li>
-<li><p><strong>out_channels</strong> (<cite>int</cite>) – Number of output channels.</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional arguments passed to <cite>pysegcnn.core.layers.Conv2dSame</cite>.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code>()</p></td>
-<td><p>Set the extra representation of the module</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.layers.DecoderBlock.forward" title="core.layers.DecoderBlock.forward"><code class="xref py py-obj docutils literal notranslate"><span class="pre">forward</span></code></a>(x, feature, indices, skip)</p></td>
-<td><p>Forward pass of a decoder block.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">layers</span></code>()</p></td>
-<td><p>Define the layers of the block.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.layers.DecoderBlock.upsample" title="core.layers.DecoderBlock.upsample"><code class="xref py py-obj docutils literal notranslate"><span class="pre">upsample</span></code></a>(x, feature, indices)</p></td>
-<td><p>Define the upsampling method.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 62%" />
-<col style="width: 38%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.layers.DecoderBlock.forward">
-<code class="sig-name descname">forward</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">x</span></em>, <em class="sig-param"><span class="n">feature</span></em>, <em class="sig-param"><span class="n">indices</span></em>, <em class="sig-param"><span class="n">skip</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#DecoderBlock.forward"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.DecoderBlock.forward" title="Permalink to this definition">¶</a></dt>
-<dd><p>Forward pass of a decoder block.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>x</strong> (<cite>torch.Tensor</cite>, shape=(batch, channel, height, width)) – Input tensor.</p></li>
-<li><p><strong>feature</strong> (<cite>torch.Tensor</cite>, shape=(batch, channel, height, width)) – Intermediate output of a layer in the encoder.
-If <code class="docutils literal notranslate"><span class="pre">skip</span></code> = True, <code class="docutils literal notranslate"><span class="pre">feature</span></code> is concatenated (along the channel
-axis) to the output of the respective upsampling layer in the
-decoder (skip connection).</p></li>
-<li><p><strong>indices</strong> (<cite>torch.Tensor</cite> or <cite>None</cite>) – Indices of the encoder downsampling method.</p></li>
-<li><p><strong>skip</strong> (<cite>bool</cite>) – Whether to apply the skip connection.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>x</strong> – Output of the decoder block.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>torch.Tensor</cite>, shape=(batch, channel, height, width)</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.layers.DecoderBlock.training">
-<code class="sig-name descname">training</code><em class="property">: bool</em><a class="headerlink" href="#core.layers.DecoderBlock.training" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py method">
-<dt id="core.layers.DecoderBlock.upsample">
-<code class="sig-name descname">upsample</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">x</span></em>, <em class="sig-param"><span class="n">feature</span></em>, <em class="sig-param"><span class="n">indices</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#DecoderBlock.upsample"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.DecoderBlock.upsample" title="Permalink to this definition">¶</a></dt>
-<dd><p>Define the upsampling method.</p>
-<p>The <cite>~pysegcnn.core.layers.DecoderBlock.upsample</cite> method should
-implement the spatial upsampling operation.</p>
-<dl class="simple">
-<dt>Use one of the following functions to upsample:</dt><dd><ul class="simple">
-<li><p><cite>torch.nn.functional.max_unpool2d</cite></p></li>
-<li><p><cite>torch.nn.functional.interpolate</cite></p></li>
-</ul>
-</dd>
-</dl>
-<p>See <cite>pysegcnn.core.layers.ConvBnReluMaxUnpool</cite> or
-<cite>pysegcnn.core.layers.ConvBnReluUpsample</cite> for an example
-implementation.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>x</strong> (<cite>torch.Tensor</cite>, shape=(batch, channel, height, width)) – Input tensor, e.g. output of a convolutional block.</p></li>
-<li><p><strong>feature</strong> (<cite>torch.Tensor</cite>, shape=(batch, channel, height, width)) – Intermediate output of a layer in the encoder. Used to implement
-skip connections.</p></li>
-<li><p><strong>indices</strong> (<cite>torch.Tensor</cite> or <cite>None</cite>) – Indices of the encoder downsampling method.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>NotImplementedError</strong> – Raised if <cite>pysegcnn.core.layers.DecoderBlock</cite> is not inherited.</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>x</strong> – The spatially upsampled tensor.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>torch.Tensor</cite>, shape=(batch, channel, height, width)</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.layers.Encoder">
-<em class="property">class </em><code class="sig-prename descclassname">core.layers.</code><code class="sig-name descname">Encoder</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">filters</span></em>, <em class="sig-param"><span class="n">block</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#Encoder"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.Encoder" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.nn.modules.module.Module</span></code></p>
-<p>Generic convolutional encoder.</p>
-<p>When instanciating an encoder-decoder architechure, <code class="docutils literal notranslate"><span class="pre">filters</span></code> should be
-the same for <cite>pysegcnn.core.layers.Encoder</cite> and
-<cite>pysegcnn.core.layers.Decoder</cite>.</p>
-<p>See <cite>pysegcnn.core.models.UNet</cite> for an example implementation.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>filters</strong> (<cite>list</cite> [<cite>int</cite>]) – List of input channels to each convolutional block. The length of
-<code class="docutils literal notranslate"><span class="pre">filters</span></code> determines the depth of the encoder. The first element of
-<code class="docutils literal notranslate"><span class="pre">filters</span></code> has to be the number of channels of the input images.</p></li>
-<li><p><strong>block</strong> (<cite>pysegcnn.core.layers.EncoderBlock</cite>) – The convolutional block defining a layer in the encoder.
-A subclass of <cite>pysegcnn.core.layers.EncoderBlock</cite>, e.g.
-<cite>pysegcnn.core.layers.ConvBnReluMaxPool</cite>.</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional arguments passed to <cite>pysegcnn.core.layers.Conv2dSame</cite>.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code>()</p></td>
-<td><p>Set the extra representation of the module</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.layers.Encoder.forward" title="core.layers.Encoder.forward"><code class="xref py py-obj docutils literal notranslate"><span class="pre">forward</span></code></a>(x)</p></td>
-<td><p>Forward pass of the encoder.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 62%" />
-<col style="width: 38%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.layers.Encoder.forward">
-<code class="sig-name descname">forward</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">x</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#Encoder.forward"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.Encoder.forward" title="Permalink to this definition">¶</a></dt>
-<dd><p>Forward pass of the encoder.</p>
-<p>Stores intermediate outputs in a dictionary. The keys of the dictionary
-are the number of the network layers and the values are dictionaries
-with the following (key, value) pairs:</p>
-<blockquote>
-<div><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">&quot;feature&quot;</span></code></dt><dd><p>The intermediate encoder outputs (<cite>torch.Tensor</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">&quot;indices&quot;</span></code></dt><dd><p>The indices of the max pooling layer, if required
-(<cite>torch.Tensor</cite>).</p>
-</dd>
-</dl>
-</div></blockquote>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>x</strong> (<cite>torch.Tensor</cite>, shape=(batch, channel, height, width)) – Input image.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>x</strong> – Output of the encoder.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>torch.Tensor</cite>, shape=(batch, channel, height, width)</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.layers.Encoder.training">
-<code class="sig-name descname">training</code><em class="property">: bool</em><a class="headerlink" href="#core.layers.Encoder.training" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.layers.EncoderBlock">
-<em class="property">class </em><code class="sig-prename descclassname">core.layers.</code><code class="sig-name descname">EncoderBlock</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#EncoderBlock"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.EncoderBlock" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.layers.Block" title="core.layers.Block"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.layers.Block</span></code></a></p>
-<p>Block of a convolutional encoder.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>in_channels</strong> (<cite>int</cite>) – Number of input channels.</p></li>
-<li><p><strong>out_channels</strong> (<cite>int</cite>) – Number of output channels.</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional arguments passed to <cite>pysegcnn.core.layers.Conv2dSame</cite>.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.layers.EncoderBlock.downsample" title="core.layers.EncoderBlock.downsample"><code class="xref py py-obj docutils literal notranslate"><span class="pre">downsample</span></code></a>(x)</p></td>
-<td><p>Define the downsampling method.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code>()</p></td>
-<td><p>Set the extra representation of the module</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.layers.EncoderBlock.forward" title="core.layers.EncoderBlock.forward"><code class="xref py py-obj docutils literal notranslate"><span class="pre">forward</span></code></a>(x)</p></td>
-<td><p>Forward pass of an encoder block.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">layers</span></code>()</p></td>
-<td><p>Define the layers of the block.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 62%" />
-<col style="width: 38%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.layers.EncoderBlock.downsample">
-<code class="sig-name descname">downsample</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">x</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#EncoderBlock.downsample"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.EncoderBlock.downsample" title="Permalink to this definition">¶</a></dt>
-<dd><p>Define the downsampling method.</p>
-<p>The <cite>~pysegcnn.core.layers.EncoderBlock.downsample</cite> method should
-implement the spatial pooling operation.</p>
-<dl class="simple">
-<dt>Use one of the following functions to downsample:</dt><dd><ul class="simple">
-<li><p><cite>torch.nn.functional.max_pool2d</cite></p></li>
-<li><p><cite>torch.nn.functional.interpolate</cite></p></li>
-</ul>
-</dd>
-</dl>
-<p>See <cite>pysegcnn.core.layers.ConvBnReluMaxPool</cite> for an example
-implementation.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>x</strong> (<cite>torch.Tensor</cite>, shape=(batch, channel, height, width)) – Input tensor, e.g. output of a convolutional block.</p>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>NotImplementedError</strong> – Raised if <cite>pysegcnn.core.layers.EncoderBlock</cite> is not inherited.</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><ul class="simple">
-<li><p><strong>x</strong> (<cite>torch.Tensor</cite>, shape=(batch, channel, height, width)) – The spatially downsampled tensor.</p></li>
-<li><p><strong>indices</strong> (<cite>torch.Tensor</cite> or <cite>None</cite>) – Optional indices of the downsampling method, e.g. indices of the
-maxima when using <cite>torch.nn.functional.max_pool2d</cite>. Useful for
-upsampling later. If no indices are required to upsample, simply
-return <code class="docutils literal notranslate"><span class="pre">indices</span></code> = <cite>None</cite>.</p></li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.layers.EncoderBlock.forward">
-<code class="sig-name descname">forward</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">x</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#EncoderBlock.forward"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.EncoderBlock.forward" title="Permalink to this definition">¶</a></dt>
-<dd><p>Forward pass of an encoder block.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>x</strong> (<cite>torch.Tensor</cite>) – Input tensor, e.g. output of the previous block/layer.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><ul class="simple">
-<li><p><strong>y</strong> (<cite>torch.Tensor</cite>, shape=(batch, channel, height, width)) – Output of the encoder block.</p></li>
-<li><p><strong>x</strong> (<cite>torch.Tensor</cite>, shape=(batch, channel, height, width)) – Intermediate output before applying downsampling. Useful to
-implement skip connections.</p></li>
-<li><p><strong>indices</strong> (<cite>torch.Tensor</cite> or <cite>None</cite>) – Optional indices of the downsampling method, e.g. indices of the
-maxima when using <cite>torch.nn.functional.max_pool2d</cite>. Useful for
-upsampling later. If no indices are required to upsample, simply
-return <code class="docutils literal notranslate"><span class="pre">indices</span></code> = <cite>None</cite>.</p></li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.layers.EncoderBlock.training">
-<code class="sig-name descname">training</code><em class="property">: bool</em><a class="headerlink" href="#core.layers.EncoderBlock.training" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.layers.conv_bn_relu">
-<code class="sig-prename descclassname">core.layers.</code><code class="sig-name descname">conv_bn_relu</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/layers.html#conv_bn_relu"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.layers.conv_bn_relu" title="Permalink to this definition">¶</a></dt>
-<dd><p>Block of convolution, batch normalization and rectified linear unit.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>in_channels</strong> (<cite>int</cite>) – Number of input channels.</p></li>
-<li><p><strong>out_channels</strong> (<cite>int</cite>) – Number of output channels.</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional arguments passed to <cite>pysegcnn.core.layers.Conv2dSame</cite>.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>block</strong> – An instance of <cite>torch.nn.Sequential</cite> containing a sequence of
-convolution, batch normalization and rectified linear unit layers.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>torch.nn.Sequential</cite> [<cite>torch.nn.Module</cite>]</p>
-</dd>
-</dl>
-</dd></dl>
-
-</div>
-</div>
-<div class="section" id="module-core.logging">
-<span id="core-logging-module"></span><h2>core.logging module<a class="headerlink" href="#module-core.logging" title="Permalink to this headline">¶</a></h2>
-<p>Logging configuration.</p>
-<div class="section" id="id6">
-<h3>License<a class="headerlink" href="#id6" title="Permalink to this headline">¶</a></h3>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-<dl class="py function">
-<dt id="core.logging.log_conf">
-<code class="sig-prename descclassname">core.logging.</code><code class="sig-name descname">log_conf</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">logfile</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/logging.html#log_conf"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.logging.log_conf" title="Permalink to this definition">¶</a></dt>
-<dd><p>Set basic logging configuration passed to <cite>logging.config.dictConfig</cite>.</p>
-<p>See the logging <a class="reference external" href="https://docs.python.org/3/library/logging.config.html#dictionary-schema-details">docs</a> for a detailed description of the configuration
-dictionary.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>logfile</strong> (<cite>str</cite> or <cite>pathlib.Path</cite>) – The file to save the logs to.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>LOGGING_CONFIG</strong> – The logging configuration.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>dict</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-</div>
-</div>
-<div class="section" id="module-core.models">
-<span id="core-models-module"></span><h2>core.models module<a class="headerlink" href="#module-core.models" title="Permalink to this headline">¶</a></h2>
-<p>Neural networks for semantic image segmentation.</p>
-<div class="section" id="id7">
-<h3>License<a class="headerlink" href="#id7" title="Permalink to this headline">¶</a></h3>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-<dl class="py class">
-<dt id="core.models.Network">
-<em class="property">class </em><code class="sig-prename descclassname">core.models.</code><code class="sig-name descname">Network</code><a class="reference internal" href="../_modules/core/models.html#Network"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.models.Network" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.nn.modules.module.Module</span></code></p>
-<p>Generic Network class.</p>
-<p>The base class for each model. If you want to implement a new model,
-inherit the <code class="docutils literal notranslate"><span class="pre">~pysegcnn.core.models.Network</span></code> class.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p></p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p>None.</p>
-</dd>
-<dt class="field-odd">Attributes</dt>
-<dd class="field-odd"><dl class="simple">
-<dt><a class="reference internal" href="#core.models.Network.state" title="core.models.Network.state"><code class="xref py py-obj docutils literal notranslate"><span class="pre">state</span></code></a></dt><dd><p>Return the model state file.</p>
-</dd>
-</dl>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code>()</p></td>
-<td><p>Set the extra representation of the module</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">forward</span></code>(*input)</p></td>
-<td><p></p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.models.Network.freeze" title="core.models.Network.freeze"><code class="xref py py-obj docutils literal notranslate"><span class="pre">freeze</span></code></a>()</p></td>
-<td><p>Freeze the weights of a model.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.models.Network.load" title="core.models.Network.load"><code class="xref py py-obj docutils literal notranslate"><span class="pre">load</span></code></a>(state_file)</p></td>
-<td><p>Load a model state.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.models.Network.save" title="core.models.Network.save"><code class="xref py py-obj docutils literal notranslate"><span class="pre">save</span></code></a>(state_file, optimizer[, bands])</p></td>
-<td><p>Save the model state.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.models.Network.unfreeze" title="core.models.Network.unfreeze"><code class="xref py py-obj docutils literal notranslate"><span class="pre">unfreeze</span></code></a>()</p></td>
-<td><p>Unfreeze the weights of a model.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 62%" />
-<col style="width: 38%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.models.Network.freeze">
-<code class="sig-name descname">freeze</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/models.html#Network.freeze"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.models.Network.freeze" title="Permalink to this definition">¶</a></dt>
-<dd><p>Freeze the weights of a model.</p>
-<p>Disables gradient computation: useful when using a pretrained model for
-inference.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p></p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p>None.</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.models.Network.load">
-<em class="property">static </em><code class="sig-name descname">load</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">state_file</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/models.html#Network.load"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.models.Network.load" title="Permalink to this definition">¶</a></dt>
-<dd><p>Load a model state.</p>
-<p>Returns the model in <code class="docutils literal notranslate"><span class="pre">state_file</span></code> with the pretrained model and
-optimizer weights. Useful when resuming training an existing model.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>state_file</strong> (<cite>str</cite> or <cite>pathlib.Path</cite>) – The model state file. Model state files are stored in
-pysegcnn/main/_models.</p>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>FileNotFoundError</strong> – Raised if <code class="docutils literal notranslate"><span class="pre">state_file</span></code> does not exist.</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><ul class="simple">
-<li><p><strong>model</strong> (<cite>pysegcnn.core.models.Network</cite>) – The pretrained model.</p></li>
-<li><p><strong>optimizer</strong> (<cite>torch.optim.Optimizer</cite>) – The optimizer used to train the model.</p></li>
-<li><p><strong>model_state</strong> (‘<cite>dict</cite>) – A dictionary containing the model and optimizer state, as
-constructed by <cite>~pysegcnn.core.Network.save</cite>.</p></li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.models.Network.save">
-<code class="sig-name descname">save</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">state_file</span></em>, <em class="sig-param"><span class="n">optimizer</span></em>, <em class="sig-param"><span class="n">bands</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/models.html#Network.save"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.models.Network.save" title="Permalink to this definition">¶</a></dt>
-<dd><p>Save the model state.</p>
-<p>Saves the model and optimizer states together with the model
-construction parameters, to easily re-instanciate the model.</p>
-<p>Optional <code class="docutils literal notranslate"><span class="pre">kwargs</span></code> are also saved.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>state_file</strong> (<cite>str</cite> or <cite>pathlib.Path</cite>) – Path to save the model state.</p></li>
-<li><p><strong>optimizer</strong> (<cite>torch.optim.Optimizer</cite>) – The optimizer used to train the model.</p></li>
-<li><p><strong>bands</strong> (<cite>list</cite> [<cite>str</cite>] or <cite>None</cite>, optional) – List of bands the model is trained with. The default is None.</p></li>
-<li><p><strong>**kwargs</strong> – Arbitrary keyword arguments. Each keyword argument will be saved
-as (key, value) pair in <code class="docutils literal notranslate"><span class="pre">state_file</span></code>.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>model_state</strong> – A dictionary containing the model and optimizer state</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>dict</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.models.Network.state">
-<em class="property">property </em><code class="sig-name descname">state</code><a class="headerlink" href="#core.models.Network.state" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return the model state file.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>state_file</strong> – The model state file.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>pathlib.Path</cite> or <cite>None</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.models.Network.training">
-<code class="sig-name descname">training</code><em class="property">: bool</em><a class="headerlink" href="#core.models.Network.training" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py method">
-<dt id="core.models.Network.unfreeze">
-<code class="sig-name descname">unfreeze</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/models.html#Network.unfreeze"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.models.Network.unfreeze" title="Permalink to this definition">¶</a></dt>
-<dd><p>Unfreeze the weights of a model.</p>
-<p>Enables gradient computation: useful when adjusting a pretrained model
-to a new dataset.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p></p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p>None.</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.models.SupportedLossFunctions">
-<em class="property">class </em><code class="sig-prename descclassname">core.models.</code><code class="sig-name descname">SupportedLossFunctions</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/models.html#SupportedLossFunctions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.models.SupportedLossFunctions" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">enum.Enum</span></code></p>
-<p>Names and corresponding classes of the tested loss functions.</p>
-<dl class="py attribute">
-<dt id="core.models.SupportedLossFunctions.CrossEntropy">
-<code class="sig-name descname">CrossEntropy</code><em class="property"> = &lt;class 'torch.nn.modules.loss.CrossEntropyLoss'&gt;</em><a class="headerlink" href="#core.models.SupportedLossFunctions.CrossEntropy" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.models.SupportedModels">
-<em class="property">class </em><code class="sig-prename descclassname">core.models.</code><code class="sig-name descname">SupportedModels</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/models.html#SupportedModels"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.models.SupportedModels" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">enum.Enum</span></code></p>
-<p>Names and corresponding classes of the implemented models.</p>
-<dl class="py attribute">
-<dt id="core.models.SupportedModels.Unet">
-<code class="sig-name descname">Unet</code><em class="property"> = &lt;class 'core.models.UNet'&gt;</em><a class="headerlink" href="#core.models.SupportedModels.Unet" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.models.SupportedOptimizers">
-<em class="property">class </em><code class="sig-prename descclassname">core.models.</code><code class="sig-name descname">SupportedOptimizers</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/models.html#SupportedOptimizers"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.models.SupportedOptimizers" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">enum.Enum</span></code></p>
-<p>Names and corresponding classes of the tested optimizers.</p>
-<dl class="py attribute">
-<dt id="core.models.SupportedOptimizers.Adam">
-<code class="sig-name descname">Adam</code><em class="property"> = &lt;class 'torch.optim.adam.Adam'&gt;</em><a class="headerlink" href="#core.models.SupportedOptimizers.Adam" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.models.UNet">
-<em class="property">class </em><code class="sig-prename descclassname">core.models.</code><code class="sig-name descname">UNet</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">nclasses</span></em>, <em class="sig-param"><span class="n">filters</span></em>, <em class="sig-param"><span class="n">skip</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/models.html#UNet"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.models.UNet" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.models.Network" title="core.models.Network"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.models.Network</span></code></a></p>
-<p>A PyTorch implementation of <a class="reference external" href="https://arxiv.org/abs/1505.04597">U-Net</a>.</p>
-<dl class="simple">
-<dt>Slightly modified version of U-Net:</dt><dd><ul class="simple">
-<li><p>each convolution is followed by a batch normalization layer</p></li>
-<li><p>the upsampling is implemented by a 2x2 max unpooling operation</p></li>
-</ul>
-</dd>
-</dl>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>in_channels</strong> (<cite>int</cite>) – Number of channels of the input images.</p></li>
-<li><p><strong>nclasses</strong> (<cite>int</cite>) – Number of classes.</p></li>
-<li><p><strong>filters</strong> (<cite>list</cite> [<cite>int</cite>]) – List of input channels to each convolutional block.</p></li>
-<li><p><strong>skip</strong> (<cite>bool</cite>) – Whether to apply skip connections from the encoder to the decoder.</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional keyword arguments passed to
-<cite>pysegcnn.core.layers.Conv2dSame</cite>.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-<dt class="field-even">Attributes</dt>
-<dd class="field-even"><dl class="simple">
-<dt><code class="xref py py-obj docutils literal notranslate"><span class="pre">state</span></code></dt><dd><p>Return the model state file.</p>
-</dd>
-</dl>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code>()</p></td>
-<td><p>Set the extra representation of the module</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.models.UNet.forward" title="core.models.UNet.forward"><code class="xref py py-obj docutils literal notranslate"><span class="pre">forward</span></code></a>(x)</p></td>
-<td><p>Forward propagation of U-Net.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">freeze</span></code>()</p></td>
-<td><p>Freeze the weights of a model.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load</span></code>(state_file)</p></td>
-<td><p>Load a model state.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">save</span></code>(state_file, optimizer[, bands])</p></td>
-<td><p>Save the model state.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">unfreeze</span></code>()</p></td>
-<td><p>Unfreeze the weights of a model.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 62%" />
-<col style="width: 38%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.models.UNet.forward">
-<code class="sig-name descname">forward</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">x</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/models.html#UNet.forward"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.models.UNet.forward" title="Permalink to this definition">¶</a></dt>
-<dd><p>Forward propagation of U-Net.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>x</strong> (<cite>torch.Tensor</cite>) – The input image, shape=(batch_size, channels, height, width).</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>y</strong> – The classified image, shape=(batch_size, height, width).</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>‘torch.tensor’</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.models.UNet.training">
-<code class="sig-name descname">training</code><em class="property">: bool</em><a class="headerlink" href="#core.models.UNet.training" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-</div>
-</div>
-<div class="section" id="module-core.predict">
-<span id="core-predict-module"></span><h2>core.predict module<a class="headerlink" href="#module-core.predict" title="Permalink to this headline">¶</a></h2>
-<p>Functions for model inference.</p>
-<div class="section" id="id8">
-<h3>License<a class="headerlink" href="#id8" title="Permalink to this headline">¶</a></h3>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-<dl class="py function">
-<dt id="core.predict.predict_samples">
-<code class="sig-prename descclassname">core.predict.</code><code class="sig-name descname">predict_samples</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ds</span></em>, <em class="sig-param"><span class="n">model</span></em>, <em class="sig-param"><span class="n">cm</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">plot</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/predict.html#predict_samples"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.predict.predict_samples" title="Permalink to this definition">¶</a></dt>
-<dd><p>Classify each sample in <code class="docutils literal notranslate"><span class="pre">ds</span></code> with model <code class="docutils literal notranslate"><span class="pre">model</span></code>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>ds</strong> (<cite>pysegcnn.core.split.RandomSubset</cite> or) – </p></li>
-<li><p><strong>pysegcnn.core.split.SceneSubset</strong> – An instance of <cite>~pysegcnn.core.split.RandomSubset</cite> or
-<cite>~pysegcnn.core.split.SceneSubset</cite>.</p></li>
-<li><p><strong>model</strong> (<cite>pysegcnn.core.models.Network</cite>) – An instance of <cite>~pysegcnn.core.models.Network</cite>.</p></li>
-<li><p><strong>cm</strong> (<cite>bool</cite>, optional) – Whether to compute the confusion matrix. The default is False.</p></li>
-<li><p><strong>plot</strong> (<cite>bool</cite>, optional) – Whether to plot a false color composite, ground truth and model
-prediction for each sample. The default is False.</p></li>
-<li><p><strong>**kwargs</strong> – Additional keyword arguments passed to
-<cite>pysegcnn.core.graphics.plot_sample</cite>.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>TypeError</strong> – Raised if <code class="docutils literal notranslate"><span class="pre">ds</span></code> is not an instance of
-<cite>~pysegcnn.core.split.RandomSubset</cite> or
-<cite>~pysegcnn.core.split.SceneSubset</cite>.</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><ul>
-<li><p><strong>output</strong> (<cite>dict</cite>) –</p>
-<dl class="simple">
-<dt>Output dictionary with keys:</dt><dd><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">'input'</span></code></dt><dd><p>Model input data</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'labels'</span></code></dt><dd><p>The ground truth</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'prediction'</span></code></dt><dd><p>Model prediction</p>
-</dd>
-</dl>
-</dd>
-</dl>
-</li>
-<li><p><strong>conf_mat</strong> (<cite>numpy.ndarray</cite>) – The confusion matrix. Note that the confusion matrix <code class="docutils literal notranslate"><span class="pre">conf_mat</span></code> is
-only computed if <code class="docutils literal notranslate"><span class="pre">cm</span></code> = True.</p></li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.predict.predict_scenes">
-<code class="sig-prename descclassname">core.predict.</code><code class="sig-name descname">predict_scenes</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ds</span></em>, <em class="sig-param"><span class="n">model</span></em>, <em class="sig-param"><span class="n">scene_id</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">cm</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">plot</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/predict.html#predict_scenes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.predict.predict_scenes" title="Permalink to this definition">¶</a></dt>
-<dd><p>Classify each scene in <code class="docutils literal notranslate"><span class="pre">ds</span></code> with model <code class="docutils literal notranslate"><span class="pre">model</span></code>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>ds</strong> (<cite>pysegcnn.core.split.SceneSubset</cite>) – An instance of <cite>~pysegcnn.core.split.SceneSubset</cite>.</p></li>
-<li><p><strong>model</strong> (<cite>pysegcnn.core.models.Network</cite>) – An instance of <cite>~pysegcnn.core.models.Network</cite>.</p></li>
-<li><p><strong>scene_id</strong> (<cite>str</cite> or <cite>None</cite>) – A valid scene identifier.</p></li>
-<li><p><strong>cm</strong> (<cite>bool</cite>, optional) – Whether to compute the confusion matrix. The default is False.</p></li>
-<li><p><strong>plot</strong> (<cite>bool</cite>, optional) – Whether to plot a false color composite, ground truth and model
-prediction for each scene. The default is False.</p></li>
-<li><p><strong>**kwargs</strong> – Additional keyword arguments passed to
-<cite>pysegcnn.core.graphics.plot_sample</cite>.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>TypeError</strong> – Raised if <code class="docutils literal notranslate"><span class="pre">ds</span></code> is not an instance of
-<cite>~pysegcnn.core.split.SceneSubset</cite>.</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><ul>
-<li><p><strong>output</strong> (<cite>dict</cite>) –</p>
-<dl class="simple">
-<dt>Output dictionary with keys:</dt><dd><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">'input'</span></code></dt><dd><p>Model input data</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'labels'</span></code></dt><dd><p>The ground truth</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'prediction'</span></code></dt><dd><p>Model prediction</p>
-</dd>
-</dl>
-</dd>
-</dl>
-</li>
-<li><p><strong>conf_mat</strong> (<cite>numpy.ndarray</cite>) – The confusion matrix. Note that the confusion matrix <code class="docutils literal notranslate"><span class="pre">conf_mat</span></code> is
-only computed if <code class="docutils literal notranslate"><span class="pre">cm</span></code> = True.</p></li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-</div>
-</div>
-<div class="section" id="module-core.split">
-<span id="core-split-module"></span><h2>core.split module<a class="headerlink" href="#module-core.split" title="Permalink to this headline">¶</a></h2>
-<p>Split the dataset into training, validation and test set.</p>
-<div class="section" id="id9">
-<h3>License<a class="headerlink" href="#id9" title="Permalink to this headline">¶</a></h3>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-<dl class="py class">
-<dt id="core.split.CustomSubset">
-<em class="property">class </em><code class="sig-prename descclassname">core.split.</code><code class="sig-name descname">CustomSubset</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">dataset</span></em>, <em class="sig-param"><span class="n">indices</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#CustomSubset"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.CustomSubset" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.utils.data.dataset.Subset</span></code></p>
-<p>Custom subset inheriting <cite>torch.utils.data.Subset</cite>.</p>
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.split.DateSplit">
-<em class="property">class </em><code class="sig-prename descclassname">core.split.</code><code class="sig-name descname">DateSplit</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ds</span></em>, <em class="sig-param"><span class="n">date</span></em>, <em class="sig-param"><span class="n">dateformat</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#DateSplit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.DateSplit" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.split.Split" title="core.split.Split"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.split.Split</span></code></a></p>
-<p>Split the dataset based on a date.</p>
-<p>Class wrapper for <cite>pysegcnn.core.split.Split.date_scene_split</cite>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>ds</strong> (<cite>pysegcnn.core.dataset.ImageDataset</cite>) – An instance of <cite>~pysegcnn.core.dataset.ImageDataset</cite>.</p></li>
-<li><p><strong>date</strong> (<em>'str'</em>) – A date.</p></li>
-<li><p><strong>dateformat</strong> (<em>'str'</em><em>, </em><em>optional</em>) – The format of <code class="docutils literal notranslate"><span class="pre">date</span></code>. <code class="docutils literal notranslate"><span class="pre">dateformat</span></code> is used by
-<cite>datetime.datetime.strptime’ to parse ``date`</cite> to a <cite>datetime.datetime</cite>
-object. The default is ‘%Y%m%d’.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">split</span></code>()</p></td>
-<td><p>Split dataset into training, validation and test set.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.split.DateSplit.subset_type" title="core.split.DateSplit.subset_type"><code class="xref py py-obj docutils literal notranslate"><span class="pre">subset_type</span></code></a>()</p></td>
-<td><p>Wrap <cite>pysegcnn.core.split.SceneSubset</cite>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.split.DateSplit.subsets" title="core.split.DateSplit.subsets"><code class="xref py py-obj docutils literal notranslate"><span class="pre">subsets</span></code></a>()</p></td>
-<td><p>Wrap <cite>pysegcnn.core.split.Split.date_scene_split</cite>.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.split.DateSplit.subset_type">
-<code class="sig-name descname">subset_type</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#DateSplit.subset_type"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.DateSplit.subset_type" title="Permalink to this definition">¶</a></dt>
-<dd><p>Wrap <cite>pysegcnn.core.split.SceneSubset</cite>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>SceneSubset</strong> – The subset type.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>pysegcnn.core.split.SceneSubset</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.split.DateSplit.subsets">
-<code class="sig-name descname">subsets</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#DateSplit.subsets"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.DateSplit.subsets" title="Permalink to this definition">¶</a></dt>
-<dd><p>Wrap <cite>pysegcnn.core.split.Split.date_scene_split</cite>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><p><strong>subsets</strong> –</p>
-<dl class="simple">
-<dt>Subset dictionary with keys:</dt><dd><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">'train'</span></code></dt><dd><p>dictionary containing the training scenes.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'valid'</span></code></dt><dd><p>dictionary containing the validation scenes.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'test'</span></code></dt><dd><p>dictionary containing the test scenes, empty.</p>
-</dd>
-</dl>
-</dd>
-</dl>
-</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>dict</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.split.RandomSceneSplit">
-<em class="property">class </em><code class="sig-prename descclassname">core.split.</code><code class="sig-name descname">RandomSceneSplit</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ds</span></em>, <em class="sig-param"><span class="n">ttratio</span></em>, <em class="sig-param"><span class="n">tvratio</span></em>, <em class="sig-param"><span class="n">seed</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#RandomSceneSplit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.RandomSceneSplit" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.split.RandomSplit" title="core.split.RandomSplit"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.split.RandomSplit</span></code></a></p>
-<p>Randomly split the dataset.</p>
-<p>For each scene, all the tiles of the scene are included in either the
-training, validation or test set, respectively.</p>
-<p>Class wrapper for <cite>pysegcnn.core.split.Split.random_scene_split</cite>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>ds</strong> (<cite>pysegcnn.core.dataset.ImageDataset</cite>) – An instance of <cite>~pysegcnn.core.dataset.ImageDataset</cite>.</p></li>
-<li><p><strong>tvratio</strong> (<cite>float</cite>) – The ratio of training data to validation data, e.g. <code class="docutils literal notranslate"><span class="pre">tvratio</span></code> = 0.8
-means 80% training, 20% validation.</p></li>
-<li><p><strong>ttratio</strong> (<cite>float</cite>, optional) – The ratio of training and validation data to test data, e.g.
-<code class="docutils literal notranslate"><span class="pre">ttratio</span></code> = 0.6 means 60% for training and validation, 40% for
-testing. The default is 1.</p></li>
-<li><p><strong>seed</strong> (<cite>int</cite>, optional) – The random seed for reproducibility. The default is 0.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">split</span></code>()</p></td>
-<td><p>Split dataset into training, validation and test set.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.split.RandomSceneSplit.subset_type" title="core.split.RandomSceneSplit.subset_type"><code class="xref py py-obj docutils literal notranslate"><span class="pre">subset_type</span></code></a>()</p></td>
-<td><p>Wrap <cite>pysegcnn.core.split.SceneSubset</cite>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.split.RandomSceneSplit.subsets" title="core.split.RandomSceneSplit.subsets"><code class="xref py py-obj docutils literal notranslate"><span class="pre">subsets</span></code></a>()</p></td>
-<td><p>Wrap <cite>pysegcnn.core.split.Split.random_scene_split</cite>.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.split.RandomSceneSplit.subset_type">
-<code class="sig-name descname">subset_type</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#RandomSceneSplit.subset_type"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.RandomSceneSplit.subset_type" title="Permalink to this definition">¶</a></dt>
-<dd><p>Wrap <cite>pysegcnn.core.split.SceneSubset</cite>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>SceneSubset</strong> – The subset type.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>pysegcnn.core.split.SceneSubset</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.split.RandomSceneSplit.subsets">
-<code class="sig-name descname">subsets</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#RandomSceneSplit.subsets"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.RandomSceneSplit.subsets" title="Permalink to this definition">¶</a></dt>
-<dd><p>Wrap <cite>pysegcnn.core.split.Split.random_scene_split</cite>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><p><strong>subsets</strong> –</p>
-<dl class="simple">
-<dt>Subset dictionary with keys:</dt><dd><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">'train'</span></code></dt><dd><p>dictionary containing the training scenes.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'valid'</span></code></dt><dd><p>dictionary containing the validation scenes.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'test'</span></code></dt><dd><p>dictionary containing the test scenes, empty.</p>
-</dd>
-</dl>
-</dd>
-</dl>
-</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>dict</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.split.RandomSplit">
-<em class="property">class </em><code class="sig-prename descclassname">core.split.</code><code class="sig-name descname">RandomSplit</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ds</span></em>, <em class="sig-param"><span class="n">ttratio</span></em>, <em class="sig-param"><span class="n">tvratio</span></em>, <em class="sig-param"><span class="n">seed</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#RandomSplit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.RandomSplit" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.split.Split" title="core.split.Split"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.split.Split</span></code></a></p>
-<p>Randomly split the dataset.</p>
-<p>Generic class for random dataset splits.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>ds</strong> (<cite>pysegcnn.core.dataset.ImageDataset</cite>) – An instance of <cite>~pysegcnn.core.dataset.ImageDataset</cite>.</p></li>
-<li><p><strong>tvratio</strong> (<cite>float</cite>) – The ratio of training data to validation data, e.g. <code class="docutils literal notranslate"><span class="pre">tvratio</span></code> = 0.8
-means 80% training, 20% validation.</p></li>
-<li><p><strong>ttratio</strong> (<cite>float</cite>, optional) – The ratio of training and validation data to test data, e.g.
-<code class="docutils literal notranslate"><span class="pre">ttratio</span></code> = 0.6 means 60% for training and validation, 40% for
-testing. The default is 1.</p></li>
-<li><p><strong>seed</strong> (<cite>int</cite>, optional) – The random seed for reproducibility. The default is 0.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">split</span></code>()</p></td>
-<td><p>Split dataset into training, validation and test set.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">subset_type</span></code>()</p></td>
-<td><p>Define the type of each subset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">subsets</span></code>()</p></td>
-<td><p>Define training, validation and test sets.</p></td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.split.RandomSubset">
-<em class="property">class </em><code class="sig-prename descclassname">core.split.</code><code class="sig-name descname">RandomSubset</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ds</span></em>, <em class="sig-param"><span class="n">indices</span></em>, <em class="sig-param"><span class="n">name</span></em>, <em class="sig-param"><span class="n">scenes</span></em>, <em class="sig-param"><span class="n">scene_ids</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#RandomSubset"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.RandomSubset" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.split.CustomSubset" title="core.split.CustomSubset"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.split.CustomSubset</span></code></a></p>
-<p>A custom subset for random dataset splits.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>ds</strong> (<cite>pysegcnn.core.dataset.ImageDataset</cite>) – An instance of <cite>~pysegcnn.core.dataset.ImageDataset</cite>.</p></li>
-<li><p><strong>indices</strong> (<cite>list</cite> [<cite>int</cite>]) – List of the subset indices to access <code class="docutils literal notranslate"><span class="pre">ds</span></code>.</p></li>
-<li><p><strong>name</strong> (<cite>str</cite>) – Name of the subset.</p></li>
-<li><p><strong>scenes</strong> (<cite>list</cite> [<cite>dict</cite>]) – List of the subset tiles.</p></li>
-<li><p><strong>scene_ids</strong> (<cite>list</cite> or <cite>numpy.ndarray</cite>) – Container of the scene ids.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.split.RandomTileSplit">
-<em class="property">class </em><code class="sig-prename descclassname">core.split.</code><code class="sig-name descname">RandomTileSplit</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ds</span></em>, <em class="sig-param"><span class="n">ttratio</span></em>, <em class="sig-param"><span class="n">tvratio</span></em>, <em class="sig-param"><span class="n">seed</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#RandomTileSplit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.RandomTileSplit" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.split.RandomSplit" title="core.split.RandomSplit"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.split.RandomSplit</span></code></a></p>
-<p>Randomly split the dataset.</p>
-<p>For each scene, the tiles of the scene can be distributed among the
-training, validation and test set.</p>
-<p>Class wrapper for <cite>pysegcnn.core.split.Split.random_tile_split</cite>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>ds</strong> (<cite>pysegcnn.core.dataset.ImageDataset</cite>) – An instance of <cite>~pysegcnn.core.dataset.ImageDataset</cite>.</p></li>
-<li><p><strong>tvratio</strong> (<cite>float</cite>) – The ratio of training data to validation data, e.g. <code class="docutils literal notranslate"><span class="pre">tvratio</span></code> = 0.8
-means 80% training, 20% validation.</p></li>
-<li><p><strong>ttratio</strong> (<cite>float</cite>, optional) – The ratio of training and validation data to test data, e.g.
-<code class="docutils literal notranslate"><span class="pre">ttratio</span></code> = 0.6 means 60% for training and validation, 40% for
-testing. The default is 1.</p></li>
-<li><p><strong>seed</strong> (<cite>int</cite>, optional) – The random seed for reproducibility. The default is 0.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">split</span></code>()</p></td>
-<td><p>Split dataset into training, validation and test set.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.split.RandomTileSplit.subset_type" title="core.split.RandomTileSplit.subset_type"><code class="xref py py-obj docutils literal notranslate"><span class="pre">subset_type</span></code></a>()</p></td>
-<td><p>Wrap <cite>pysegcnn.core.split.RandomSubset</cite>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.split.RandomTileSplit.subsets" title="core.split.RandomTileSplit.subsets"><code class="xref py py-obj docutils literal notranslate"><span class="pre">subsets</span></code></a>()</p></td>
-<td><p>Wrap <cite>pysegcnn.core.split.Split.random_tile_split</cite>.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.split.RandomTileSplit.subset_type">
-<code class="sig-name descname">subset_type</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#RandomTileSplit.subset_type"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.RandomTileSplit.subset_type" title="Permalink to this definition">¶</a></dt>
-<dd><p>Wrap <cite>pysegcnn.core.split.RandomSubset</cite>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>SceneSubset</strong> – The subset type.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>pysegcnn.core.split.RandomSubset</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.split.RandomTileSplit.subsets">
-<code class="sig-name descname">subsets</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#RandomTileSplit.subsets"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.RandomTileSplit.subsets" title="Permalink to this definition">¶</a></dt>
-<dd><p>Wrap <cite>pysegcnn.core.split.Split.random_tile_split</cite>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><p><strong>subsets</strong> –</p>
-<dl class="simple">
-<dt>Subset dictionary with keys:</dt><dd><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">'train'</span></code></dt><dd><p>dictionary containing the training scenes.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'valid'</span></code></dt><dd><p>dictionary containing the validation scenes.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'test'</span></code></dt><dd><p>dictionary containing the test scenes, empty.</p>
-</dd>
-</dl>
-</dd>
-</dl>
-</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>dict</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.split.SceneSubset">
-<em class="property">class </em><code class="sig-prename descclassname">core.split.</code><code class="sig-name descname">SceneSubset</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ds</span></em>, <em class="sig-param"><span class="n">indices</span></em>, <em class="sig-param"><span class="n">name</span></em>, <em class="sig-param"><span class="n">scenes</span></em>, <em class="sig-param"><span class="n">scene_ids</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#SceneSubset"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.SceneSubset" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.split.CustomSubset" title="core.split.CustomSubset"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.split.CustomSubset</span></code></a></p>
-<p>A custom subset for dataset splits where the scenes are preserved.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>ds</strong> (<cite>pysegcnn.core.dataset.ImageDataset</cite>) – An instance of <cite>~pysegcnn.core.dataset.ImageDataset</cite>.</p></li>
-<li><p><strong>indices</strong> (<cite>list</cite> [<cite>int</cite>]) – List of the subset indices to access <code class="docutils literal notranslate"><span class="pre">ds</span></code>.</p></li>
-<li><p><strong>name</strong> (<cite>str</cite>) – Name of the subset.</p></li>
-<li><p><strong>scenes</strong> (<cite>list</cite> [<cite>dict</cite>]) – List of the subset tiles.</p></li>
-<li><p><strong>scene_ids</strong> (<cite>list</cite> or <cite>numpy.ndarray</cite>) – Container of the scene ids.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.split.Split">
-<em class="property">class </em><code class="sig-prename descclassname">core.split.</code><code class="sig-name descname">Split</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ds</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#Split"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.Split" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
-<p>Generic class handling how <code class="docutils literal notranslate"><span class="pre">ds</span></code> is split.</p>
-<p>Inherit <cite>~pysegcnn.core.split.Split</cite> and implement the
-<cite>~pysegcnn.core.split.Split.subsets</cite> and
-<cite>~pysegcnn.core.split.Split.subset_type</cite> method.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>ds</strong> (<cite>pysegcnn.core.dataset.ImageDataset</cite>) – An instance of <cite>~pysegcnn.core.dataset.ImageDataset</cite>.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.split.Split.split" title="core.split.Split.split"><code class="xref py py-obj docutils literal notranslate"><span class="pre">split</span></code></a>()</p></td>
-<td><p>Split dataset into training, validation and test set.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.split.Split.subset_type" title="core.split.Split.subset_type"><code class="xref py py-obj docutils literal notranslate"><span class="pre">subset_type</span></code></a>()</p></td>
-<td><p>Define the type of each subset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.split.Split.subsets" title="core.split.Split.subsets"><code class="xref py py-obj docutils literal notranslate"><span class="pre">subsets</span></code></a>()</p></td>
-<td><p>Define training, validation and test sets.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.split.Split.split">
-<code class="sig-name descname">split</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#Split.split"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.Split.split" title="Permalink to this definition">¶</a></dt>
-<dd><p>Split dataset into training, validation and test set.</p>
-<p><cite>~pysegcnn.core.split.Split.split</cite> works only if
-<cite>~pysegcnn.core.split.Split.subsets</cite> and
-<cite>~pysegcnn.core.split.Split.subset_type</cite> are implemented.</p>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.split.Split.subset_type">
-<code class="sig-name descname">subset_type</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#Split.subset_type"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.Split.subset_type" title="Permalink to this definition">¶</a></dt>
-<dd><p>Define the type of each subset.</p>
-<p>Wrapper method for
-<cite>pysegcnn.core.split.RandomSubset</cite> or
-<cite>pysegcnn.core.split.SceneSubset</cite>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Raises</dt>
-<dd class="field-odd"><p><strong>NotImplementedError</strong> – Raised if <cite>pysegcnn.core.split.Split</cite> is not inherited.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.split.Split.subsets">
-<code class="sig-name descname">subsets</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#Split.subsets"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.Split.subsets" title="Permalink to this definition">¶</a></dt>
-<dd><p>Define training, validation and test sets.</p>
-<p>Wrapper method for
-<cite>pysegcnn.core.split.Split.random_tile_split</cite>,
-<cite>pysegcnn.core.split.Split.random_scene_split</cite> or
-<cite>pysegcnn.core.split.Split.date_scene_split</cite>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Raises</dt>
-<dd class="field-odd"><p><strong>NotImplementedError</strong> – Raised if <cite>pysegcnn.core.split.Split</cite> is not inherited.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.split.SupportedSplits">
-<em class="property">class </em><code class="sig-prename descclassname">core.split.</code><code class="sig-name descname">SupportedSplits</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#SupportedSplits"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.SupportedSplits" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">enum.Enum</span></code></p>
-<p>Names and corresponding classes of the implemented split modes.</p>
-<dl class="py attribute">
-<dt id="core.split.SupportedSplits.date">
-<code class="sig-name descname">date</code><em class="property"> = &lt;class 'core.split.DateSplit'&gt;</em><a class="headerlink" href="#core.split.SupportedSplits.date" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.split.SupportedSplits.random">
-<code class="sig-name descname">random</code><em class="property"> = &lt;class 'core.split.RandomTileSplit'&gt;</em><a class="headerlink" href="#core.split.SupportedSplits.random" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.split.SupportedSplits.scene">
-<code class="sig-name descname">scene</code><em class="property"> = &lt;class 'core.split.RandomSceneSplit'&gt;</em><a class="headerlink" href="#core.split.SupportedSplits.scene" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.split.date_scene_split">
-<code class="sig-prename descclassname">core.split.</code><code class="sig-name descname">date_scene_split</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ds</span></em>, <em class="sig-param"><span class="n">date</span></em>, <em class="sig-param"><span class="n">dateformat</span><span class="o">=</span><span class="default_value">'%Y%m%d'</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#date_scene_split"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.date_scene_split" title="Permalink to this definition">¶</a></dt>
-<dd><p>Split the dataset based on a date.</p>
-<p>Scenes before <code class="docutils literal notranslate"><span class="pre">date</span></code> build the training set, scenes after <code class="docutils literal notranslate"><span class="pre">date</span></code> build
-the validation set, the test set is empty.</p>
-<p>Useful for time series data.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>ds</strong> (<cite>pysegcnn.core.dataset.ImageDataset</cite>) – An instance of <cite>~pysegcnn.core.dataset.ImageDataset</cite>.</p></li>
-<li><p><strong>date</strong> (<cite>str</cite>) – A date.</p></li>
-<li><p><strong>dateformat</strong> (<cite>str</cite>, optional) – The format of <code class="docutils literal notranslate"><span class="pre">date</span></code>. <code class="docutils literal notranslate"><span class="pre">dateformat</span></code> is used by
-<cite>datetime.datetime.strptime’ to parse ``date`</cite> to a <cite>datetime.datetime</cite>
-object. The default is ‘%Y%m%d’.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>AssertionError</strong> – Raised if the splits are not pairwise disjoint.</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><p><strong>subsets</strong> –</p>
-<dl class="simple">
-<dt>Subset dictionary with keys:</dt><dd><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">'train'</span></code></dt><dd><p>dictionary containing the training scenes.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'valid'</span></code></dt><dd><p>dictionary containing the validation scenes.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'test'</span></code></dt><dd><p>dictionary containing the test scenes, empty.</p>
-</dd>
-</dl>
-</dd>
-</dl>
-</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>dict</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.split.pairwise_disjoint">
-<code class="sig-prename descclassname">core.split.</code><code class="sig-name descname">pairwise_disjoint</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">sets</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#pairwise_disjoint"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.pairwise_disjoint" title="Permalink to this definition">¶</a></dt>
-<dd><p>Check if <code class="docutils literal notranslate"><span class="pre">sets</span></code> are pairwise disjoint.</p>
-<p>Sets are pairwise disjoint if the length of their union equals the sum of
-their lengths.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>sets</strong> (<cite>list</cite> [<cite>collections.Sized</cite>]) – A list of sized objects.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>disjoint</strong> – Whether the sets are pairwise disjoint.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>bool</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.split.random_scene_split">
-<code class="sig-prename descclassname">core.split.</code><code class="sig-name descname">random_scene_split</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ds</span></em>, <em class="sig-param"><span class="n">tvratio</span></em>, <em class="sig-param"><span class="n">ttratio</span><span class="o">=</span><span class="default_value">1</span></em>, <em class="sig-param"><span class="n">seed</span><span class="o">=</span><span class="default_value">0</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#random_scene_split"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.random_scene_split" title="Permalink to this definition">¶</a></dt>
-<dd><p>Randomly split the tiles of a dataset.</p>
-<p>For each scene, all the tiles of the scene are included in either the
-training, validation or test set, respectively.</p>
-<p>The parameters <code class="docutils literal notranslate"><span class="pre">ttratio</span></code> and <code class="docutils literal notranslate"><span class="pre">tvratio</span></code> control the size of the
-training, validation and test datasets.</p>
-<p>Test dataset size      : (1 - <code class="docutils literal notranslate"><span class="pre">ttratio</span></code>) * len(<code class="docutils literal notranslate"><span class="pre">ds</span></code>)
-Train dataset size     : <code class="docutils literal notranslate"><span class="pre">ttratio</span></code> * <code class="docutils literal notranslate"><span class="pre">tvratio</span></code> * len(<code class="docutils literal notranslate"><span class="pre">ds</span></code>)
-Validation dataset size: <code class="docutils literal notranslate"><span class="pre">ttratio</span></code> * (1 - <code class="docutils literal notranslate"><span class="pre">tvratio</span></code>) * len(<code class="docutils literal notranslate"><span class="pre">ds</span></code>)</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>ds</strong> (<cite>pysegcnn.core.dataset.ImageDataset</cite>) – An instance of <cite>~pysegcnn.core.dataset.ImageDataset</cite>.</p></li>
-<li><p><strong>tvratio</strong> (<cite>float</cite>) – The ratio of training data to validation data, e.g. <code class="docutils literal notranslate"><span class="pre">tvratio</span></code> = 0.8
-means 80% training, 20% validation.</p></li>
-<li><p><strong>ttratio</strong> (<cite>float</cite>, optional) – The ratio of training and validation data to test data, e.g.
-<code class="docutils literal notranslate"><span class="pre">ttratio</span></code> = 0.6 means 60% for training and validation, 40% for
-testing. The default is 1.</p></li>
-<li><p><strong>seed</strong> (<cite>int</cite>, optional) – The random seed for reproducibility. The default is 0.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>AssertionError</strong> – Raised if the splits are not pairwise disjoint.</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><p><strong>subsets</strong> –</p>
-<dl class="simple">
-<dt>Subset dictionary with keys:</dt><dd><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">'train'</span></code></dt><dd><p>dictionary containing the training scenes.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'valid'</span></code></dt><dd><p>dictionary containing the validation scenes.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'test'</span></code></dt><dd><p>dictionary containing the test scenes.</p>
-</dd>
-</dl>
-</dd>
-</dl>
-</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>dict</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.split.random_tile_split">
-<code class="sig-prename descclassname">core.split.</code><code class="sig-name descname">random_tile_split</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ds</span></em>, <em class="sig-param"><span class="n">tvratio</span></em>, <em class="sig-param"><span class="n">ttratio</span><span class="o">=</span><span class="default_value">1</span></em>, <em class="sig-param"><span class="n">seed</span><span class="o">=</span><span class="default_value">0</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/split.html#random_tile_split"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.split.random_tile_split" title="Permalink to this definition">¶</a></dt>
-<dd><p>Randomly split the tiles of a dataset.</p>
-<p>For each scene, the tiles of the scene can be distributed among the
-training, validation and test set.</p>
-<p>The parameters <code class="docutils literal notranslate"><span class="pre">ttratio</span></code> and <code class="docutils literal notranslate"><span class="pre">tvratio</span></code> control the size of the
-training, validation and test datasets.</p>
-<p>Test dataset size      : (1 - <code class="docutils literal notranslate"><span class="pre">ttratio</span></code>) * len(<code class="docutils literal notranslate"><span class="pre">ds</span></code>)
-Train dataset size     : <code class="docutils literal notranslate"><span class="pre">ttratio</span></code> * <code class="docutils literal notranslate"><span class="pre">tvratio</span></code> * len(<code class="docutils literal notranslate"><span class="pre">ds</span></code>)
-Validation dataset size: <code class="docutils literal notranslate"><span class="pre">ttratio</span></code> * (1 - <code class="docutils literal notranslate"><span class="pre">tvratio</span></code>) * len(<code class="docutils literal notranslate"><span class="pre">ds</span></code>)</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>ds</strong> (<cite>pysegcnn.core.dataset.ImageDataset</cite>) – An instance of <cite>~pysegcnn.core.dataset.ImageDataset</cite>.</p></li>
-<li><p><strong>tvratio</strong> (<cite>float</cite>) – The ratio of training data to validation data, e.g. <code class="docutils literal notranslate"><span class="pre">tvratio</span></code> = 0.8
-means 80% training, 20% validation.</p></li>
-<li><p><strong>ttratio</strong> (<cite>float</cite>, optional) – The ratio of training and validation data to test data, e.g.
-<code class="docutils literal notranslate"><span class="pre">ttratio</span></code> = 0.6 means 60% for training and validation, 40% for
-testing. The default is 1.</p></li>
-<li><p><strong>seed</strong> (<cite>int</cite>, optional) – The random seed for reproducibility. The default is 0.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>AssertionError</strong> – Raised if the splits are not pairwise disjoint.</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><p><strong>subsets</strong> –</p>
-<dl class="simple">
-<dt>Subset dictionary with keys:</dt><dd><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">'train'</span></code></dt><dd><p>dictionary containing the training scenes.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'valid'</span></code></dt><dd><p>dictionary containing the validation scenes.</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'test'</span></code></dt><dd><p>dictionary containing the test scenes.</p>
-</dd>
-</dl>
-</dd>
-</dl>
-</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>dict</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-</div>
-</div>
-<div class="section" id="module-core.trainer">
-<span id="core-trainer-module"></span><h2>core.trainer module<a class="headerlink" href="#module-core.trainer" title="Permalink to this headline">¶</a></h2>
-<p>Model configuration and training.</p>
-<p>This module provides an end-to-end framework of dataclasses designed to train
-segmentation models on image datasets.</p>
-<p>See pysegcnn/main/train.py for a complete walkthrough.</p>
-<div class="section" id="id10">
-<h3>License<a class="headerlink" href="#id10" title="Permalink to this headline">¶</a></h3>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-<dl class="py class">
-<dt id="core.trainer.BaseConfig">
-<em class="property">class </em><code class="sig-prename descclassname">core.trainer.</code><code class="sig-name descname">BaseConfig</code><a class="reference internal" href="../_modules/core/trainer.html#BaseConfig"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.BaseConfig" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
-<p>Base <cite>dataclasses.dataclass</cite> for each configuration.</p>
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.trainer.DatasetConfig">
-<em class="property">class </em><code class="sig-prename descclassname">core.trainer.</code><code class="sig-name descname">DatasetConfig</code><span class="sig-paren">(</span><em class="sig-param">dataset_name: str</em>, <em class="sig-param">root_dir: pathlib.Path</em>, <em class="sig-param">bands: list</em>, <em class="sig-param">tile_size: int</em>, <em class="sig-param">gt_pattern: str</em>, <em class="sig-param">seed: int</em>, <em class="sig-param">sort: bool = False</em>, <em class="sig-param">transforms: list = &lt;factory&gt;</em>, <em class="sig-param">pad: bool = False</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#DatasetConfig"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.DatasetConfig" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.trainer.BaseConfig" title="core.trainer.BaseConfig"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.trainer.BaseConfig</span></code></a></p>
-<p>Dataset configuration class.</p>
-<p>Instanciate a dataset.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>dataset_name</strong> (<cite>str</cite>) – The name of the dataset.</p></li>
-<li><p><strong>root_dir</strong> (<cite>pathlib.Path</cite>) – The root directory, path to the dataset.</p></li>
-<li><p><strong>bands</strong> (<cite>list</cite> [<cite>str</cite>]) – A list of the spectral bands to use.</p></li>
-<li><p><strong>tile_size</strong> (<cite>int</cite>) – The size of the tiles. Each scene is divided into square tiles of shape
-(tile_size, tile_size).</p></li>
-<li><p><strong>gt_pattern</strong> (<cite>str</cite>) – A pattern to match the ground truth naming convention. All directories
-and subdirectories in <code class="docutils literal notranslate"><span class="pre">root_dir</span></code> are searched for files matching
-<code class="docutils literal notranslate"><span class="pre">gt_pattern</span></code>.</p></li>
-<li><p><strong>seed</strong> (<cite>int</cite>) – The random seed. Used to split the dataset into training, validation
-and test set. Useful for reproducibility. The default is 0.</p></li>
-<li><p><strong>sort</strong> (<cite>bool</cite>, optional) – Whether to chronologically sort the samples. Useful for time series
-data. The default is False.</p></li>
-<li><p><strong>transforms</strong> (<cite>list</cite> [<cite>pysegcnn.core.split.Augment</cite>], optional) – List of <cite>pysegcnn.core.split.Augment</cite> instances. Each item in
-<code class="docutils literal notranslate"><span class="pre">transforms</span></code> generates a distinct transformed version of the dataset.
-The total dataset is composed of the original untransformed dataset
-together with each transformed version of it.
-If <code class="docutils literal notranslate"><span class="pre">transforms</span></code> = [], only the original dataset is used.
-The default is [].</p></li>
-<li><p><strong>pad</strong> (<cite>bool</cite>, optional) – Whether to center pad the input image. Set <code class="docutils literal notranslate"><span class="pre">pad</span></code> = True, if the
-images are not evenly divisible by the <code class="docutils literal notranslate"><span class="pre">tile_size</span></code>. The image data is
-padded with a constant padding value of zero. For each image, the
-corresponding ground truth image is padded with a “no data” label.
-The default is False.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.trainer.DatasetConfig.init_dataset" title="core.trainer.DatasetConfig.init_dataset"><code class="xref py py-obj docutils literal notranslate"><span class="pre">init_dataset</span></code></a>()</p></td>
-<td><p>Instanciate the dataset.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py attribute">
-<dt id="core.trainer.DatasetConfig.bands">
-<code class="sig-name descname">bands</code><em class="property">: list</em><a class="headerlink" href="#core.trainer.DatasetConfig.bands" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.DatasetConfig.dataset_name">
-<code class="sig-name descname">dataset_name</code><em class="property">: str</em><a class="headerlink" href="#core.trainer.DatasetConfig.dataset_name" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.DatasetConfig.gt_pattern">
-<code class="sig-name descname">gt_pattern</code><em class="property">: str</em><a class="headerlink" href="#core.trainer.DatasetConfig.gt_pattern" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py method">
-<dt id="core.trainer.DatasetConfig.init_dataset">
-<code class="sig-name descname">init_dataset</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#DatasetConfig.init_dataset"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.DatasetConfig.init_dataset" title="Permalink to this definition">¶</a></dt>
-<dd><p>Instanciate the dataset.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>dataset</strong> – An instance of <cite>pysegcnn.core.dataset.ImageDataset</cite>.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>pysegcnn.core.dataset.ImageDataset</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.DatasetConfig.pad">
-<code class="sig-name descname">pad</code><em class="property">: bool</em><em class="property"> = False</em><a class="headerlink" href="#core.trainer.DatasetConfig.pad" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.DatasetConfig.root_dir">
-<code class="sig-name descname">root_dir</code><em class="property">: pathlib.Path</em><a class="headerlink" href="#core.trainer.DatasetConfig.root_dir" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.DatasetConfig.seed">
-<code class="sig-name descname">seed</code><em class="property">: int</em><a class="headerlink" href="#core.trainer.DatasetConfig.seed" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.DatasetConfig.sort">
-<code class="sig-name descname">sort</code><em class="property">: bool</em><em class="property"> = False</em><a class="headerlink" href="#core.trainer.DatasetConfig.sort" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.DatasetConfig.tile_size">
-<code class="sig-name descname">tile_size</code><em class="property">: int</em><a class="headerlink" href="#core.trainer.DatasetConfig.tile_size" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.DatasetConfig.transforms">
-<code class="sig-name descname">transforms</code><em class="property">: list</em><a class="headerlink" href="#core.trainer.DatasetConfig.transforms" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.trainer.EarlyStopping">
-<em class="property">class </em><code class="sig-prename descclassname">core.trainer.</code><code class="sig-name descname">EarlyStopping</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">mode</span><span class="o">=</span><span class="default_value">'max'</span></em>, <em class="sig-param"><span class="n">best</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">min_delta</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">patience</span><span class="o">=</span><span class="default_value">10</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#EarlyStopping"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.EarlyStopping" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
-<p><a href="#id25"><span class="problematic" id="id26">`Early stopping`_</span></a> algorithm.</p>
-<p>This implementation of the early stopping algorithm advances a counter each
-time a metric did not improve over a training epoch. If the metric does not
-improve over more than <code class="docutils literal notranslate"><span class="pre">patience</span></code> epochs, the early stopping criterion is
-met.</p>
-<p>See <cite>pysegcnn.core.trainer.NetworkTrainer.train</cite> for an example
-implementation.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>mode</strong> (<cite>str</cite>, optional) – The mode of the early stopping. Depends on the metric measuring
-performance. When using model loss as metric, use <code class="docutils literal notranslate"><span class="pre">mode</span></code> = ‘min’,
-however, when using accuracy as metric, use <code class="docutils literal notranslate"><span class="pre">mode</span></code> = ‘max’. The
-default is ‘max’.</p></li>
-<li><p><strong>best</strong> (<cite>float</cite>, optional) – Threshold indicating the best metric score. At instanciation, set
-<code class="docutils literal notranslate"><span class="pre">best</span></code> to the worst possible score of the metric. <code class="docutils literal notranslate"><span class="pre">best</span></code> will be
-overwritten during training. The default is 0.</p></li>
-<li><p><strong>min_delta</strong> (<cite>float</cite>, optional) – Minimum change in early stopping metric to be considered as an
-improvement. The default is 0.</p></li>
-<li><p><strong>patience</strong> (<cite>int</cite>, optional) – The number of epochs to wait for an improvement in the early stopping
-metric. The default is 10.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>ValueError</strong> – Raised if <code class="docutils literal notranslate"><span class="pre">mode</span></code> is not either ‘min’ or ‘max’.</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><ul class="simple">
-<li><p><em>None.</em></p></li>
-<li><p><em>.. _Early stopping</em> – <a class="reference external" href="https://en.wikipedia.org/wiki/Early_stopping">https://en.wikipedia.org/wiki/Early_stopping</a></p></li>
-</ul>
-</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.trainer.EarlyStopping.decreased" title="core.trainer.EarlyStopping.decreased"><code class="xref py py-obj docutils literal notranslate"><span class="pre">decreased</span></code></a>(metric, best, min_delta)</p></td>
-<td><p>Whether a metric decreased with respect to a best score.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.trainer.EarlyStopping.increased" title="core.trainer.EarlyStopping.increased"><code class="xref py py-obj docutils literal notranslate"><span class="pre">increased</span></code></a>(metric, best, min_delta)</p></td>
-<td><p>Whether a metric increased with respect to a best score.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.trainer.EarlyStopping.stop" title="core.trainer.EarlyStopping.stop"><code class="xref py py-obj docutils literal notranslate"><span class="pre">stop</span></code></a>(metric)</p></td>
-<td><p>Advance early stopping counter.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.trainer.EarlyStopping.decreased">
-<code class="sig-name descname">decreased</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">metric</span></em>, <em class="sig-param"><span class="n">best</span></em>, <em class="sig-param"><span class="n">min_delta</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#EarlyStopping.decreased"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.EarlyStopping.decreased" title="Permalink to this definition">¶</a></dt>
-<dd><p>Whether a metric decreased with respect to a best score.</p>
-<p>Measure improvement for metrics that are considered as ‘better’ when
-they decrease, e.g. model loss, mean squared error, etc.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>metric</strong> (<cite>float</cite>) – The current score.</p></li>
-<li><p><strong>best</strong> (<cite>float</cite>) – The current best score.</p></li>
-<li><p><strong>min_delta</strong> (<cite>float</cite>) – Minimum change to be considered as an improvement.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p>Whether the metric improved.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>bool</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.trainer.EarlyStopping.increased">
-<code class="sig-name descname">increased</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">metric</span></em>, <em class="sig-param"><span class="n">best</span></em>, <em class="sig-param"><span class="n">min_delta</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#EarlyStopping.increased"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.EarlyStopping.increased" title="Permalink to this definition">¶</a></dt>
-<dd><p>Whether a metric increased with respect to a best score.</p>
-<p>Measure improvement for metrics that are considered as ‘better’ when
-they increase, e.g. accuracy, precision, recall, etc.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>metric</strong> (<cite>float</cite>) – The current score.</p></li>
-<li><p><strong>best</strong> (<cite>float</cite>) – The current best score.</p></li>
-<li><p><strong>min_delta</strong> (<cite>float</cite>) – Minimum change to be considered as an improvement.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p>Whether the metric improved.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>bool</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.trainer.EarlyStopping.stop">
-<code class="sig-name descname">stop</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">metric</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#EarlyStopping.stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.EarlyStopping.stop" title="Permalink to this definition">¶</a></dt>
-<dd><p>Advance early stopping counter.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>metric</strong> (<cite>float</cite>) – The current metric score.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>early_stop</strong> – Whether the early stopping criterion is met.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>bool</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.trainer.EvalConfig">
-<em class="property">class </em><code class="sig-prename descclassname">core.trainer.</code><code class="sig-name descname">EvalConfig</code><span class="sig-paren">(</span><em class="sig-param">state_file: pathlib.Path</em>, <em class="sig-param">test: object</em>, <em class="sig-param">predict_scene: bool = False</em>, <em class="sig-param">plot_samples: bool = False</em>, <em class="sig-param">plot_scenes: bool = False</em>, <em class="sig-param">plot_bands: list = &lt;factory&gt;</em>, <em class="sig-param">cm: bool = True</em>, <em class="sig-param">figsize: tuple = (10</em>, <em class="sig-param">10)</em>, <em class="sig-param">alpha: int = 5</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#EvalConfig"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.EvalConfig" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.trainer.BaseConfig" title="core.trainer.BaseConfig"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.trainer.BaseConfig</span></code></a></p>
-<p>Model inference configuration.</p>
-<p>Evaluate a model.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>state_file</strong> (<cite>pathlib.Path</cite>) – Path to the model to evaluate.</p></li>
-<li><p><strong>test</strong> (<cite>bool</cite> or <cite>None</cite>) – Whether to evaluate the model on the training(<code class="docutils literal notranslate"><span class="pre">test</span></code> = <cite>None</cite>), the
-validation (<code class="docutils literal notranslate"><span class="pre">test</span></code> = False) or the test set (<code class="docutils literal notranslate"><span class="pre">test</span></code> = True).</p></li>
-<li><p><strong>predict_scene</strong> (<cite>bool</cite>, optional) – The model prediction order. If False, the samples (tiles) of a dataset
-are predicted in any order and the scenes are not reconstructed.
-If True, the samples (tiles) are ordered according to the scene they
-belong to and a model prediction for each entire reconstructed scene is
-returned. The default is False.</p></li>
-<li><p><strong>plot_samples</strong> (<cite>bool</cite>, optional) – Whether to save a plot of false color composite, ground truth and model
-prediction for each sample (tile). Only used if <code class="docutils literal notranslate"><span class="pre">predict_scene</span></code> =
-False. The default is False.</p></li>
-<li><p><strong>plot_scenes</strong> (<cite>bool</cite>, optional) – Whether to save a plot of false color composite, ground truth and model
-prediction for each entire scene. Only used if <code class="docutils literal notranslate"><span class="pre">predict_scene</span></code> =
-True. The default is False.</p></li>
-<li><p><strong>plot_bands</strong> (<cite>list</cite> [<cite>str</cite>], optional) – The bands to build the false color composite. The default is
-[‘nir’, ‘red’, ‘green’].</p></li>
-<li><p><strong>cm</strong> (<cite>bool</cite>, optional) – Whether to compute and plot the confusion matrix. The default is True.</p></li>
-<li><p><strong>figsize</strong> (<cite>tuple</cite>, optional) – The figure size in centimeters. The default is (10, 10).</p></li>
-<li><p><strong>alpha</strong> (<cite>int</cite>, optional) – The level of the percentiles for contrast stretching of the false color
-compsite. The default is 0, i.e. no stretching.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<dl class="py attribute">
-<dt id="core.trainer.EvalConfig.alpha">
-<code class="sig-name descname">alpha</code><em class="property">: int</em><em class="property"> = 5</em><a class="headerlink" href="#core.trainer.EvalConfig.alpha" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.EvalConfig.cm">
-<code class="sig-name descname">cm</code><em class="property">: bool</em><em class="property"> = True</em><a class="headerlink" href="#core.trainer.EvalConfig.cm" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.EvalConfig.figsize">
-<code class="sig-name descname">figsize</code><em class="property">: tuple</em><em class="property"> = (10, 10)</em><a class="headerlink" href="#core.trainer.EvalConfig.figsize" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.EvalConfig.plot_bands">
-<code class="sig-name descname">plot_bands</code><em class="property">: list</em><a class="headerlink" href="#core.trainer.EvalConfig.plot_bands" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.EvalConfig.plot_samples">
-<code class="sig-name descname">plot_samples</code><em class="property">: bool</em><em class="property"> = False</em><a class="headerlink" href="#core.trainer.EvalConfig.plot_samples" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.EvalConfig.plot_scenes">
-<code class="sig-name descname">plot_scenes</code><em class="property">: bool</em><em class="property"> = False</em><a class="headerlink" href="#core.trainer.EvalConfig.plot_scenes" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.EvalConfig.predict_scene">
-<code class="sig-name descname">predict_scene</code><em class="property">: bool</em><em class="property"> = False</em><a class="headerlink" href="#core.trainer.EvalConfig.predict_scene" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.EvalConfig.state_file">
-<code class="sig-name descname">state_file</code><em class="property">: pathlib.Path</em><a class="headerlink" href="#core.trainer.EvalConfig.state_file" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.EvalConfig.test">
-<code class="sig-name descname">test</code><em class="property">: object</em><a class="headerlink" href="#core.trainer.EvalConfig.test" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.trainer.LogConfig">
-<em class="property">class </em><code class="sig-prename descclassname">core.trainer.</code><code class="sig-name descname">LogConfig</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">state_file</span><span class="p">:</span> <span class="n">pathlib.Path</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#LogConfig"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.LogConfig" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.trainer.BaseConfig" title="core.trainer.BaseConfig"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.trainer.BaseConfig</span></code></a></p>
-<p>Logging configuration class.</p>
-<p>Generate the model log file.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>state_file</strong> (<cite>pathlib.Path</cite>) – Path to a model state file.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.trainer.LogConfig.init_log" title="core.trainer.LogConfig.init_log"><code class="xref py py-obj docutils literal notranslate"><span class="pre">init_log</span></code></a>(init_str)</p></td>
-<td><p>Generate a string to identify a new model run.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.trainer.LogConfig.now" title="core.trainer.LogConfig.now"><code class="xref py py-obj docutils literal notranslate"><span class="pre">now</span></code></a>()</p></td>
-<td><p>Return the current date and time.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.trainer.LogConfig.init_log">
-<em class="property">static </em><code class="sig-name descname">init_log</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">init_str</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#LogConfig.init_log"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.LogConfig.init_log" title="Permalink to this definition">¶</a></dt>
-<dd><p>Generate a string to identify a new model run.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>init_str</strong> (<cite>str</cite>) – The string to write to the model log file.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.trainer.LogConfig.now">
-<em class="property">static </em><code class="sig-name descname">now</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#LogConfig.now"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.LogConfig.now" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return the current date and time.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>date</strong> – The current date and time.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>datetime.datetime</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.LogConfig.state_file">
-<code class="sig-name descname">state_file</code><em class="property">: pathlib.Path</em><a class="headerlink" href="#core.trainer.LogConfig.state_file" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.trainer.ModelConfig">
-<em class="property">class </em><code class="sig-prename descclassname">core.trainer.</code><code class="sig-name descname">ModelConfig</code><span class="sig-paren">(</span><em class="sig-param">model_name: str</em>, <em class="sig-param">filters: list</em>, <em class="sig-param">torch_seed: int</em>, <em class="sig-param">optim_name: str</em>, <em class="sig-param">loss_name: str</em>, <em class="sig-param">skip_connection: bool = True</em>, <em class="sig-param">kwargs: dict = &lt;factory&gt;</em>, <em class="sig-param">batch_size: int = 64</em>, <em class="sig-param">checkpoint: bool = False</em>, <em class="sig-param">transfer: bool = False</em>, <em class="sig-param">pretrained_model: str = ''</em>, <em class="sig-param">lr: float = 0.001</em>, <em class="sig-param">early_stop: bool = False</em>, <em class="sig-param">mode: str = 'max'</em>, <em class="sig-param">delta: float = 0</em>, <em class="sig-param">patience: int = 10</em>, <em class="sig-param">epochs: int = 50</em>, <em class="sig-param">nthreads: int = 2</em>, <em class="sig-param">save: bool = True</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#ModelConfig"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.ModelConfig" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.trainer.BaseConfig" title="core.trainer.BaseConfig"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.trainer.BaseConfig</span></code></a></p>
-<p>Model configuration class.</p>
-<p>Instanciate a (pretrained) model.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>model_name</strong> (<cite>str</cite>) – The name of the model.</p></li>
-<li><p><strong>filters</strong> (<cite>list</cite> [<cite>int</cite>]) – List of input channels to the convolutional layers.</p></li>
-<li><p><strong>torch_seed</strong> (<cite>int</cite>) – The random seed to initialize the model weights.
-Useful for reproducibility.</p></li>
-<li><p><strong>optim_name</strong> (<cite>str</cite>) – The name of the optimizer to update the model weights.</p></li>
-<li><p><strong>loss_name</strong> (<cite>str</cite>) – The name of the loss function measuring the model error.</p></li>
-<li><p><strong>skip_connection</strong> (<cite>bool</cite>, optional) – Whether to apply skip connections. The defaul is True.</p></li>
-<li><p><strong>kwargs</strong> (<cite>dict</cite>, optional) – The configuration for each convolution in the model. The default is
-{‘kernel_size’: 3, ‘stride’: 1, ‘dilation’: 1}.</p></li>
-<li><p><strong>batch_size</strong> (<cite>int</cite>, optional) – The model batch size. Determines the number of samples to process
-before updating the model weights. The default is 64.</p></li>
-<li><p><strong>checkpoint</strong> (<cite>bool</cite>, optional) – Whether to resume training from an existing model checkpoint. The
-default is False.</p></li>
-<li><p><strong>transfer</strong> (<cite>bool</cite>, optional) – Whether to use a model for transfer learning on a new dataset. If True,
-the model architecture of <code class="docutils literal notranslate"><span class="pre">pretrained_model</span></code> is adjusted to a new
-dataset. The default is False.</p></li>
-<li><p><strong>pretrained_model</strong> (<cite>str</cite>, optional) – The name of the pretrained model to use for transfer learning.
-The default is ‘’.</p></li>
-<li><p><strong>lr</strong> (<cite>float</cite>, optional) – The learning rate used by the gradient descent algorithm.
-The default is 0.001.</p></li>
-<li><p><strong>early_stop</strong> (<cite>bool</cite>, optional) – Whether to apply <a href="#id27"><span class="problematic" id="id28">`early stopping`_</span></a>. The default is False.</p></li>
-<li><p><strong>mode</strong> (<cite>str</cite>, optional) – The mode of the early stopping. Depends on the metric measuring
-performance. When using model loss as metric, use <code class="docutils literal notranslate"><span class="pre">mode</span></code> = ‘min’,
-however, when using accuracy as metric, use <code class="docutils literal notranslate"><span class="pre">mode</span></code> = ‘max’. For now,
-only <code class="docutils literal notranslate"><span class="pre">mode</span></code> = ‘max’ is supported. Only used if <code class="docutils literal notranslate"><span class="pre">early_stop</span></code> = True.
-The default is ‘max’.</p></li>
-<li><p><strong>delta</strong> (<cite>float</cite>, optional) – Minimum change in early stopping metric to be considered as an
-improvement. Only used if <code class="docutils literal notranslate"><span class="pre">early_stop</span></code> = True. The default is 0.</p></li>
-<li><p><strong>patience</strong> (<cite>int</cite>, optional) – The number of epochs to wait for an improvement in the early stopping
-metric. If the model does not improve over more than <code class="docutils literal notranslate"><span class="pre">patience</span></code>
-epochs, quit training. Only used if <code class="docutils literal notranslate"><span class="pre">early_stop</span></code> = True.
-The default is 10.</p></li>
-<li><p><strong>epochs</strong> (<cite>int</cite>, optional) – The maximum number of epochs to train. The default is 50.</p></li>
-<li><p><strong>nthreads</strong> (<cite>int</cite>, optional) – The number of cpu threads to use during training. The default is
-torch.get_num_threads().</p></li>
-<li><p><strong>save</strong> (<cite>bool</cite>, optional) – Whether to save the model state to disk. Model states are saved in
-pysegcnn/main/_models. The default is True.</p></li>
-<li><p><strong>_early stopping</strong> (<em>.</em>) – <a class="reference external" href="https://en.wikipedia.org/wiki/Early_stopping">https://en.wikipedia.org/wiki/Early_stopping</a></p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.trainer.ModelConfig.init_loss_function" title="core.trainer.ModelConfig.init_loss_function"><code class="xref py py-obj docutils literal notranslate"><span class="pre">init_loss_function</span></code></a>()</p></td>
-<td><p>Instanciate the loss function.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.trainer.ModelConfig.init_model" title="core.trainer.ModelConfig.init_model"><code class="xref py py-obj docutils literal notranslate"><span class="pre">init_model</span></code></a>(ds, state_file)</p></td>
-<td><p>Instanciate the model and the optimizer.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.trainer.ModelConfig.init_optimizer" title="core.trainer.ModelConfig.init_optimizer"><code class="xref py py-obj docutils literal notranslate"><span class="pre">init_optimizer</span></code></a>(model)</p></td>
-<td><p>Instanciate the optimizer.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.trainer.ModelConfig.load_checkpoint" title="core.trainer.ModelConfig.load_checkpoint"><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_checkpoint</span></code></a>(model, optimizer, state_file)</p></td>
-<td><p>Load an existing model checkpoint.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.trainer.ModelConfig.transfer_model" title="core.trainer.ModelConfig.transfer_model"><code class="xref py py-obj docutils literal notranslate"><span class="pre">transfer_model</span></code></a>(state_file, ds)</p></td>
-<td><p>Adjust a pretrained model to a new dataset.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py attribute">
-<dt id="core.trainer.ModelConfig.batch_size">
-<code class="sig-name descname">batch_size</code><em class="property">: int</em><em class="property"> = 64</em><a class="headerlink" href="#core.trainer.ModelConfig.batch_size" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.ModelConfig.checkpoint">
-<code class="sig-name descname">checkpoint</code><em class="property">: bool</em><em class="property"> = False</em><a class="headerlink" href="#core.trainer.ModelConfig.checkpoint" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.ModelConfig.delta">
-<code class="sig-name descname">delta</code><em class="property">: float</em><em class="property"> = 0</em><a class="headerlink" href="#core.trainer.ModelConfig.delta" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.ModelConfig.early_stop">
-<code class="sig-name descname">early_stop</code><em class="property">: bool</em><em class="property"> = False</em><a class="headerlink" href="#core.trainer.ModelConfig.early_stop" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.ModelConfig.epochs">
-<code class="sig-name descname">epochs</code><em class="property">: int</em><em class="property"> = 50</em><a class="headerlink" href="#core.trainer.ModelConfig.epochs" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.ModelConfig.filters">
-<code class="sig-name descname">filters</code><em class="property">: list</em><a class="headerlink" href="#core.trainer.ModelConfig.filters" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py method">
-<dt id="core.trainer.ModelConfig.init_loss_function">
-<code class="sig-name descname">init_loss_function</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#ModelConfig.init_loss_function"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.ModelConfig.init_loss_function" title="Permalink to this definition">¶</a></dt>
-<dd><p>Instanciate the loss function.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>loss_function</strong> – An instance of <cite>torch.nn.Module</cite>.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>torch.nn.Module</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.trainer.ModelConfig.init_model">
-<code class="sig-name descname">init_model</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ds</span></em>, <em class="sig-param"><span class="n">state_file</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#ModelConfig.init_model"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.ModelConfig.init_model" title="Permalink to this definition">¶</a></dt>
-<dd><p>Instanciate the model and the optimizer.</p>
-<p>If the model checkpoint <code class="docutils literal notranslate"><span class="pre">state_file</span></code> exists, the pretrained model and
-optimizer states are loaded, otherwise the model and the optimizer are
-initialized from scratch.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>ds</strong> (<cite>pysegcnn.core.dataset.ImageDataset</cite>) – An instance of <cite>pysegcnn.core.dataset.ImageDataset</cite>.</p></li>
-<li><p><strong>state_file</strong> (<cite>pathlib.Path</cite>) – Path to a model checkpoint.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><ul>
-<li><p><strong>model</strong> (<cite>pysegcnn.core.models.Network</cite>) – An instance of <cite>pysegcnn.core.models.Network</cite>.</p></li>
-<li><p><strong>optimizer</strong> (<cite>torch.optim.Optimizer</cite>) – An instance of <cite>torch.optim.Optimizer</cite>.</p></li>
-<li><p><strong>checkpoint_state</strong> (<cite>dict</cite> [<cite>str</cite>, <cite>numpy.ndarray</cite>]) – If the model checkpoint <code class="docutils literal notranslate"><span class="pre">state_file</span></code> exists, <code class="docutils literal notranslate"><span class="pre">checkpoint_state</span></code>
-has keys:</p>
-<blockquote>
-<div><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">'ta'</span></code></dt><dd><p>The accuracy on the training set (<cite>numpy.ndarray</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'tl'</span></code></dt><dd><p>The loss on the training set (<cite>numpy.ndarray</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'va'</span></code></dt><dd><p>The accuracy on the validation set (<cite>numpy.ndarray</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'vl'</span></code></dt><dd><p>The loss on the validation set (<cite>numpy.ndarray</cite>).</p>
-</dd>
-</dl>
-</div></blockquote>
-</li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt id="core.trainer.ModelConfig.init_optimizer">
-<code class="sig-name descname">init_optimizer</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">model</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#ModelConfig.init_optimizer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.ModelConfig.init_optimizer" title="Permalink to this definition">¶</a></dt>
-<dd><p>Instanciate the optimizer.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>model</strong> (<cite>torch.nn.Module</cite>) – An instance of <cite>torch.nn.Module</cite>.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>optimizer</strong> – An instance of <cite>torch.optim.Optimizer</cite>.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>torch.optim.Optimizer</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.ModelConfig.kwargs">
-<code class="sig-name descname">kwargs</code><em class="property">: dict</em><a class="headerlink" href="#core.trainer.ModelConfig.kwargs" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py method">
-<dt id="core.trainer.ModelConfig.load_checkpoint">
-<em class="property">static </em><code class="sig-name descname">load_checkpoint</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">model</span></em>, <em class="sig-param"><span class="n">optimizer</span></em>, <em class="sig-param"><span class="n">state_file</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#ModelConfig.load_checkpoint"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.ModelConfig.load_checkpoint" title="Permalink to this definition">¶</a></dt>
-<dd><p>Load an existing model checkpoint.</p>
-<p>If the model checkpoint <code class="docutils literal notranslate"><span class="pre">state_file</span></code> exists, the pretrained model and
-optimizer states are loaded.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>model</strong> (<cite>pysegcnn.core.models.Network</cite>) – An instance of <cite>pysegcnn.core.models.Network</cite>.</p></li>
-<li><p><strong>optimizer</strong> (<cite>torch.optim.Optimizer</cite>) – An instance of <cite>torch.optim.Optimizer</cite>.</p></li>
-<li><p><strong>state_file</strong> (<cite>pathlib.Path</cite>) – Path to the model checkpoint.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><ul>
-<li><p><strong>model</strong> (<cite>pysegcnn.core.models.Network</cite>) – An instance of <cite>pysegcnn.core.models.Network</cite>.</p></li>
-<li><p><strong>optimizer</strong> (<cite>torch.optim.Optimizer</cite>) – An instance of <cite>torch.optim.Optimizer</cite>.</p></li>
-<li><p><strong>checkpoint_state</strong> (<cite>dict</cite> [<cite>str</cite>, <cite>numpy.ndarray</cite>]) – If the model checkpoint <code class="docutils literal notranslate"><span class="pre">state_file</span></code> exists, <code class="docutils literal notranslate"><span class="pre">checkpoint_state</span></code>
-has keys:</p>
-<blockquote>
-<div><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">'ta'</span></code></dt><dd><p>The accuracy on the training set (<cite>numpy.ndarray</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'tl'</span></code></dt><dd><p>The loss on the training set (<cite>numpy.ndarray</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'va'</span></code></dt><dd><p>The accuracy on the validation set (<cite>numpy.ndarray</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'vl'</span></code></dt><dd><p>The loss on the validation set (<cite>numpy.ndarray</cite>).</p>
-</dd>
-</dl>
-</div></blockquote>
-</li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.ModelConfig.loss_name">
-<code class="sig-name descname">loss_name</code><em class="property">: str</em><a class="headerlink" href="#core.trainer.ModelConfig.loss_name" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.ModelConfig.lr">
-<code class="sig-name descname">lr</code><em class="property">: float</em><em class="property"> = 0.001</em><a class="headerlink" href="#core.trainer.ModelConfig.lr" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.ModelConfig.mode">
-<code class="sig-name descname">mode</code><em class="property">: str</em><em class="property"> = 'max'</em><a class="headerlink" href="#core.trainer.ModelConfig.mode" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.ModelConfig.model_name">
-<code class="sig-name descname">model_name</code><em class="property">: str</em><a class="headerlink" href="#core.trainer.ModelConfig.model_name" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.ModelConfig.nthreads">
-<code class="sig-name descname">nthreads</code><em class="property">: int</em><em class="property"> = 2</em><a class="headerlink" href="#core.trainer.ModelConfig.nthreads" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.ModelConfig.optim_name">
-<code class="sig-name descname">optim_name</code><em class="property">: str</em><a class="headerlink" href="#core.trainer.ModelConfig.optim_name" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.ModelConfig.patience">
-<code class="sig-name descname">patience</code><em class="property">: int</em><em class="property"> = 10</em><a class="headerlink" href="#core.trainer.ModelConfig.patience" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.ModelConfig.pretrained_model">
-<code class="sig-name descname">pretrained_model</code><em class="property">: str</em><em class="property"> = ''</em><a class="headerlink" href="#core.trainer.ModelConfig.pretrained_model" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.ModelConfig.save">
-<code class="sig-name descname">save</code><em class="property">: bool</em><em class="property"> = True</em><a class="headerlink" href="#core.trainer.ModelConfig.save" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.ModelConfig.skip_connection">
-<code class="sig-name descname">skip_connection</code><em class="property">: bool</em><em class="property"> = True</em><a class="headerlink" href="#core.trainer.ModelConfig.skip_connection" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.ModelConfig.torch_seed">
-<code class="sig-name descname">torch_seed</code><em class="property">: int</em><a class="headerlink" href="#core.trainer.ModelConfig.torch_seed" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.ModelConfig.transfer">
-<code class="sig-name descname">transfer</code><em class="property">: bool</em><em class="property"> = False</em><a class="headerlink" href="#core.trainer.ModelConfig.transfer" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py method">
-<dt id="core.trainer.ModelConfig.transfer_model">
-<em class="property">static </em><code class="sig-name descname">transfer_model</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">state_file</span></em>, <em class="sig-param"><span class="n">ds</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#ModelConfig.transfer_model"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.ModelConfig.transfer_model" title="Permalink to this definition">¶</a></dt>
-<dd><p>Adjust a pretrained model to a new dataset.</p>
-<p>The classification layer of the pretrained model in <code class="docutils literal notranslate"><span class="pre">state_file</span></code> is
-initilialized from scratch with the classes of the new dataset <code class="docutils literal notranslate"><span class="pre">ds</span></code>.</p>
-<p>The remaining model weights are preserved.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>state_file</strong> (<cite>pathlib.Path</cite>) – Path to a pretrained model.</p></li>
-<li><p><strong>ds</strong> (<cite>pysegcnn.core.dataset.ImageDataset</cite>) – An instance of <cite>pysegcnn.core.dataset.ImageDataset</cite>.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><ul class="simple">
-<li><p><strong>TypeError</strong> – Raised if <code class="docutils literal notranslate"><span class="pre">ds</span></code> is not an instance of
-<cite>pysegcnn.core.dataset.ImageDataset</cite>.</p></li>
-<li><p><strong>ValueError</strong> – Raised if the bands of <code class="docutils literal notranslate"><span class="pre">ds</span></code> do not match the bands of the dataset
-the pretrained model was trained with.</p></li>
-</ul>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>model</strong> – An instance of <cite>pysegcnn.core.models.Network</cite>. The pretrained model
-adjusted to the new dataset.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>pysegcnn.core.models.Network</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.trainer.NetworkTrainer">
-<em class="property">class </em><code class="sig-prename descclassname">core.trainer.</code><code class="sig-name descname">NetworkTrainer</code><span class="sig-paren">(</span><em class="sig-param">model: pysegcnn.core.models.Network</em>, <em class="sig-param">optimizer: torch.optim.optimizer.Optimizer</em>, <em class="sig-param">loss_function: torch.nn.modules.module.Module</em>, <em class="sig-param">train_dl: torch.utils.data.dataloader.DataLoader</em>, <em class="sig-param">valid_dl: torch.utils.data.dataloader.DataLoader</em>, <em class="sig-param">test_dl: torch.utils.data.dataloader.DataLoader</em>, <em class="sig-param">state_file: pathlib.Path</em>, <em class="sig-param">epochs: int = 1</em>, <em class="sig-param">nthreads: int = 2</em>, <em class="sig-param">early_stop: bool = False</em>, <em class="sig-param">mode: str = 'max'</em>, <em class="sig-param">delta: float = 0</em>, <em class="sig-param">patience: int = 10</em>, <em class="sig-param">checkpoint_state: dict = &lt;factory&gt;</em>, <em class="sig-param">save: bool = True</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#NetworkTrainer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.NetworkTrainer" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.trainer.BaseConfig" title="core.trainer.BaseConfig"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.trainer.BaseConfig</span></code></a></p>
-<p>Model training class.</p>
-<p>Generic class to train an instance of <cite>pysegcnn.core.models.Network</cite> on
-a dataset of type <cite>pysegcnn.core.dataset.ImageDataset</cite>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>model</strong> (<cite>pysegcnn.core.models.Network</cite>) – The model to train. An instance of <cite>pysegcnn.core.models.Network</cite>.</p></li>
-<li><p><strong>optimizer</strong> (<cite>torch.optim.Optimizer</cite>) – The optimizer to update the model weights. An instance of
-<cite>torch.optim.Optimizer</cite>.</p></li>
-<li><p><strong>loss_function</strong> (<cite>torch.nn.Module</cite>) – The loss function to compute the model error. An instance of
-<cite>torch.nn.Module</cite>.</p></li>
-<li><p><strong>train_dl</strong> (<cite>torch.utils.data.DataLoader</cite>) – The training <cite>torch.utils.data.DataLoader</cite> instance.</p></li>
-<li><p><strong>valid_dl</strong> (<cite>torch.utils.data.DataLoader</cite>) – The validation <cite>torch.utils.data.DataLoader</cite> instance.</p></li>
-<li><p><strong>test_dl</strong> (<cite>torch.utils.data.DataLoader</cite>) – The test <cite>torch.utils.data.DataLoader</cite> instance.</p></li>
-<li><p><strong>state_file</strong> (<cite>pathlib.Path</cite>) – Path to save the model state.</p></li>
-<li><p><strong>epochs</strong> (<cite>int</cite>, optional) – The maximum number of epochs to train. The default is 1.</p></li>
-<li><p><strong>nthreads</strong> (<cite>int</cite>, optional) – The number of cpu threads to use during training. The default is
-torch.get_num_threads().</p></li>
-<li><p><strong>early_stop</strong> (<cite>bool</cite>, optional) – Whether to apply <a href="#id29"><span class="problematic" id="id30">`early stopping`_</span></a>. The default is False.</p></li>
-<li><p><strong>mode</strong> (<cite>str</cite>, optional) – The mode of the early stopping. Depends on the metric measuring
-performance. When using model loss as metric, use <code class="docutils literal notranslate"><span class="pre">mode</span></code> = ‘min’,
-however, when using accuracy as metric, use <code class="docutils literal notranslate"><span class="pre">mode</span></code> = ‘max’. For now,
-only <code class="docutils literal notranslate"><span class="pre">mode</span></code> = ‘max’ is supported. Only used if <code class="docutils literal notranslate"><span class="pre">early_stop</span></code> = True.
-The default is ‘max’.</p></li>
-<li><p><strong>delta</strong> (<cite>float</cite>, optional) – Minimum change in early stopping metric to be considered as an
-improvement. Only used if <code class="docutils literal notranslate"><span class="pre">early_stop</span></code> = True. The default is 0.</p></li>
-<li><p><strong>patience</strong> (<cite>int</cite>, optional) – The number of epochs to wait for an improvement in the early stopping
-metric. If the model does not improve over more than <code class="docutils literal notranslate"><span class="pre">patience</span></code>
-epochs, quit training. Only used if <code class="docutils literal notranslate"><span class="pre">early_stop</span></code> = True.
-The default is 10.</p></li>
-<li><p><strong>checkpoint_state</strong> (<cite>dict</cite> [<cite>str</cite>, <cite>numpy.ndarray</cite>], optional) – <p>A model checkpoint for <code class="docutils literal notranslate"><span class="pre">model</span></code>. If specified, <code class="docutils literal notranslate"><span class="pre">checkpoint_state</span></code>
-should be a dictionary with keys:</p>
-<blockquote>
-<div><dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">'ta'</span></code></dt><dd><p>The accuracy on the training set (<cite>numpy.ndarray</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'tl'</span></code></dt><dd><p>The loss on the training set (<cite>numpy.ndarray</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'va'</span></code></dt><dd><p>The accuracy on the validation set (<cite>numpy.ndarray</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'vl'</span></code></dt><dd><p>The loss on the validation set (<cite>numpy.ndarray</cite>).</p>
-</dd>
-</dl>
-</div></blockquote>
-<p>The default is {}.</p>
-</p></li>
-<li><p><strong>save</strong> (<cite>bool</cite>, optional) – Whether to save the model state to <code class="docutils literal notranslate"><span class="pre">state_file</span></code>. The default is True.</p></li>
-<li><p><strong>_early stopping</strong> (<em>.</em>) – <a class="reference external" href="https://en.wikipedia.org/wiki/Early_stopping">https://en.wikipedia.org/wiki/Early_stopping</a></p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.trainer.NetworkTrainer.predict" title="core.trainer.NetworkTrainer.predict"><code class="xref py py-obj docutils literal notranslate"><span class="pre">predict</span></code></a>()</p></td>
-<td><p>Model inference at training time.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.trainer.NetworkTrainer.save_state" title="core.trainer.NetworkTrainer.save_state"><code class="xref py py-obj docutils literal notranslate"><span class="pre">save_state</span></code></a>()</p></td>
-<td><p>Save the model state.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.trainer.NetworkTrainer.train" title="core.trainer.NetworkTrainer.train"><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code></a>()</p></td>
-<td><p>Train the model.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py attribute">
-<dt id="core.trainer.NetworkTrainer.checkpoint_state">
-<code class="sig-name descname">checkpoint_state</code><em class="property">: dict</em><a class="headerlink" href="#core.trainer.NetworkTrainer.checkpoint_state" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.NetworkTrainer.delta">
-<code class="sig-name descname">delta</code><em class="property">: float</em><em class="property"> = 0</em><a class="headerlink" href="#core.trainer.NetworkTrainer.delta" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.NetworkTrainer.early_stop">
-<code class="sig-name descname">early_stop</code><em class="property">: bool</em><em class="property"> = False</em><a class="headerlink" href="#core.trainer.NetworkTrainer.early_stop" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.NetworkTrainer.epochs">
-<code class="sig-name descname">epochs</code><em class="property">: int</em><em class="property"> = 1</em><a class="headerlink" href="#core.trainer.NetworkTrainer.epochs" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.NetworkTrainer.loss_function">
-<code class="sig-name descname">loss_function</code><em class="property">: torch.nn.modules.module.Module</em><a class="headerlink" href="#core.trainer.NetworkTrainer.loss_function" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.NetworkTrainer.mode">
-<code class="sig-name descname">mode</code><em class="property">: str</em><em class="property"> = 'max'</em><a class="headerlink" href="#core.trainer.NetworkTrainer.mode" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.NetworkTrainer.model">
-<code class="sig-name descname">model</code><em class="property">: pysegcnn.core.models.Network</em><a class="headerlink" href="#core.trainer.NetworkTrainer.model" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.NetworkTrainer.nthreads">
-<code class="sig-name descname">nthreads</code><em class="property">: int</em><em class="property"> = 2</em><a class="headerlink" href="#core.trainer.NetworkTrainer.nthreads" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.NetworkTrainer.optimizer">
-<code class="sig-name descname">optimizer</code><em class="property">: torch.optim.optimizer.Optimizer</em><a class="headerlink" href="#core.trainer.NetworkTrainer.optimizer" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.NetworkTrainer.patience">
-<code class="sig-name descname">patience</code><em class="property">: int</em><em class="property"> = 10</em><a class="headerlink" href="#core.trainer.NetworkTrainer.patience" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py method">
-<dt id="core.trainer.NetworkTrainer.predict">
-<code class="sig-name descname">predict</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#NetworkTrainer.predict"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.NetworkTrainer.predict" title="Permalink to this definition">¶</a></dt>
-<dd><p>Model inference at training time.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><ul class="simple">
-<li><p><strong>accuracies</strong> (<cite>numpy.ndarray</cite>) – The mean model prediction accuracy on each mini-batch in the
-validation set.</p></li>
-<li><p><strong>losses</strong> (<cite>numpy.ndarray</cite>) – The model loss for each mini-batch in the validation set.</p></li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.NetworkTrainer.save">
-<code class="sig-name descname">save</code><em class="property">: bool</em><em class="property"> = True</em><a class="headerlink" href="#core.trainer.NetworkTrainer.save" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py method">
-<dt id="core.trainer.NetworkTrainer.save_state">
-<code class="sig-name descname">save_state</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#NetworkTrainer.save_state"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.NetworkTrainer.save_state" title="Permalink to this definition">¶</a></dt>
-<dd><p>Save the model state.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p></p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p>None.</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.NetworkTrainer.state_file">
-<code class="sig-name descname">state_file</code><em class="property">: pathlib.Path</em><a class="headerlink" href="#core.trainer.NetworkTrainer.state_file" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.NetworkTrainer.test_dl">
-<code class="sig-name descname">test_dl</code><em class="property">: torch.utils.data.dataloader.DataLoader</em><a class="headerlink" href="#core.trainer.NetworkTrainer.test_dl" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py method">
-<dt id="core.trainer.NetworkTrainer.train">
-<code class="sig-name descname">train</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#NetworkTrainer.train"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.NetworkTrainer.train" title="Permalink to this definition">¶</a></dt>
-<dd><p>Train the model.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><p><strong>training_state</strong> – The training state dictionary with keys:
-<code class="docutils literal notranslate"><span class="pre">'ta'</span></code></p>
-<blockquote>
-<div><p>The accuracy on the training set (<cite>numpy.ndarray</cite>).</p>
-</div></blockquote>
-<dl class="simple">
-<dt><code class="docutils literal notranslate"><span class="pre">'tl'</span></code></dt><dd><p>The loss on the training set (<cite>numpy.ndarray</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'va'</span></code></dt><dd><p>The accuracy on the validation set (<cite>numpy.ndarray</cite>).</p>
-</dd>
-<dt><code class="docutils literal notranslate"><span class="pre">'vl'</span></code></dt><dd><p>The loss on the validation set (<cite>numpy.ndarray</cite>).</p>
-</dd>
-</dl>
-</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>dict</cite> [<cite>str</cite>, <cite>numpy.ndarray</cite>]</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.NetworkTrainer.train_dl">
-<code class="sig-name descname">train_dl</code><em class="property">: torch.utils.data.dataloader.DataLoader</em><a class="headerlink" href="#core.trainer.NetworkTrainer.train_dl" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.NetworkTrainer.valid_dl">
-<code class="sig-name descname">valid_dl</code><em class="property">: torch.utils.data.dataloader.DataLoader</em><a class="headerlink" href="#core.trainer.NetworkTrainer.valid_dl" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.trainer.SplitConfig">
-<em class="property">class </em><code class="sig-prename descclassname">core.trainer.</code><code class="sig-name descname">SplitConfig</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">split_mode</span><span class="p">:</span> <span class="n">str</span></em>, <em class="sig-param"><span class="n">ttratio</span><span class="p">:</span> <span class="n">float</span></em>, <em class="sig-param"><span class="n">tvratio</span><span class="p">:</span> <span class="n">float</span></em>, <em class="sig-param"><span class="n">date</span><span class="p">:</span> <span class="n">str</span> <span class="o">=</span> <span class="default_value">'yyyymmdd'</span></em>, <em class="sig-param"><span class="n">dateformat</span><span class="p">:</span> <span class="n">str</span> <span class="o">=</span> <span class="default_value">'%Y%m%d'</span></em>, <em class="sig-param"><span class="n">drop</span><span class="p">:</span> <span class="n">float</span> <span class="o">=</span> <span class="default_value">0</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#SplitConfig"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.SplitConfig" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.trainer.BaseConfig" title="core.trainer.BaseConfig"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.trainer.BaseConfig</span></code></a></p>
-<p>Dataset split configuration class.</p>
-<p>Split a dataset into training, validation and test set.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>split_mode</strong> (<cite>str</cite>) – The mode to split the dataset.</p></li>
-<li><p><strong>ttratio</strong> (<cite>float</cite>) – The ratio of training and validation data to test data, e.g.
-<code class="docutils literal notranslate"><span class="pre">ttratio</span></code> = 0.6 means 60% for training and validation, 40% for
-testing.</p></li>
-<li><p><strong>tvratio</strong> (<cite>float</cite>) – The ratio of training data to validation data, e.g. <code class="docutils literal notranslate"><span class="pre">tvratio</span></code> = 0.8
-means 80% training, 20% validation.</p></li>
-<li><p><strong>date</strong> (<cite>str</cite>, optional) – A date. Used if <code class="docutils literal notranslate"><span class="pre">split_mode</span></code> = ‘date’. The default is ‘yyyymmdd’.</p></li>
-<li><p><strong>dateformat</strong> (<cite>str</cite>, optional) – The format of <code class="docutils literal notranslate"><span class="pre">date</span></code>. <code class="docutils literal notranslate"><span class="pre">dateformat</span></code> is used by
-<cite>datetime.datetime.strptime’ to parse ``date`</cite> to a <cite>datetime.datetime</cite>
-object. The default is ‘%Y%m%d’.</p></li>
-<li><p><strong>drop</strong> (<cite>float</cite>, optional) – Whether to drop samples (during training only) with a fraction of
-pixels equal to the constant padding value &gt;= <code class="docutils literal notranslate"><span class="pre">drop</span></code>. <code class="docutils literal notranslate"><span class="pre">drop</span></code> = 0
-means, do not drop any samples. The default is 0.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.trainer.SplitConfig.dataloaders" title="core.trainer.SplitConfig.dataloaders"><code class="xref py py-obj docutils literal notranslate"><span class="pre">dataloaders</span></code></a>(*args, **kwargs)</p></td>
-<td><p>Build <cite>torch.utils.data.DataLoader</cite> instances.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#core.trainer.SplitConfig.train_val_test_split" title="core.trainer.SplitConfig.train_val_test_split"><code class="xref py py-obj docutils literal notranslate"><span class="pre">train_val_test_split</span></code></a>(ds)</p></td>
-<td><p>Split <code class="docutils literal notranslate"><span class="pre">ds</span></code> into training, validation and test set.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="core.trainer.SplitConfig.dataloaders">
-<em class="property">static </em><code class="sig-name descname">dataloaders</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#SplitConfig.dataloaders"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.SplitConfig.dataloaders" title="Permalink to this definition">¶</a></dt>
-<dd><p>Build <cite>torch.utils.data.DataLoader</cite> instances.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>*args</strong> (<cite>list</cite> [<cite>torch.utils.data.Dataset</cite>]) – List of instances of <cite>torch.utils.data.Dataset</cite>.</p></li>
-<li><p><strong>**kwargs</strong> – Additional keyword arguments passed to
-<cite>torch.utils.data.DataLoader</cite>.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>TypeError</strong> – Raised if not each item in <code class="docutils literal notranslate"><span class="pre">args</span></code> is an instance of
-<cite>torch.utils.data.Dataset</cite>.</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>loaders</strong> – List of instances of <cite>torch.utils.data.DataLoader</cite>. If an instance
-of <cite>torch.utils.data.Dataset</cite> in <code class="docutils literal notranslate"><span class="pre">args</span></code> is empty, <cite>None</cite> is
-appended to <code class="docutils literal notranslate"><span class="pre">loaders</span></code> instead of an instance of
-<cite>torch.utils.data.DataLoader</cite>.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>list</cite> [<cite>torch.utils.data.DataLoader</cite>]</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.SplitConfig.date">
-<code class="sig-name descname">date</code><em class="property">: str</em><em class="property"> = 'yyyymmdd'</em><a class="headerlink" href="#core.trainer.SplitConfig.date" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.SplitConfig.dateformat">
-<code class="sig-name descname">dateformat</code><em class="property">: str</em><em class="property"> = '%Y%m%d'</em><a class="headerlink" href="#core.trainer.SplitConfig.dateformat" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.SplitConfig.drop">
-<code class="sig-name descname">drop</code><em class="property">: float</em><em class="property"> = 0</em><a class="headerlink" href="#core.trainer.SplitConfig.drop" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.SplitConfig.split_mode">
-<code class="sig-name descname">split_mode</code><em class="property">: str</em><a class="headerlink" href="#core.trainer.SplitConfig.split_mode" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py method">
-<dt id="core.trainer.SplitConfig.train_val_test_split">
-<code class="sig-name descname">train_val_test_split</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ds</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#SplitConfig.train_val_test_split"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.SplitConfig.train_val_test_split" title="Permalink to this definition">¶</a></dt>
-<dd><p>Split <code class="docutils literal notranslate"><span class="pre">ds</span></code> into training, validation and test set.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>ds</strong> (<cite>pysegcnn.core.dataset.ImageDataset</cite>) – An instance of <cite>pysegcnn.core.dataset.ImageDataset</cite>.</p>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>TypeError</strong> – Raised if <code class="docutils literal notranslate"><span class="pre">ds</span></code> is not an instance of
-<cite>pysegcnn.core.dataset.ImageDataset</cite>.</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><ul class="simple">
-<li><p><strong>train_ds</strong> (<cite>pysegcnn.core.split.RandomSubset</cite> or)</p></li>
-<li><p><cite>pysegcnn.core.split.SceneSubset</cite>. – The training set.</p></li>
-<li><p><strong>valid_ds</strong> (<cite>pysegcnn.core.split.RandomSubset</cite> or)</p></li>
-<li><p><cite>pysegcnn.core.split.SceneSubset</cite>. – The validation set.</p></li>
-<li><p><strong>test_ds</strong> (<cite>pysegcnn.core.split.RandomSubset</cite> or)</p></li>
-<li><p><cite>pysegcnn.core.split.SceneSubset</cite>. – The test set.</p></li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.SplitConfig.ttratio">
-<code class="sig-name descname">ttratio</code><em class="property">: float</em><a class="headerlink" href="#core.trainer.SplitConfig.ttratio" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.SplitConfig.tvratio">
-<code class="sig-name descname">tvratio</code><em class="property">: float</em><a class="headerlink" href="#core.trainer.SplitConfig.tvratio" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.trainer.StateConfig">
-<em class="property">class </em><code class="sig-prename descclassname">core.trainer.</code><code class="sig-name descname">StateConfig</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ds</span><span class="p">:</span> <span class="n">pysegcnn.core.dataset.ImageDataset</span></em>, <em class="sig-param"><span class="n">sc</span><span class="p">:</span> <span class="n"><a class="reference internal" href="#core.trainer.SplitConfig" title="core.trainer.SplitConfig">core.trainer.SplitConfig</a></span></em>, <em class="sig-param"><span class="n">mc</span><span class="p">:</span> <span class="n"><a class="reference internal" href="#core.trainer.ModelConfig" title="core.trainer.ModelConfig">core.trainer.ModelConfig</a></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#StateConfig"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.StateConfig" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.trainer.BaseConfig" title="core.trainer.BaseConfig"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.trainer.BaseConfig</span></code></a></p>
-<p>Model state configuration class.</p>
-<p>Generate the model state filename according to the following naming
-convention:</p>
-<p>model_dataset_optimizer_splitmode_splitparams_tilesize_batchsize_bands.pt</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>ds</strong> (<cite>pysegcnn.core.dataset.ImageDataset</cite>) – An instance of <cite>pysegcnn.core.dataset.ImageDataset</cite>.</p></li>
-<li><p><strong>sc</strong> (<cite>pysegcnn.core.trainer.SplitConfig</cite>) – An instance of <cite>pysegcnn.core.trainer.SplitConfig</cite>.</p></li>
-<li><p><strong>mc</strong> (<cite>pysegcnn.core.trainer.ModelConfig</cite>) – An instance of <cite>pysegcnn.core.trainer.SplitConfig</cite>.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><a class="reference internal" href="#core.trainer.StateConfig.init_state" title="core.trainer.StateConfig.init_state"><code class="xref py py-obj docutils literal notranslate"><span class="pre">init_state</span></code></a>()</p></td>
-<td><p>Generate the model state filename.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py attribute">
-<dt id="core.trainer.StateConfig.ds">
-<code class="sig-name descname">ds</code><em class="property">: pysegcnn.core.dataset.ImageDataset</em><a class="headerlink" href="#core.trainer.StateConfig.ds" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py method">
-<dt id="core.trainer.StateConfig.init_state">
-<code class="sig-name descname">init_state</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/trainer.html#StateConfig.init_state"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.trainer.StateConfig.init_state" title="Permalink to this definition">¶</a></dt>
-<dd><p>Generate the model state filename.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>state</strong> – The path to the model state file.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>pathlib.Path</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.StateConfig.mc">
-<code class="sig-name descname">mc</code><em class="property">: <a class="reference internal" href="#core.trainer.ModelConfig" title="core.trainer.ModelConfig">core.trainer.ModelConfig</a></em><a class="headerlink" href="#core.trainer.StateConfig.mc" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py attribute">
-<dt id="core.trainer.StateConfig.sc">
-<code class="sig-name descname">sc</code><em class="property">: <a class="reference internal" href="#core.trainer.SplitConfig" title="core.trainer.SplitConfig">core.trainer.SplitConfig</a></em><a class="headerlink" href="#core.trainer.StateConfig.sc" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-</div>
-</div>
-<div class="section" id="module-core.transforms">
-<span id="core-transforms-module"></span><h2>core.transforms module<a class="headerlink" href="#module-core.transforms" title="Permalink to this headline">¶</a></h2>
-<p>Data augmentation.</p>
-<p>This module provides classes implementing common image augmentation methods.</p>
-<p>These methods may be used to artificially increase a dataset.</p>
-<div class="section" id="id11">
-<h3>License<a class="headerlink" href="#id11" title="Permalink to this headline">¶</a></h3>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-<dl class="py class">
-<dt id="core.transforms.Augment">
-<em class="property">class </em><code class="sig-prename descclassname">core.transforms.</code><code class="sig-name descname">Augment</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">transforms</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/transforms.html#Augment"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.transforms.Augment" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
-<p>Apply a sequence of transformations.</p>
-<p>Container class applying each transformation in <code class="docutils literal notranslate"><span class="pre">transforms</span></code> in order.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>transforms</strong> (<cite>list</cite> or <cite>tuple</cite>) – A sequence of instances of <cite>pysegcnn.core.transforms.VariantTransform</cite>
-or <cite>pysegcnn.core.transforms.InvariantTransform</cite>.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">__call__</span></code>(image, gt)</p></td>
-<td><p>Apply a sequence of transformations to <code class="docutils literal notranslate"><span class="pre">image</span></code>.</p></td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.transforms.FlipLr">
-<em class="property">class </em><code class="sig-prename descclassname">core.transforms.</code><code class="sig-name descname">FlipLr</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">p</span><span class="o">=</span><span class="default_value">0.5</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/transforms.html#FlipLr"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.transforms.FlipLr" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.transforms.VariantTransform" title="core.transforms.VariantTransform"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.transforms.VariantTransform</span></code></a></p>
-<p>Flip an image horizontally.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>p</strong> (<cite>float</cite>, optional) – The probability to apply the transformation. The default is 0.5.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">__call__</span></code>(image)</p></td>
-<td><p>Apply transformation.</p></td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.transforms.FlipUd">
-<em class="property">class </em><code class="sig-prename descclassname">core.transforms.</code><code class="sig-name descname">FlipUd</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">p</span><span class="o">=</span><span class="default_value">0.5</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/transforms.html#FlipUd"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.transforms.FlipUd" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.transforms.VariantTransform" title="core.transforms.VariantTransform"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.transforms.VariantTransform</span></code></a></p>
-<p>Flip an image vertically.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>p</strong> (<cite>float</cite>, optional) – The probability to apply the transformation. The default is 0.5.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">__call__</span></code>(image)</p></td>
-<td><p>Apply transformation.</p></td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.transforms.InvariantTransform">
-<em class="property">class </em><code class="sig-prename descclassname">core.transforms.</code><code class="sig-name descname">InvariantTransform</code><a class="reference internal" href="../_modules/core/transforms.html#InvariantTransform"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.transforms.InvariantTransform" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.transforms.Transform" title="core.transforms.Transform"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.transforms.Transform</span></code></a></p>
-<p>Base class for a spatially invariant transformation.</p>
-<p>Transformation on the ground truth not required.</p>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">__call__</span></code>(image)</p></td>
-<td><p>Apply transformation.</p></td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.transforms.Noise">
-<em class="property">class </em><code class="sig-prename descclassname">core.transforms.</code><code class="sig-name descname">Noise</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">mode</span></em>, <em class="sig-param"><span class="n">mean</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">var</span><span class="o">=</span><span class="default_value">0.05</span></em>, <em class="sig-param"><span class="n">p</span><span class="o">=</span><span class="default_value">0.5</span></em>, <em class="sig-param"><span class="n">exclude</span><span class="o">=</span><span class="default_value">[]</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/transforms.html#Noise"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.transforms.Noise" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.transforms.InvariantTransform" title="core.transforms.InvariantTransform"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.transforms.InvariantTransform</span></code></a></p>
-<p>Add gaussian noise to an image.</p>
-<p>Valid modes are:</p>
-<blockquote>
-<div><p>‘add’: image = image + noise
-‘speckle’ : image = image + image * noise</p>
-</div></blockquote>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>mode</strong> (<cite>str</cite>) – The mode to add the noise.</p></li>
-<li><p><strong>mean</strong> (<cite>float</cite>, optional) – The mean of the gaussian distribution from which the noise is sampled.
-The default is 0.</p></li>
-<li><p><strong>var</strong> (<cite>float</cite>, optional) – The variance of the gaussian distribution from which the noise is
-sampled. The default is 0.05.</p></li>
-<li><p><strong>p</strong> (<cite>float</cite>, optional) – The probability to apply the transformation. The default is 0.5.</p></li>
-<li><p><strong>exclude</strong> (<cite>list</cite> [<cite>float</cite>] or <cite>list</cite> [<cite>int</cite>], optional) – Values for which the noise is not added. Useful for pixels resulting
-from image padding. The default is [].</p></li>
-</ul>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>ValueError</strong> – Raised if <code class="docutils literal notranslate"><span class="pre">mode</span></code> is not supported.</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p></p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">__call__</span></code>(image)</p></td>
-<td><p>Apply transformation.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py attribute">
-<dt id="core.transforms.Noise.modes">
-<code class="sig-name descname">modes</code><em class="property"> = ['add', 'speckle']</em><a class="headerlink" href="#core.transforms.Noise.modes" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.transforms.Rotate">
-<em class="property">class </em><code class="sig-prename descclassname">core.transforms.</code><code class="sig-name descname">Rotate</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">angle</span></em>, <em class="sig-param"><span class="n">p</span><span class="o">=</span><span class="default_value">0.5</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/transforms.html#Rotate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.transforms.Rotate" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.transforms.VariantTransform" title="core.transforms.VariantTransform"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.transforms.VariantTransform</span></code></a></p>
-<p>Rotate an image by <code class="docutils literal notranslate"><span class="pre">angle</span></code>.</p>
-<p>The image is rotated in the spatial plane.</p>
-<p>If the input array has more then two dimensions, the spatial dimensions are
-assumed to be the last two dimensions of the array.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>angle</strong> (<cite>float</cite>) – The rotation angle in degrees.</p></li>
-<li><p><strong>p</strong> (<cite>float</cite>, optional) – The probability to apply the transformation. The default is 0.5.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">__call__</span></code>(image)</p></td>
-<td><p>Apply transformation.</p></td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.transforms.Transform">
-<em class="property">class </em><code class="sig-prename descclassname">core.transforms.</code><code class="sig-name descname">Transform</code><a class="reference internal" href="../_modules/core/transforms.html#Transform"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.transforms.Transform" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
-<p>Base class for an image transformation.</p>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">__call__</span></code>(image)</p></td>
-<td><p>Apply transformation.</p></td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="py class">
-<dt id="core.transforms.VariantTransform">
-<em class="property">class </em><code class="sig-prename descclassname">core.transforms.</code><code class="sig-name descname">VariantTransform</code><a class="reference internal" href="../_modules/core/transforms.html#VariantTransform"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.transforms.VariantTransform" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#core.transforms.Transform" title="core.transforms.Transform"><code class="xref py py-class docutils literal notranslate"><span class="pre">core.transforms.Transform</span></code></a></p>
-<p>Base class for a spatially variant transformation.</p>
-<p>Transformation on the ground truth required.</p>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">__call__</span></code>(image)</p></td>
-<td><p>Apply transformation.</p></td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-</div>
-</div>
-<div class="section" id="module-core.utils">
-<span id="core-utils-module"></span><h2>core.utils module<a class="headerlink" href="#module-core.utils" title="Permalink to this headline">¶</a></h2>
-<p>Utility functions mainly for image IO and reshaping.</p>
-<div class="section" id="id12">
-<h3>License<a class="headerlink" href="#id12" title="Permalink to this headline">¶</a></h3>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-<dl class="py function">
-<dt id="core.utils.accuracy_function">
-<code class="sig-prename descclassname">core.utils.</code><code class="sig-name descname">accuracy_function</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">outputs</span></em>, <em class="sig-param"><span class="n">labels</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/utils.html#accuracy_function"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.utils.accuracy_function" title="Permalink to this definition">¶</a></dt>
-<dd><p>Calculate prediction accuracy.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>outputs</strong> (<cite>torch.Tensor</cite> or array_like) – The model prediction.</p></li>
-<li><p><strong>labels</strong> (<cite>torch.Tensor</cite> or array_like) – The ground truth.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>accuracy</strong> – Mean prediction accuracy.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>float</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.utils.check_tile_extend">
-<code class="sig-prename descclassname">core.utils.</code><code class="sig-name descname">check_tile_extend</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">img_size</span></em>, <em class="sig-param"><span class="n">topleft</span></em>, <em class="sig-param"><span class="n">tile_size</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/utils.html#check_tile_extend"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.utils.check_tile_extend" title="Permalink to this definition">¶</a></dt>
-<dd><p>Check if a tile exceeds the image size.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>img_size</strong> (<cite>tuple</cite>) – The image size (height, width).</p></li>
-<li><p><strong>topleft</strong> (<cite>tuple</cite>) – The topleft corner of the tile (y, x).</p></li>
-<li><p><strong>tile_size</strong> (<cite>int</cite>) – The size of the tile.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><ul class="simple">
-<li><p><strong>nrows</strong> (<cite>int</cite>) – Number of rows of the tile within the image.</p></li>
-<li><p><strong>ncols</strong> (<em>TYPE</em>) – Number of columns of the tile within the image.</p></li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.utils.destack_tiff">
-<code class="sig-prename descclassname">core.utils.</code><code class="sig-name descname">destack_tiff</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">image</span></em>, <em class="sig-param"><span class="n">outpath</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">overwrite</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">remove</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">suffix</span><span class="o">=</span><span class="default_value">''</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/utils.html#destack_tiff"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.utils.destack_tiff" title="Permalink to this definition">¶</a></dt>
-<dd><p>Destack a TIFF with more than one band into a TIFF file for each band.</p>
-<p>Each band in <code class="docutils literal notranslate"><span class="pre">image</span></code> is saved to <code class="docutils literal notranslate"><span class="pre">outpath</span></code> as distinct TIFF file.
-The default filenames are: “filename(<code class="docutils literal notranslate"><span class="pre">image</span></code>) + _B(i).tif”, where i is
-the respective number of each band in <code class="docutils literal notranslate"><span class="pre">image</span></code>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>image</strong> (<cite>str</cite> or <cite>pathlib.Path</cite>) – The TIFF to destack.</p></li>
-<li><p><strong>outpath</strong> (<cite>str</cite>, optional) – Path to save the output TIFF files. The default is None. If None,
-<code class="docutils literal notranslate"><span class="pre">outpath</span></code> is the path to <code class="docutils literal notranslate"><span class="pre">image</span></code>.</p></li>
-<li><p><strong>remove</strong> (<cite>bool</cite>, optional) – Whether to remove <code class="docutils literal notranslate"><span class="pre">image</span></code> from disk after destacking. The default is
-False.</p></li>
-<li><p><strong>overwrite</strong> (<cite>bool</cite>, optional) – Whether to overwrite existing TIFF files.</p></li>
-<li><p><strong>suffix</strong> (<cite>str</cite>, optional) – String to append to the filename of <code class="docutils literal notranslate"><span class="pre">image</span></code>. If specified, the TIFF
-filenames for each band in <code class="docutils literal notranslate"><span class="pre">image</span></code> are, “filename(<code class="docutils literal notranslate"><span class="pre">image</span></code>) +
-+ _B(i)_ + <code class="docutils literal notranslate"><span class="pre">suffix</span></code>.tif”. The default is ‘’.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>FileNotFoundError</strong> – Raised if <code class="docutils literal notranslate"><span class="pre">image</span></code> does not exist.</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p></p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p>None.</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.utils.doy2date">
-<code class="sig-prename descclassname">core.utils.</code><code class="sig-name descname">doy2date</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">year</span></em>, <em class="sig-param"><span class="n">doy</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/utils.html#doy2date"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.utils.doy2date" title="Permalink to this definition">¶</a></dt>
-<dd><p>Convert the (year, day of the year) date format to a datetime object.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>year</strong> (<cite>int</cite>) – The year</p></li>
-<li><p><strong>doy</strong> (<cite>int</cite>) – The day of the year</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>date</strong> – The converted date.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>datetime.datetime</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.utils.extract_archive">
-<code class="sig-prename descclassname">core.utils.</code><code class="sig-name descname">extract_archive</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">inpath</span></em>, <em class="sig-param"><span class="n">outpath</span></em>, <em class="sig-param"><span class="n">overwrite</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/utils.html#extract_archive"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.utils.extract_archive" title="Permalink to this definition">¶</a></dt>
-<dd><p>Extract files from an archive.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>inpath</strong> (<cite>str</cite> or <cite>pathlib.Path</cite>) – Path to an archive.</p></li>
-<li><p><strong>outpath</strong> (<cite>str</cite> or <cite>pathlib.Path</cite>) – Path to save extracted files.</p></li>
-<li><p><strong>overwrite</strong> (<cite>bool</cite>, optional) – Whether to overwrite existing extracted files.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>subdir</strong> – path to the extracted files</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>str</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.utils.get_radiometric_constants">
-<code class="sig-prename descclassname">core.utils.</code><code class="sig-name descname">get_radiometric_constants</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">metadata</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/utils.html#get_radiometric_constants"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.utils.get_radiometric_constants" title="Permalink to this definition">¶</a></dt>
-<dd><p>Retrieve the radiometric calibration constants.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>metadata</strong> (<cite>dict</cite>) – The dictionary returned by <code class="docutils literal notranslate"><span class="pre">read_landsat_metadata</span></code>.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><ul class="simple">
-<li><p><strong>oli</strong> (<cite>dict</cite>) – Radiometric rescaling factors of the OLI sensor.</p></li>
-<li><p><strong>tir</strong> (<cite>dict</cite>) – Thermal conversion constants of the TIRS sensor.</p></li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.utils.img2np">
-<code class="sig-prename descclassname">core.utils.</code><code class="sig-name descname">img2np</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">path</span></em>, <em class="sig-param"><span class="n">tile_size</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tile</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">pad</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">cval</span><span class="o">=</span><span class="default_value">0</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/utils.html#img2np"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.utils.img2np" title="Permalink to this definition">¶</a></dt>
-<dd><p>Read an image to a <cite>numpy.ndarray</cite>.</p>
-<p>If <code class="docutils literal notranslate"><span class="pre">tile_size</span></code> is not <cite>None</cite>, the input image is divided into square
-tiles of size (<code class="docutils literal notranslate"><span class="pre">tile_size</span></code>, <code class="docutils literal notranslate"><span class="pre">tile_size</span></code>). If the image is not evenly
-divisible and <code class="docutils literal notranslate"><span class="pre">pad</span></code> = False, a <cite>ValueError</cite> is raised. However, if
-<code class="docutils literal notranslate"><span class="pre">pad</span></code> = True, center padding with constant value <code class="docutils literal notranslate"><span class="pre">cval</span></code> is applied.</p>
-<p>The tiling works as follows:</p>
-<blockquote>
-<div><p>(Padded) Input image:</p>
-<div class="line-block">
-<div class="line-block">
-<div class="line">|           |          |           |</div>
-</div>
-<div class="line">tile_00  |  tile_01  |    …   |  tile_0n  |</div>
-<div class="line-block">
-<div class="line">|           |          |           |</div>
-</div>
-</div>
-<p><a href="#id17"><span class="problematic" id="id18">|----------------------------------------------|</span></a>
-|           |           |          |           |
-|  tile_10  |  tile_11  |    …   |  tile_1n  |
-|           |           |          |           |
-<a href="#id19"><span class="problematic" id="id20">|----------------------------------------------|</span></a>
-|           |           |          |           |
-|    …    |    …    |    …   |    …    |
-|           |           |          |           |
-<a href="#id21"><span class="problematic" id="id22">|----------------------------------------------|</span></a>
-|           |           |          |           |
-|  tile_m0  |  tile_m1  |    …   |  tile_mn  |
-|           |           |          |           |
-————————————————</p>
-</div></blockquote>
-<p>where m = n. Each tile has its id, which starts at 0 in the topleft corner
-of the input image, i.e. tile_00 has id=0, and increases along the width
-axis, i.e. tile_0n has id=n, tile_10 has id=n+1, …, tile_mn has
-id=(m * n) - 1.</p>
-<p>If <code class="docutils literal notranslate"><span class="pre">tile</span></code> is an integer, only the tile with id = <code class="docutils literal notranslate"><span class="pre">tile</span></code> is returned.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>path</strong> (<cite>str</cite> or <cite>None</cite> or <cite>numpy.ndarray</cite>) – The image to read.</p></li>
-<li><p><strong>tile_size</strong> (<cite>None</cite> or <cite>int</cite>, optional) – The size of a tile. The default is None.</p></li>
-<li><p><strong>tile</strong> (<cite>int</cite>, optional) – The tile id. The default is None.</p></li>
-<li><p><strong>pad</strong> (<cite>bool</cite>, optional) – Whether to center pad the input image. The default is False.</p></li>
-<li><p><strong>cval</strong> (<cite>float</cite>, optional) – The constant padding value. The default is 0.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><ul class="simple">
-<li><p><strong>FileNotFoundError</strong> – Raised if <code class="docutils literal notranslate"><span class="pre">path</span></code> is a path that does not exist.</p></li>
-<li><p><strong>TypeError</strong> – Raised if <code class="docutils literal notranslate"><span class="pre">path</span></code> is not <cite>str</cite> or <cite>None</cite> or <cite>numpy.ndarray</cite>.</p></li>
-</ul>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><p><strong>image</strong> –</p>
-<p>The image array. The output shape is:</p>
-<blockquote>
-<div><dl>
-<dt>if <code class="docutils literal notranslate"><span class="pre">tile_size</span></code> is not <cite>None</cite>:</dt><dd><p>shape=(tiles, bands, tile_size, tile_size)
-if the image does only have one band:</p>
-<blockquote>
-<div><p>shape=(tiles, tile_size, tile_size)</p>
-</div></blockquote>
-</dd>
-<dt>else:</dt><dd><p>shape=(bands, height, width)
-if the image does only have one band:</p>
-<blockquote>
-<div><p>shape=(height, width)</p>
-</div></blockquote>
-</dd>
-</dl>
-</div></blockquote>
-</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>numpy.ndarray</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.utils.is_divisible">
-<code class="sig-prename descclassname">core.utils.</code><code class="sig-name descname">is_divisible</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">img_size</span></em>, <em class="sig-param"><span class="n">tile_size</span></em>, <em class="sig-param"><span class="n">pad</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/utils.html#is_divisible"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.utils.is_divisible" title="Permalink to this definition">¶</a></dt>
-<dd><p>Check whether an image is evenly divisible into square tiles.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>img_size</strong> (<cite>tuple</cite>) – The image size (height, width).</p></li>
-<li><p><strong>tile_size</strong> (<cite>int</cite>) – The size of the tile.</p></li>
-<li><p><strong>pad</strong> (<cite>bool</cite>, optional) – Whether to center pad the input image. The default is False.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>ValueError</strong> – Raised if the image is not evenly divisible and <code class="docutils literal notranslate"><span class="pre">pad</span></code> = False.</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><ul class="simple">
-<li><p><strong>ntiles</strong> (<cite>int</cite>) – The number of tiles fitting <code class="docutils literal notranslate"><span class="pre">img_size</span></code>.</p></li>
-<li><p><strong>padding</strong> (<cite>tuple</cite>) – The amount of padding (bottom, left, top, right).</p></li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.utils.item_in_enum">
-<code class="sig-prename descclassname">core.utils.</code><code class="sig-name descname">item_in_enum</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">name</span></em>, <em class="sig-param"><span class="n">enum</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/utils.html#item_in_enum"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.utils.item_in_enum" title="Permalink to this definition">¶</a></dt>
-<dd><p>Check if an item exists in an enumeration.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>name</strong> (<cite>str</cite>) – Name of the item.</p></li>
-<li><p><strong>enum</strong> (<cite>enum.Enum</cite>) – An instance of <cite>enum.Enum</cite>.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>ValueError</strong> – Raised if <code class="docutils literal notranslate"><span class="pre">name</span></code> is not in <code class="docutils literal notranslate"><span class="pre">enum</span></code>.</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p>The value of <code class="docutils literal notranslate"><span class="pre">name</span></code> in <code class="docutils literal notranslate"><span class="pre">enum</span></code>.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p>value</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.utils.landsat_radiometric_calibration">
-<code class="sig-prename descclassname">core.utils.</code><code class="sig-name descname">landsat_radiometric_calibration</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">scene</span></em>, <em class="sig-param"><span class="n">outpath</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">exclude</span><span class="o">=</span><span class="default_value">[]</span></em>, <em class="sig-param"><span class="n">radiance</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">overwrite</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">remove_raw</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/utils.html#landsat_radiometric_calibration"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.utils.landsat_radiometric_calibration" title="Permalink to this definition">¶</a></dt>
-<dd><p>Radiometric calibration of Landsat Collection Level 1 scenes.</p>
-<p>Convert the Landsat OLI bands to top of atmosphere radiance or reflectance
-and the TIRS bands to top of atmosphere brightness temperature.</p>
-<p>Conversion is performed following the <a href="#id31"><span class="problematic" id="id32">`equations`_</span></a> provided by the USGS.</p>
-<p>The filename of each band is extended by one of the following suffixes,
-depending on the type of the radiometric calibration:</p>
-<blockquote>
-<div><p>‘toa_ref’: top of atmosphere reflectance
-‘toa_rad’: top of atmopshere radiance
-‘toa_brt’: top of atmosphere brightness temperature</p>
-</div></blockquote>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>scene</strong> (<cite>str</cite> or <cite>pathlib.Path</cite>) – Path to a Landsat scene in digital number format.</p></li>
-<li><p><strong>outpath</strong> (<cite>str</cite> or <cite>pathlib.Path</cite>, optional) – Path to save the calibrated images. The default is None, which means
-saving to <code class="docutils literal notranslate"><span class="pre">scene</span></code>.</p></li>
-<li><p><strong>exclude</strong> (<cite>list</cite> [<cite>str</cite>], optional) – Bands to exclude from the radiometric calibration. The default is [].</p></li>
-<li><p><strong>radiance</strong> (<cite>bool</cite>, optional) – Whether to calculate top of atmosphere radiance. The default is False,
-which means calculating top of atmopshere reflectance.</p></li>
-<li><p><strong>overwrite</strong> (<cite>bool</cite>, optional) – Whether to overwrite the calibrated images. The default is False.</p></li>
-<li><p><strong>remove_raw</strong> (<cite>bool</cite>, optional) – Whether to remove the raw digitial number images. The default is True.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>FileNotFoundError</strong> – Raised if <code class="docutils literal notranslate"><span class="pre">scene</span></code> does not exist.</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><ul class="simple">
-<li><p><em>None.</em></p></li>
-<li><p><em>.. _equations</em> – <a class="reference external" href="https://www.usgs.gov/land-resources/nli/landsat/using-usgs-landsat-level-1-data-product">https://www.usgs.gov/land-resources/nli/landsat/using-usgs-landsat-level-1-data-product</a></p></li>
-</ul>
-</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.utils.parse_landsat_scene">
-<code class="sig-prename descclassname">core.utils.</code><code class="sig-name descname">parse_landsat_scene</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">scene_id</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/utils.html#parse_landsat_scene"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.utils.parse_landsat_scene" title="Permalink to this definition">¶</a></dt>
-<dd><p>Parse a Landsat scene identifier.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>scene_id</strong> (<cite>str</cite>) – A Landsat scene identifier.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>scene</strong> – A dictionary containing scene metadata. If <cite>None</cite>, <code class="docutils literal notranslate"><span class="pre">scene_id</span></code> is not
-a valid Landsat scene identifier.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>dict</cite> or <cite>None</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.utils.parse_sentinel2_scene">
-<code class="sig-prename descclassname">core.utils.</code><code class="sig-name descname">parse_sentinel2_scene</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">scene_id</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/utils.html#parse_sentinel2_scene"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.utils.parse_sentinel2_scene" title="Permalink to this definition">¶</a></dt>
-<dd><p>Parse a Sentinel-2 scene identifier.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>scene_id</strong> (<cite>str</cite>) – A Sentinel-2 scene identifier.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>scene</strong> – A dictionary containing scene metadata. If <cite>None</cite>, <code class="docutils literal notranslate"><span class="pre">scene_id</span></code> is not
-a valid Sentinel-2 scene identifier.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>dict</cite> or <cite>None</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.utils.read_landsat_metadata">
-<code class="sig-prename descclassname">core.utils.</code><code class="sig-name descname">read_landsat_metadata</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">file</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/utils.html#read_landsat_metadata"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.utils.read_landsat_metadata" title="Permalink to this definition">¶</a></dt>
-<dd><p>Parse the Landsat metadata <a href="#id13"><span class="problematic" id="id14">*</span></a>_MTL.txt file.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>file</strong> (<cite>str</cite> or <cite>pathlib.Path</cite>) – Path to a Landsat <a href="#id15"><span class="problematic" id="id16">*</span></a>_MTL.txt file.</p>
-</dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>FileNotFoundError</strong> – Raised if <code class="docutils literal notranslate"><span class="pre">file</span></code> does not exist.</p>
-</dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>metadata</strong> – The metadata text file as dictionary, where each line is a (key, value)
-pair.</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p><cite>dict</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.utils.reconstruct_scene">
-<code class="sig-prename descclassname">core.utils.</code><code class="sig-name descname">reconstruct_scene</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">tiles</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/utils.html#reconstruct_scene"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.utils.reconstruct_scene" title="Permalink to this definition">¶</a></dt>
-<dd><p>Reconstruct a tiled image.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>tiles</strong> (<cite>torch.Tensor</cite> or <cite>numpy.ndarray</cite>) – The tiled image, shape=(tiles, bands, tile_size, tile_size) or
-shape=(tiles, tile_size, tile_size).</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>image</strong> – The reconstructed image.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>numpy.ndarray</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.utils.standard_eo_structure">
-<code class="sig-prename descclassname">core.utils.</code><code class="sig-name descname">standard_eo_structure</code><span class="sig-paren">(</span><em class="sig-param">source_path</em>, <em class="sig-param">target_path</em>, <em class="sig-param">overwrite=False</em>, <em class="sig-param">move=False</em>, <em class="sig-param">parser=&lt;function parse_landsat_scene&gt;</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/utils.html#standard_eo_structure"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.utils.standard_eo_structure" title="Permalink to this definition">¶</a></dt>
-<dd><p>Modify the directory structure of a remote sensing dataset.</p>
-<p>This function assumes that <code class="docutils literal notranslate"><span class="pre">source_path</span></code> points to a directory containing
-remote sensing data, where each file in <code class="docutils literal notranslate"><span class="pre">source_path</span></code> and its sub-folders
-should contain a scene identifier in its filename. The scene identifier is
-used to restructure the dataset.</p>
-<p>Currently, Landsat and Sentinel-2 datasets are supported.</p>
-<p>The directory tree in <code class="docutils literal notranslate"><span class="pre">source_path</span></code> is modified to the following
-structure in <code class="docutils literal notranslate"><span class="pre">target_path</span></code>:</p>
-<blockquote>
-<div><dl>
-<dt>target_path/</dt><dd><dl class="simple">
-<dt>scene_id_1/</dt><dd><p>files matching scene_id_1</p>
-</dd>
-<dt>scene_id_2/</dt><dd><p>files matching scene_id_2</p>
-</dd>
-</dl>
-<p>.
-scene_id_n/</p>
-<blockquote>
-<div><p>files matching scene_id_n</p>
-</div></blockquote>
-</dd>
-</dl>
-</div></blockquote>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>source_path</strong> (<cite>str</cite> or <cite>pathlib.Path</cite>) – Path to the remote sensing dataset.</p></li>
-<li><p><strong>target_path</strong> (<cite>str</cite> or <cite>pathlib.Path</cite>) – Path to save the restructured dataset.</p></li>
-<li><p><strong>overwrite</strong> (<cite>bool</cite>, optional) – Whether to overwrite existing files in <code class="docutils literal notranslate"><span class="pre">target_path</span></code>.
-The default is True.</p></li>
-<li><p><strong>move</strong> (<cite>bool</cite>, optional) – Whether to move the files from <code class="docutils literal notranslate"><span class="pre">source_path</span></code> to <code class="docutils literal notranslate"><span class="pre">target_path</span></code>. If
-True, files in <code class="docutils literal notranslate"><span class="pre">source_path</span></code> are moved to <code class="docutils literal notranslate"><span class="pre">target_path</span></code>, if False,
-files in <code class="docutils literal notranslate"><span class="pre">source_path</span></code> are copied to <code class="docutils literal notranslate"><span class="pre">target_path</span></code>. The default is
-False.</p></li>
-<li><p><strong>parser</strong> (<cite>function</cite>, optional) – The scene identifier parsing function. Depends on the sensor of the
-dataset. See e.g., <cite>pysegcnn.core.utils.parse_landsat_scene</cite>.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt id="core.utils.tile_topleft_corner">
-<code class="sig-prename descclassname">core.utils.</code><code class="sig-name descname">tile_topleft_corner</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">img_size</span></em>, <em class="sig-param"><span class="n">tile_size</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/core/utils.html#tile_topleft_corner"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#core.utils.tile_topleft_corner" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return the topleft corners of the tiles in the image.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>img_size</strong> (<cite>tuple</cite>) – The image size (height, width).</p></li>
-<li><p><strong>tile_size</strong> (<cite>int</cite>) – The size of the tile.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>indices</strong> – The keys of <code class="docutils literal notranslate"><span class="pre">indices</span></code> are the tile ids (<cite>int</cite>) and the values are the
-topleft corners (<cite>tuple</cite> = (y, x)) of the tiles.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><cite>dict</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-</div>
-</div>
-<div class="section" id="module-core">
-<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-core" title="Permalink to this headline">¶</a></h2>
-</div>
-</div>
-
-
-           </div>
-           
-          </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="main.html" class="btn btn-neutral float-right" title="main package" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="modules.html" class="btn btn-neutral float-left" title="pysegcnn" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
-    </div>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/source/generated/pysegcnn.core.dataset.Cloud95Dataset.html b/docs/_build/html/source/generated/pysegcnn.core.dataset.Cloud95Dataset.html
index 71193ba..78fe3eb 100644
--- a/docs/_build/html/source/generated/pysegcnn.core.dataset.Cloud95Dataset.html
+++ b/docs/_build/html/source/generated/pysegcnn.core.dataset.Cloud95Dataset.html
@@ -87,8 +87,8 @@
 <li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
 <li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Reference</a><ul class="current">
 <li class="toctree-l2 current"><a class="reference internal" href="../api.html#dataset">Dataset</a><ul class="current">
-<li class="toctree-l3"><a class="reference internal" href="pysegcnn.core.dataset.ImageDataset.html">pysegcnn.core.dataset.ImageDataset</a></li>
-<li class="toctree-l3 current"><a class="reference internal" href="../api.html#supported-datasets">Supported datasets</a><ul class="current">
+<li class="toctree-l3"><a class="reference internal" href="../api.html#generic-classes">Generic classes</a></li>
+<li class="toctree-l3 current"><a class="reference internal" href="../api.html#specific-classes">Specific classes</a><ul class="current">
 <li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.dataset.SparcsDataset.html">pysegcnn.core.dataset.SparcsDataset</a></li>
 <li class="toctree-l4 current"><a class="current reference internal" href="#">pysegcnn.core.dataset.Cloud95Dataset</a></li>
 </ul>
@@ -171,80 +171,48 @@
 <dt id="pysegcnn.core.dataset.Cloud95Dataset">
 <em class="property">class </em><code class="sig-prename descclassname">pysegcnn.core.dataset.</code><code class="sig-name descname">Cloud95Dataset</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">root_dir</span></em>, <em class="sig-param"><span class="n">use_bands</span><span class="o">=</span><span class="default_value">[]</span></em>, <em class="sig-param"><span class="n">tile_size</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">pad</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">gt_pattern</span><span class="o">=</span><span class="default_value">'(.*)gt\\.tif'</span></em>, <em class="sig-param"><span class="n">sort</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">seed</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">transforms</span><span class="o">=</span><span class="default_value">[]</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/dataset.html#Cloud95Dataset"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.dataset.Cloud95Dataset" title="Permalink to this definition">¶</a></dt>
 <dd><p>Class for the <a class="reference external" href="https://github.com/SorourMo/95-Cloud-An-Extension-to-38-Cloud-Dataset">Cloud-95</a> dataset by <a class="reference external" href="https://arxiv.org/abs/2001.08768">Mohajerani &amp; Saeedi (2020)</a>.</p>
-<dl class="field-list simple">
+<dl class="py method">
+<dt id="pysegcnn.core.dataset.Cloud95Dataset.__init__">
+<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">root_dir</span></em>, <em class="sig-param"><span class="n">use_bands</span><span class="o">=</span><span class="default_value">[]</span></em>, <em class="sig-param"><span class="n">tile_size</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">pad</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">gt_pattern</span><span class="o">=</span><span class="default_value">'(.*)gt\\.tif'</span></em>, <em class="sig-param"><span class="n">sort</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">seed</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">transforms</span><span class="o">=</span><span class="default_value">[]</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/dataset.html#Cloud95Dataset.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.dataset.Cloud95Dataset.__init__" title="Permalink to this definition">¶</a></dt>
+<dd><p>Initialize.</p>
+<dl class="field-list">
 <dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>root_dir</strong> (<cite>str</cite>) – The root directory, path to the dataset.</p></li>
-<li><p><strong>use_bands</strong> (<cite>list</cite> [<cite>str</cite>], optional) – A list of the spectral bands to use. The default is [].</p></li>
-<li><p><strong>tile_size</strong> (<cite>int</cite> or <cite>None</cite>, optional) – The size of the tiles. If not <cite>None</cite>, each scene is divided into square
-tiles of shape (tile_size, tile_size). The default is None.</p></li>
-<li><p><strong>pad</strong> (<cite>bool</cite>, optional) – Whether to center pad the input image. Set <code class="docutils literal notranslate"><span class="pre">pad</span></code> = True, if the
-images are not evenly divisible by the <code class="docutils literal notranslate"><span class="pre">tile_size</span></code>. The image data is
-padded with a constant padding value of zero. For each image, the
-corresponding ground truth image is padded with a “no data” label.
-The default is False.</p></li>
-<li><p><strong>gt_pattern</strong> (<cite>str</cite>, optional) – A regural expression to match the ground truth naming convention. All
-directories and subdirectories in <code class="docutils literal notranslate"><span class="pre">root_dir</span></code> are searched for files
-matching <code class="docutils literal notranslate"><span class="pre">gt_pattern</span></code>. The default is ‘(.*)gt\.tif’.</p></li>
-<li><p><strong>sort</strong> (<cite>bool</cite>, optional) – Whether to chronologically sort the samples. Useful for time series
-data. The default is False.</p></li>
-<li><p><strong>seed</strong> (<cite>int</cite>, optional) – The random seed. Used to split the dataset into training, validation
-and test set. Useful for reproducibility. The default is 0.</p></li>
-<li><p><strong>transforms</strong> (<cite>list</cite> [<cite>pysegcnn.core.split.Augment</cite>], optional) – List of <cite>pysegcnn.core.split.Augment</cite> instances. Each item in
-<code class="docutils literal notranslate"><span class="pre">transforms</span></code> generates a distinct transformed version of the dataset.
-The total dataset is composed of the original untransformed dataset
-together with each transformed version of it.
-If <code class="docutils literal notranslate"><span class="pre">transforms</span></code> = [], only the original dataset is used.
-The default is [].</p></li>
-</ul>
+<dd class="field-odd"><dl>
+<dt><strong>root_dir</strong><span class="classifier"><cite>str</cite></span></dt><dd><p>The root directory, path to the dataset.</p>
+</dd>
+<dt><strong>use_bands</strong><span class="classifier"><cite>list</cite> [<cite>str</cite>], optional</span></dt><dd><p>A list of the spectral bands to use. The default is <cite>[]</cite>.</p>
 </dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
+<dt><strong>tile_size</strong><span class="classifier"><cite>int</cite> or <cite>None</cite>, optional</span></dt><dd><p>The size of the tiles. If not <cite>None</cite>, each scene is divided into
+square tiles of shape <code class="docutils literal notranslate"><span class="pre">(tile_size,</span> <span class="pre">tile_size)</span></code>. The default is
+<cite>None</cite>.</p>
 </dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
+<dt><strong>pad</strong><span class="classifier"><cite>bool</cite>, optional</span></dt><dd><p>Whether to center pad the input image. Set <code class="docutils literal notranslate"><span class="pre">pad=True</span></code>, if the
+images are not evenly divisible by the <code class="docutils literal notranslate"><span class="pre">tile_size</span></code>. The image
+data is padded with a constant padding value of zero. For each
+image, the corresponding ground truth image is padded with a
+“no data” label. The default is <cite>False</cite>.</p>
+</dd>
+<dt><strong>gt_pattern</strong><span class="classifier"><cite>str</cite>, optional</span></dt><dd><p>A regural expression to match the ground truth naming convention.
+All directories and subdirectories in <code class="docutils literal notranslate"><span class="pre">root_dir</span></code> are searched for
+files matching <code class="docutils literal notranslate"><span class="pre">gt_pattern</span></code>. The default is <cite>(.*)gt\.tif</cite>.</p>
+</dd>
+<dt><strong>sort</strong><span class="classifier"><cite>bool</cite>, optional</span></dt><dd><p>Whether to chronologically sort the samples. Useful for time series
+data. The default is <cite>False</cite>.</p>
+</dd>
+<dt><strong>seed</strong><span class="classifier"><cite>int</cite>, optional</span></dt><dd><p>The random seed. Used to split the dataset into training,
+validation and test set. Useful for reproducibility. The default is
+<cite>0</cite>.</p>
+</dd>
+<dt><strong>transforms</strong><span class="classifier"><cite>list</cite>, optional</span></dt><dd><p>List of <a class="reference internal" href="pysegcnn.core.transforms.Augment.html#pysegcnn.core.transforms.Augment" title="pysegcnn.core.transforms.Augment"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.transforms.Augment</span></code></a> instances.
+Each item in <code class="docutils literal notranslate"><span class="pre">transforms</span></code> generates a distinct transformed
+version of the dataset. The total dataset is composed of the
+original untransformed dataset together with each transformed
+version of it. If <code class="docutils literal notranslate"><span class="pre">transforms=[]</span></code>, only the original dataset is
+used. The default is <cite>[]</cite>.</p>
+</dd>
+</dl>
 </dd>
 </dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">build_samples</span></code>(scene)</p></td>
-<td><p>Stack the bands of a sample in a single array.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">compose_scenes</span></code>()</p></td>
-<td><p>Build the list of samples of the dataset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_labels</span></code>()</p></td>
-<td><p>Class labels of the Cloud-95 dataset.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_sensor</span></code>()</p></td>
-<td><p>Landsat 8 bands of the Cloud-95 dataset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_size</span></code>()</p></td>
-<td><p>Image size of the Cloud-95 dataset.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parse_scene_id</span></code>(scene_id)</p></td>
-<td><p>Parse Sparcs scene identifiers (Landsat 8).</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">preprocess</span></code>(data, gt)</p></td>
-<td><p>Preprocess Cloud-95 dataset images.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">read_scene</span></code>(idx)</p></td>
-<td><p>Read the data of the sample with index <code class="docutils literal notranslate"><span class="pre">idx</span></code>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to_tensor</span></code>(x, dtype)</p></td>
-<td><p>Convert <code class="docutils literal notranslate"><span class="pre">x</span></code> to <cite>torch.Tensor</cite>.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="pysegcnn.core.dataset.Cloud95Dataset.__init__">
-<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">root_dir</span></em>, <em class="sig-param"><span class="n">use_bands</span><span class="o">=</span><span class="default_value">[]</span></em>, <em class="sig-param"><span class="n">tile_size</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">pad</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">gt_pattern</span><span class="o">=</span><span class="default_value">'(.*)gt\\.tif'</span></em>, <em class="sig-param"><span class="n">sort</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">seed</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">transforms</span><span class="o">=</span><span class="default_value">[]</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/dataset.html#Cloud95Dataset.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.dataset.Cloud95Dataset.__init__" title="Permalink to this definition">¶</a></dt>
-<dd><p>Initialize self.  See help(type(self)) for accurate signature.</p>
 </dd></dl>
 
 <p class="rubric">Methods</p>
@@ -255,7 +223,7 @@ The default is [].</p></li>
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="#pysegcnn.core.dataset.Cloud95Dataset.__init__" title="pysegcnn.core.dataset.Cloud95Dataset.__init__"><code class="xref py py-obj docutils literal notranslate"><span class="pre">__init__</span></code></a>(root_dir[, use_bands, tile_size, …])</p></td>
-<td><p>Initialize self.</p></td>
+<td><p>Initialize.</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">build_samples</span></code>(scene)</p></td>
 <td><p>Stack the bands of a sample in a single array.</p></td>
@@ -282,7 +250,7 @@ The default is [].</p></li>
 <td><p>Read the data of the sample with index <code class="docutils literal notranslate"><span class="pre">idx</span></code>.</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to_tensor</span></code>(x, dtype)</p></td>
-<td><p>Convert <code class="docutils literal notranslate"><span class="pre">x</span></code> to <cite>torch.Tensor</cite>.</p></td>
+<td><p>Convert <code class="docutils literal notranslate"><span class="pre">x</span></code> to <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.Tensor</span></code>.</p></td>
 </tr>
 </tbody>
 </table>
diff --git a/docs/_build/html/source/generated/pysegcnn.core.dataset.ImageDataset.html b/docs/_build/html/source/generated/pysegcnn.core.dataset.ImageDataset.html
index 31e363c..6ee1bfb 100644
--- a/docs/_build/html/source/generated/pysegcnn.core.dataset.ImageDataset.html
+++ b/docs/_build/html/source/generated/pysegcnn.core.dataset.ImageDataset.html
@@ -36,7 +36,7 @@
     
     <link rel="index" title="Index" href="../../genindex.html" />
     <link rel="search" title="Search" href="../../search.html" />
-    <link rel="next" title="pysegcnn.core.dataset.SparcsDataset" href="pysegcnn.core.dataset.SparcsDataset.html" />
+    <link rel="next" title="pysegcnn.core.dataset.StandardEoDataset" href="pysegcnn.core.dataset.StandardEoDataset.html" />
     <link rel="prev" title="API Reference" href="../api.html" /> 
 </head>
 
@@ -87,8 +87,12 @@
 <li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
 <li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Reference</a><ul class="current">
 <li class="toctree-l2 current"><a class="reference internal" href="../api.html#dataset">Dataset</a><ul class="current">
-<li class="toctree-l3 current"><a class="current reference internal" href="#">pysegcnn.core.dataset.ImageDataset</a></li>
-<li class="toctree-l3"><a class="reference internal" href="../api.html#supported-datasets">Supported datasets</a></li>
+<li class="toctree-l3 current"><a class="reference internal" href="../api.html#generic-classes">Generic classes</a><ul class="current">
+<li class="toctree-l4 current"><a class="current reference internal" href="#">pysegcnn.core.dataset.ImageDataset</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.dataset.StandardEoDataset.html">pysegcnn.core.dataset.StandardEoDataset</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../api.html#specific-classes">Specific classes</a></li>
 </ul>
 </li>
 <li class="toctree-l2"><a class="reference internal" href="../api.html#models">Models</a></li>
@@ -167,84 +171,51 @@
 <dt id="pysegcnn.core.dataset.ImageDataset">
 <em class="property">class </em><code class="sig-prename descclassname">pysegcnn.core.dataset.</code><code class="sig-name descname">ImageDataset</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">root_dir</span></em>, <em class="sig-param"><span class="n">use_bands</span><span class="o">=</span><span class="default_value">[]</span></em>, <em class="sig-param"><span class="n">tile_size</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">pad</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">gt_pattern</span><span class="o">=</span><span class="default_value">'(.*)gt.tif'</span></em>, <em class="sig-param"><span class="n">sort</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">seed</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">transforms</span><span class="o">=</span><span class="default_value">[]</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/dataset.html#ImageDataset"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.dataset.ImageDataset" title="Permalink to this definition">¶</a></dt>
 <dd><p>Base class for multispectral image data.</p>
-<p>Inheriting from <cite>torch.utils.data.Dataset</cite> to be compliant to the PyTorch
-standard. Furthermore, using instances of <cite>torch.utils.data.Dataset</cite>
-enables the use of the handy <cite>torch.utils.data.DataLoader</cite> class during
-model training.</p>
-<dl class="field-list simple">
+<p>Inheriting from <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.utils.data.Dataset</span></code> to be compliant to the
+PyTorch standard. This enables the use of the handy
+<code class="xref py py-class docutils literal notranslate"><span class="pre">torch.utils.data.DataLoader</span></code> class during model training.</p>
+<dl class="py method">
+<dt id="pysegcnn.core.dataset.ImageDataset.__init__">
+<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">root_dir</span></em>, <em class="sig-param"><span class="n">use_bands</span><span class="o">=</span><span class="default_value">[]</span></em>, <em class="sig-param"><span class="n">tile_size</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">pad</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">gt_pattern</span><span class="o">=</span><span class="default_value">'(.*)gt.tif'</span></em>, <em class="sig-param"><span class="n">sort</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">seed</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">transforms</span><span class="o">=</span><span class="default_value">[]</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/dataset.html#ImageDataset.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.dataset.ImageDataset.__init__" title="Permalink to this definition">¶</a></dt>
+<dd><p>Initialize.</p>
+<dl class="field-list">
 <dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>root_dir</strong> (<cite>str</cite>) – The root directory, path to the dataset.</p></li>
-<li><p><strong>use_bands</strong> (<cite>list</cite> [<cite>str</cite>], optional) – A list of the spectral bands to use. The default is [].</p></li>
-<li><p><strong>tile_size</strong> (<cite>int</cite> or <cite>None</cite>, optional) – The size of the tiles. If not <cite>None</cite>, each scene is divided into square
-tiles of shape (tile_size, tile_size). The default is None.</p></li>
-<li><p><strong>pad</strong> (<cite>bool</cite>, optional) – Whether to center pad the input image. Set <code class="docutils literal notranslate"><span class="pre">pad</span></code> = True, if the
-images are not evenly divisible by the <code class="docutils literal notranslate"><span class="pre">tile_size</span></code>. The image data is
-padded with a constant padding value of zero. For each image, the
-corresponding ground truth image is padded with a “no data” label.
-The default is False.</p></li>
-<li><p><strong>gt_pattern</strong> (<cite>str</cite>, optional) – A regural expression to match the ground truth naming convention.
+<dd class="field-odd"><dl>
+<dt><strong>root_dir</strong><span class="classifier"><cite>str</cite></span></dt><dd><p>The root directory, path to the dataset.</p>
+</dd>
+<dt><strong>use_bands</strong><span class="classifier"><cite>list</cite> [<cite>str</cite>], optional</span></dt><dd><p>A list of the spectral bands to use. The default is <cite>[]</cite>.</p>
+</dd>
+<dt><strong>tile_size</strong><span class="classifier"><cite>int</cite> or <cite>None</cite>, optional</span></dt><dd><p>The size of the tiles. If not <cite>None</cite>, each scene is divided into
+square tiles of shape <code class="docutils literal notranslate"><span class="pre">(tile_size,</span> <span class="pre">tile_size)</span></code>. The default is
+<cite>None</cite>.</p>
+</dd>
+<dt><strong>pad</strong><span class="classifier"><cite>bool</cite>, optional</span></dt><dd><p>Whether to center pad the input image. Set <code class="docutils literal notranslate"><span class="pre">pad=True</span></code>, if the
+images are not evenly divisible by the <code class="docutils literal notranslate"><span class="pre">tile_size</span></code>. The image
+data is padded with a constant padding value of zero. For each
+image, the corresponding ground truth image is padded with a
+“no data” label. The default is <cite>False</cite>.</p>
+</dd>
+<dt><strong>gt_pattern</strong><span class="classifier"><cite>str</cite>, optional</span></dt><dd><p>A regural expression to match the ground truth naming convention.
 All directories and subdirectories in <code class="docutils literal notranslate"><span class="pre">root_dir</span></code> are searched for
-files matching <code class="docutils literal notranslate"><span class="pre">gt_pattern</span></code>. The default is ‘(.*)gt\.tif’.</p></li>
-<li><p><strong>sort</strong> (<cite>bool</cite>, optional) – Whether to chronologically sort the samples. Useful for time series
-data. The default is False.</p></li>
-<li><p><strong>seed</strong> (<cite>int</cite>, optional) – The random seed. Used to split the dataset into training, validation
-and test set. Useful for reproducibility. The default is 0.</p></li>
-<li><p><strong>transforms</strong> (<cite>list</cite> [<cite>pysegcnn.core.split.Augment</cite>], optional) – List of <cite>pysegcnn.core.split.Augment</cite> instances. Each item in
-<code class="docutils literal notranslate"><span class="pre">transforms</span></code> generates a distinct transformed version of the dataset.
-The total dataset is composed of the original untransformed dataset
-together with each transformed version of it.
-If <code class="docutils literal notranslate"><span class="pre">transforms</span></code> = [], only the original dataset is used.
-The default is [].</p></li>
-</ul>
+files matching <code class="docutils literal notranslate"><span class="pre">gt_pattern</span></code>. The default is <cite>(.*)gt\.tif</cite>.</p>
+</dd>
+<dt><strong>sort</strong><span class="classifier"><cite>bool</cite>, optional</span></dt><dd><p>Whether to chronologically sort the samples. Useful for time series
+data. The default is <cite>False</cite>.</p>
 </dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
+<dt><strong>seed</strong><span class="classifier"><cite>int</cite>, optional</span></dt><dd><p>The random seed. Used to split the dataset into training,
+validation and test set. Useful for reproducibility. The default is
+<cite>0</cite>.</p>
 </dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
+<dt><strong>transforms</strong><span class="classifier"><cite>list</cite>, optional</span></dt><dd><p>List of <a class="reference internal" href="pysegcnn.core.transforms.Augment.html#pysegcnn.core.transforms.Augment" title="pysegcnn.core.transforms.Augment"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.transforms.Augment</span></code></a> instances.
+Each item in <code class="docutils literal notranslate"><span class="pre">transforms</span></code> generates a distinct transformed
+version of the dataset. The total dataset is composed of the
+original untransformed dataset together with each transformed
+version of it. If <code class="docutils literal notranslate"><span class="pre">transforms=[]</span></code>, only the original dataset is
+used. The default is <cite>[]</cite>.</p>
+</dd>
+</dl>
 </dd>
 </dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">build_samples</span></code>(scene)</p></td>
-<td><p>Stack the bands of a sample in a single array.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">compose_scenes</span></code>()</p></td>
-<td><p>Build the list of samples of the dataset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_labels</span></code>()</p></td>
-<td><p>Return an enumeration of the class labels of the dataset.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_sensor</span></code>()</p></td>
-<td><p>Return an enumeration of the bands of the sensor of the dataset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_size</span></code>()</p></td>
-<td><p>Return the size of the images in the dataset.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parse_scene_id</span></code>(scene_id)</p></td>
-<td><p>Parse the scene identifier.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">preprocess</span></code>(data, gt)</p></td>
-<td><p>Preprocess a sample before feeding it to a model.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">read_scene</span></code>(idx)</p></td>
-<td><p>Read the data of the sample with index <code class="docutils literal notranslate"><span class="pre">idx</span></code>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to_tensor</span></code>(x, dtype)</p></td>
-<td><p>Convert <code class="docutils literal notranslate"><span class="pre">x</span></code> to <cite>torch.Tensor</cite>.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="pysegcnn.core.dataset.ImageDataset.__init__">
-<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">root_dir</span></em>, <em class="sig-param"><span class="n">use_bands</span><span class="o">=</span><span class="default_value">[]</span></em>, <em class="sig-param"><span class="n">tile_size</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">pad</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">gt_pattern</span><span class="o">=</span><span class="default_value">'(.*)gt.tif'</span></em>, <em class="sig-param"><span class="n">sort</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">seed</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">transforms</span><span class="o">=</span><span class="default_value">[]</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/dataset.html#ImageDataset.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.dataset.ImageDataset.__init__" title="Permalink to this definition">¶</a></dt>
-<dd><p>Initialize self.  See help(type(self)) for accurate signature.</p>
 </dd></dl>
 
 <p class="rubric">Methods</p>
@@ -255,7 +226,7 @@ The default is [].</p></li>
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="#pysegcnn.core.dataset.ImageDataset.__init__" title="pysegcnn.core.dataset.ImageDataset.__init__"><code class="xref py py-obj docutils literal notranslate"><span class="pre">__init__</span></code></a>(root_dir[, use_bands, tile_size, …])</p></td>
-<td><p>Initialize self.</p></td>
+<td><p>Initialize.</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">build_samples</span></code>(scene)</p></td>
 <td><p>Stack the bands of a sample in a single array.</p></td>
@@ -282,7 +253,7 @@ The default is [].</p></li>
 <td><p>Read the data of the sample with index <code class="docutils literal notranslate"><span class="pre">idx</span></code>.</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to_tensor</span></code>(x, dtype)</p></td>
-<td><p>Convert <code class="docutils literal notranslate"><span class="pre">x</span></code> to <cite>torch.Tensor</cite>.</p></td>
+<td><p>Convert <code class="docutils literal notranslate"><span class="pre">x</span></code> to <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.Tensor</span></code>.</p></td>
 </tr>
 </tbody>
 </table>
@@ -298,7 +269,7 @@ The default is [].</p></li>
   
     <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
       
-        <a href="pysegcnn.core.dataset.SparcsDataset.html" class="btn btn-neutral float-right" title="pysegcnn.core.dataset.SparcsDataset" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
+        <a href="pysegcnn.core.dataset.StandardEoDataset.html" class="btn btn-neutral float-right" title="pysegcnn.core.dataset.StandardEoDataset" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
       
       
         <a href="../api.html" class="btn btn-neutral float-left" title="API Reference" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
diff --git a/docs/_build/html/source/generated/pysegcnn.core.dataset.SparcsDataset.html b/docs/_build/html/source/generated/pysegcnn.core.dataset.SparcsDataset.html
index 9aa65a8..37b1630 100644
--- a/docs/_build/html/source/generated/pysegcnn.core.dataset.SparcsDataset.html
+++ b/docs/_build/html/source/generated/pysegcnn.core.dataset.SparcsDataset.html
@@ -37,7 +37,7 @@
     <link rel="index" title="Index" href="../../genindex.html" />
     <link rel="search" title="Search" href="../../search.html" />
     <link rel="next" title="pysegcnn.core.dataset.Cloud95Dataset" href="pysegcnn.core.dataset.Cloud95Dataset.html" />
-    <link rel="prev" title="pysegcnn.core.dataset.ImageDataset" href="pysegcnn.core.dataset.ImageDataset.html" /> 
+    <link rel="prev" title="pysegcnn.core.dataset.StandardEoDataset" href="pysegcnn.core.dataset.StandardEoDataset.html" /> 
 </head>
 
 <body class="wy-body-for-nav">
@@ -87,8 +87,8 @@
 <li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
 <li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Reference</a><ul class="current">
 <li class="toctree-l2 current"><a class="reference internal" href="../api.html#dataset">Dataset</a><ul class="current">
-<li class="toctree-l3"><a class="reference internal" href="pysegcnn.core.dataset.ImageDataset.html">pysegcnn.core.dataset.ImageDataset</a></li>
-<li class="toctree-l3 current"><a class="reference internal" href="../api.html#supported-datasets">Supported datasets</a><ul class="current">
+<li class="toctree-l3"><a class="reference internal" href="../api.html#generic-classes">Generic classes</a></li>
+<li class="toctree-l3 current"><a class="reference internal" href="../api.html#specific-classes">Specific classes</a><ul class="current">
 <li class="toctree-l4 current"><a class="current reference internal" href="#">pysegcnn.core.dataset.SparcsDataset</a></li>
 <li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.dataset.Cloud95Dataset.html">pysegcnn.core.dataset.Cloud95Dataset</a></li>
 </ul>
@@ -170,81 +170,49 @@
 <dl class="py class">
 <dt id="pysegcnn.core.dataset.SparcsDataset">
 <em class="property">class </em><code class="sig-prename descclassname">pysegcnn.core.dataset.</code><code class="sig-name descname">SparcsDataset</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">root_dir</span></em>, <em class="sig-param"><span class="n">use_bands</span><span class="o">=</span><span class="default_value">[]</span></em>, <em class="sig-param"><span class="n">tile_size</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">pad</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">gt_pattern</span><span class="o">=</span><span class="default_value">'(.*)gt\\.tif'</span></em>, <em class="sig-param"><span class="n">sort</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">seed</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">transforms</span><span class="o">=</span><span class="default_value">[]</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/dataset.html#SparcsDataset"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.dataset.SparcsDataset" title="Permalink to this definition">¶</a></dt>
-<dd><p>Class for the <a class="reference external" href="https://www.usgs.gov/land-resources/nli/landsat/spatial-procedures-automated-removal-cloud-and-shadow-sparcs-validation">Sparcs</a> dataset.</p>
-<dl class="field-list simple">
+<dd><p>Class for the <a class="reference external" href="https://www.usgs.gov/land-resources/nli/landsat/spatial-procedures-automated-removal-cloud-and-shadow-sparcs-validation">Sparcs</a> dataset by <a class="reference external" href="https://www.mdpi.com/2072-4292/6/6/4907">Hughes &amp; Hayes (2014)</a>.</p>
+<dl class="py method">
+<dt id="pysegcnn.core.dataset.SparcsDataset.__init__">
+<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">root_dir</span></em>, <em class="sig-param"><span class="n">use_bands</span><span class="o">=</span><span class="default_value">[]</span></em>, <em class="sig-param"><span class="n">tile_size</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">pad</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">gt_pattern</span><span class="o">=</span><span class="default_value">'(.*)gt\\.tif'</span></em>, <em class="sig-param"><span class="n">sort</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">seed</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">transforms</span><span class="o">=</span><span class="default_value">[]</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/dataset.html#SparcsDataset.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.dataset.SparcsDataset.__init__" title="Permalink to this definition">¶</a></dt>
+<dd><p>Initialize.</p>
+<dl class="field-list">
 <dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>root_dir</strong> (<cite>str</cite>) – The root directory, path to the dataset.</p></li>
-<li><p><strong>use_bands</strong> (<cite>list</cite> [<cite>str</cite>], optional) – A list of the spectral bands to use. The default is [].</p></li>
-<li><p><strong>tile_size</strong> (<cite>int</cite> or <cite>None</cite>, optional) – The size of the tiles. If not <cite>None</cite>, each scene is divided into square
-tiles of shape (tile_size, tile_size). The default is None.</p></li>
-<li><p><strong>pad</strong> (<cite>bool</cite>, optional) – Whether to center pad the input image. Set <code class="docutils literal notranslate"><span class="pre">pad</span></code> = True, if the
-images are not evenly divisible by the <code class="docutils literal notranslate"><span class="pre">tile_size</span></code>. The image data is
-padded with a constant padding value of zero. For each image, the
-corresponding ground truth image is padded with a “no data” label.
-The default is False.</p></li>
-<li><p><strong>gt_pattern</strong> (<cite>str</cite>, optional) – A regural expression to match the ground truth naming convention. All
-directories and subdirectories in <code class="docutils literal notranslate"><span class="pre">root_dir</span></code> are searched for files
-matching <code class="docutils literal notranslate"><span class="pre">gt_pattern</span></code>. The default is ‘(.*)gt\.tif’.</p></li>
-<li><p><strong>sort</strong> (<cite>bool</cite>, optional) – Whether to chronologically sort the samples. Useful for time series
-data. The default is False.</p></li>
-<li><p><strong>seed</strong> (<cite>int</cite>, optional) – The random seed. Used to split the dataset into training, validation
-and test set. Useful for reproducibility. The default is 0.</p></li>
-<li><p><strong>transforms</strong> (<cite>list</cite> [<cite>pysegcnn.core.split.Augment</cite>], optional) – List of <cite>pysegcnn.core.split.Augment</cite> instances. Each item in
-<code class="docutils literal notranslate"><span class="pre">transforms</span></code> generates a distinct transformed version of the dataset.
-The total dataset is composed of the original untransformed dataset
-together with each transformed version of it.
-If <code class="docutils literal notranslate"><span class="pre">transforms</span></code> = [], only the original dataset is used.
-The default is [].</p></li>
-</ul>
+<dd class="field-odd"><dl>
+<dt><strong>root_dir</strong><span class="classifier"><cite>str</cite></span></dt><dd><p>The root directory, path to the dataset.</p>
+</dd>
+<dt><strong>use_bands</strong><span class="classifier"><cite>list</cite> [<cite>str</cite>], optional</span></dt><dd><p>A list of the spectral bands to use. The default is <cite>[]</cite>.</p>
 </dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
+<dt><strong>tile_size</strong><span class="classifier"><cite>int</cite> or <cite>None</cite>, optional</span></dt><dd><p>The size of the tiles. If not <cite>None</cite>, each scene is divided into
+square tiles of shape <code class="docutils literal notranslate"><span class="pre">(tile_size,</span> <span class="pre">tile_size)</span></code>. The default is
+<cite>None</cite>.</p>
 </dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
+<dt><strong>pad</strong><span class="classifier"><cite>bool</cite>, optional</span></dt><dd><p>Whether to center pad the input image. Set <code class="docutils literal notranslate"><span class="pre">pad=True</span></code>, if the
+images are not evenly divisible by the <code class="docutils literal notranslate"><span class="pre">tile_size</span></code>. The image
+data is padded with a constant padding value of zero. For each
+image, the corresponding ground truth image is padded with a
+“no data” label. The default is <cite>False</cite>.</p>
+</dd>
+<dt><strong>gt_pattern</strong><span class="classifier"><cite>str</cite>, optional</span></dt><dd><p>A regural expression to match the ground truth naming convention.
+All directories and subdirectories in <code class="docutils literal notranslate"><span class="pre">root_dir</span></code> are searched for
+files matching <code class="docutils literal notranslate"><span class="pre">gt_pattern</span></code>. The default is <cite>(.*)gt\.tif</cite>.</p>
+</dd>
+<dt><strong>sort</strong><span class="classifier"><cite>bool</cite>, optional</span></dt><dd><p>Whether to chronologically sort the samples. Useful for time series
+data. The default is <cite>False</cite>.</p>
+</dd>
+<dt><strong>seed</strong><span class="classifier"><cite>int</cite>, optional</span></dt><dd><p>The random seed. Used to split the dataset into training,
+validation and test set. Useful for reproducibility. The default is
+<cite>0</cite>.</p>
+</dd>
+<dt><strong>transforms</strong><span class="classifier"><cite>list</cite>, optional</span></dt><dd><p>List of <a class="reference internal" href="pysegcnn.core.transforms.Augment.html#pysegcnn.core.transforms.Augment" title="pysegcnn.core.transforms.Augment"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.transforms.Augment</span></code></a> instances.
+Each item in <code class="docutils literal notranslate"><span class="pre">transforms</span></code> generates a distinct transformed
+version of the dataset. The total dataset is composed of the
+original untransformed dataset together with each transformed
+version of it. If <code class="docutils literal notranslate"><span class="pre">transforms=[]</span></code>, only the original dataset is
+used. The default is <cite>[]</cite>.</p>
+</dd>
+</dl>
 </dd>
 </dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">build_samples</span></code>(scene)</p></td>
-<td><p>Stack the bands of a sample in a single array.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">compose_scenes</span></code>()</p></td>
-<td><p>Build the list of samples of the dataset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_labels</span></code>()</p></td>
-<td><p>Class labels of the Sparcs dataset.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_sensor</span></code>()</p></td>
-<td><p>Landsat 8 bands of the Sparcs dataset.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">get_size</span></code>()</p></td>
-<td><p>Image size of the Sparcs dataset.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parse_scene_id</span></code>(scene_id)</p></td>
-<td><p>Parse Sparcs scene identifiers (Landsat 8).</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">preprocess</span></code>(data, gt)</p></td>
-<td><p>Preprocess Sparcs dataset images.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">read_scene</span></code>(idx)</p></td>
-<td><p>Read the data of the sample with index <code class="docutils literal notranslate"><span class="pre">idx</span></code>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to_tensor</span></code>(x, dtype)</p></td>
-<td><p>Convert <code class="docutils literal notranslate"><span class="pre">x</span></code> to <cite>torch.Tensor</cite>.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="pysegcnn.core.dataset.SparcsDataset.__init__">
-<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">root_dir</span></em>, <em class="sig-param"><span class="n">use_bands</span><span class="o">=</span><span class="default_value">[]</span></em>, <em class="sig-param"><span class="n">tile_size</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">pad</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">gt_pattern</span><span class="o">=</span><span class="default_value">'(.*)gt\\.tif'</span></em>, <em class="sig-param"><span class="n">sort</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">seed</span><span class="o">=</span><span class="default_value">0</span></em>, <em class="sig-param"><span class="n">transforms</span><span class="o">=</span><span class="default_value">[]</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/dataset.html#SparcsDataset.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.dataset.SparcsDataset.__init__" title="Permalink to this definition">¶</a></dt>
-<dd><p>Initialize self.  See help(type(self)) for accurate signature.</p>
 </dd></dl>
 
 <p class="rubric">Methods</p>
@@ -255,7 +223,7 @@ The default is [].</p></li>
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="#pysegcnn.core.dataset.SparcsDataset.__init__" title="pysegcnn.core.dataset.SparcsDataset.__init__"><code class="xref py py-obj docutils literal notranslate"><span class="pre">__init__</span></code></a>(root_dir[, use_bands, tile_size, …])</p></td>
-<td><p>Initialize self.</p></td>
+<td><p>Initialize.</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">build_samples</span></code>(scene)</p></td>
 <td><p>Stack the bands of a sample in a single array.</p></td>
@@ -282,7 +250,7 @@ The default is [].</p></li>
 <td><p>Read the data of the sample with index <code class="docutils literal notranslate"><span class="pre">idx</span></code>.</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to_tensor</span></code>(x, dtype)</p></td>
-<td><p>Convert <code class="docutils literal notranslate"><span class="pre">x</span></code> to <cite>torch.Tensor</cite>.</p></td>
+<td><p>Convert <code class="docutils literal notranslate"><span class="pre">x</span></code> to <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.Tensor</span></code>.</p></td>
 </tr>
 </tbody>
 </table>
@@ -301,7 +269,7 @@ The default is [].</p></li>
         <a href="pysegcnn.core.dataset.Cloud95Dataset.html" class="btn btn-neutral float-right" title="pysegcnn.core.dataset.Cloud95Dataset" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
       
       
-        <a href="pysegcnn.core.dataset.ImageDataset.html" class="btn btn-neutral float-left" title="pysegcnn.core.dataset.ImageDataset" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+        <a href="pysegcnn.core.dataset.StandardEoDataset.html" class="btn btn-neutral float-left" title="pysegcnn.core.dataset.StandardEoDataset" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
       
     </div>
   
diff --git a/docs/_build/html/source/generated/pysegcnn.core.layers.Block.html b/docs/_build/html/source/generated/pysegcnn.core.layers.Block.html
index aca8887..a0aa792 100644
--- a/docs/_build/html/source/generated/pysegcnn.core.layers.Block.html
+++ b/docs/_build/html/source/generated/pysegcnn.core.layers.Block.html
@@ -35,7 +35,9 @@
 
     
     <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
+    <link rel="search" title="Search" href="../../search.html" />
+    <link rel="next" title="pysegcnn.core.layers.Conv2dSame" href="pysegcnn.core.layers.Conv2dSame.html" />
+    <link rel="prev" title="pysegcnn.core.dataset.Cloud95Dataset" href="pysegcnn.core.dataset.Cloud95Dataset.html" /> 
 </head>
 
 <body class="wy-body-for-nav">
@@ -80,10 +82,26 @@
               
             
             
-              <ul>
+              <ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="../requirements.html">Requirements</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api.html">API Reference</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Reference</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../api.html#dataset">Dataset</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../api.html#models">Models</a><ul class="current">
+<li class="toctree-l3 current"><a class="reference internal" href="../api.html#layers">Layers</a><ul class="current">
+<li class="toctree-l4 current"><a class="current reference internal" href="#">pysegcnn.core.layers.Block</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.Conv2dSame.html">pysegcnn.core.layers.Conv2dSame</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.ConvBnReluMaxPool.html">pysegcnn.core.layers.ConvBnReluMaxPool</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.ConvBnReluMaxUnpool.html">pysegcnn.core.layers.ConvBnReluMaxUnpool</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.ConvBnReluUpsample.html">pysegcnn.core.layers.ConvBnReluUpsample</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../api.html#encoder-decoder-architechture">Encoder-Decoder architechture</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../api.html#neural-networks">Neural Networks</a></li>
+</ul>
+</li>
+</ul>
+</li>
 </ul>
 
             
@@ -130,6 +148,8 @@
     
       <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
         
+          <li><a href="../api.html">API Reference</a> &raquo;</li>
+        
       <li>pysegcnn.core.layers.Block</li>
     
     
@@ -155,148 +175,45 @@
 <dt id="pysegcnn.core.layers.Block">
 <em class="property">class </em><code class="sig-prename descclassname">pysegcnn.core.layers.</code><code class="sig-name descname">Block</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#Block"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.Block" title="Permalink to this definition">¶</a></dt>
 <dd><p>Basic convolutional block.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>in_channels</strong> (<cite>int</cite>) – Number of input channels.</p></li>
-<li><p><strong>out_channels</strong> (<cite>int</cite>) – Number of output channels.</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional arguments passed to <cite>pysegcnn.core.layers.Conv2dSame</cite>.</p></li>
-</ul>
+<dl class="field-list">
+<dt class="field-odd">Attributes</dt>
+<dd class="field-odd"><dl>
+<dt><strong>in_channels</strong><span class="classifier"><cite>int</cite></span></dt><dd><p>Number of input channels.</p>
 </dd>
-<dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>TypeError</strong> – Raised if <cite>~pysegcnn.core.layers.Block.layers</cite> method does not return
-an instance of <cite>torch.nn.Sequential</cite>.</p>
+<dt><strong>out_channels</strong><span class="classifier"><cite>int</cite></span></dt><dd><p>Number of output channels.</p>
 </dd>
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p></p>
+<dt><strong>kwargs: `dict` [`str`]</strong></dt><dd><p>Additional arguments passed to
+<a class="reference internal" href="pysegcnn.core.layers.Conv2dSame.html#pysegcnn.core.layers.Conv2dSame" title="pysegcnn.core.layers.Conv2dSame"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.Conv2dSame</span></code></a>.</p>
 </dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p>None.</p>
+<dt><strong>conv</strong><span class="classifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">torch.nn.Sequential</span></code></span></dt><dd><p>The convolutional layers of the block.</p>
+</dd>
+</dl>
 </dd>
 </dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code>()</p></td>
-<td><p>Set the extra representation of the module</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">forward</span></code>()</p></td>
-<td><p>Forward pass of the block.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">layers</span></code>()</p></td>
-<td><p>Define the layers of the block.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 62%" />
-<col style="width: 38%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
 <dl class="py method">
 <dt id="pysegcnn.core.layers.Block.__init__">
 <code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#Block.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.Block.__init__" title="Permalink to this definition">¶</a></dt>
-<dd><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p>
+<dd><p>Initialize.</p>
+<dl class="field-list">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><dl>
+<dt><strong>in_channels</strong><span class="classifier"><cite>int</cite></span></dt><dd><p>Number of input channels.</p>
+</dd>
+<dt><strong>out_channels</strong><span class="classifier"><cite>int</cite></span></dt><dd><p>Number of output channels.</p>
+</dd>
+<dt><strong>**kwargs: `dict` [`str`]</strong></dt><dd><p>Additional arguments passed to
+<a class="reference internal" href="pysegcnn.core.layers.Conv2dSame.html#pysegcnn.core.layers.Conv2dSame" title="pysegcnn.core.layers.Conv2dSame"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.Conv2dSame</span></code></a>.</p>
+</dd>
+</dl>
+</dd>
+<dt class="field-even">Raises</dt>
+<dd class="field-even"><dl class="simple">
+<dt>TypeError</dt><dd><p>Raised if <code class="xref py py-meth docutils literal notranslate"><span class="pre">layers()</span></code> method does
+not return an instance of <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.nn.Sequential</span></code>.</p>
+</dd>
+</dl>
+</dd>
+</dl>
 </dd></dl>
 
 <p class="rubric">Methods</p>
@@ -307,7 +224,7 @@ an instance of <cite>torch.nn.Sequential</cite>.</p>
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="#pysegcnn.core.layers.Block.__init__" title="pysegcnn.core.layers.Block.__init__"><code class="xref py py-obj docutils literal notranslate"><span class="pre">__init__</span></code></a>(in_channels, out_channels, **kwargs)</p></td>
-<td><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p></td>
+<td><p>Initialize.</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
 <td><p>Adds a child module to the current module.</p></td>
@@ -435,6 +352,15 @@ an instance of <cite>torch.nn.Sequential</cite>.</p>
           </div>
           <footer>
   
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="pysegcnn.core.layers.Conv2dSame.html" class="btn btn-neutral float-right" title="pysegcnn.core.layers.Conv2dSame" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="pysegcnn.core.dataset.Cloud95Dataset.html" class="btn btn-neutral float-left" title="pysegcnn.core.dataset.Cloud95Dataset" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
 
   <hr/>
 
diff --git a/docs/_build/html/source/generated/pysegcnn.core.layers.Conv2dSame.html b/docs/_build/html/source/generated/pysegcnn.core.layers.Conv2dSame.html
index 48ec4f8..52f5262 100644
--- a/docs/_build/html/source/generated/pysegcnn.core.layers.Conv2dSame.html
+++ b/docs/_build/html/source/generated/pysegcnn.core.layers.Conv2dSame.html
@@ -35,7 +35,9 @@
 
     
     <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
+    <link rel="search" title="Search" href="../../search.html" />
+    <link rel="next" title="pysegcnn.core.layers.ConvBnReluMaxPool" href="pysegcnn.core.layers.ConvBnReluMaxPool.html" />
+    <link rel="prev" title="pysegcnn.core.layers.Block" href="pysegcnn.core.layers.Block.html" /> 
 </head>
 
 <body class="wy-body-for-nav">
@@ -80,10 +82,26 @@
               
             
             
-              <ul>
+              <ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="../requirements.html">Requirements</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api.html">API Reference</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Reference</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../api.html#dataset">Dataset</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../api.html#models">Models</a><ul class="current">
+<li class="toctree-l3 current"><a class="reference internal" href="../api.html#layers">Layers</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.Block.html">pysegcnn.core.layers.Block</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">pysegcnn.core.layers.Conv2dSame</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.ConvBnReluMaxPool.html">pysegcnn.core.layers.ConvBnReluMaxPool</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.ConvBnReluMaxUnpool.html">pysegcnn.core.layers.ConvBnReluMaxUnpool</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.ConvBnReluUpsample.html">pysegcnn.core.layers.ConvBnReluUpsample</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../api.html#encoder-decoder-architechture">Encoder-Decoder architechture</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../api.html#neural-networks">Neural Networks</a></li>
+</ul>
+</li>
+</ul>
+</li>
 </ul>
 
             
@@ -130,6 +148,8 @@
     
       <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
         
+          <li><a href="../api.html">API Reference</a> &raquo;</li>
+        
       <li>pysegcnn.core.layers.Conv2dSame</li>
     
     
@@ -158,11 +178,23 @@
 <p>Given the kernel size, the dilation and a stride of 1, the padding is
 calculated such that the output of the convolution has the same spatial
 dimensions as the input.</p>
+<dl class="field-list">
+<dt class="field-odd">Attributes</dt>
+<dd class="field-odd"><dl>
+<dt><strong>padding</strong><span class="classifier"><cite>tuple</cite> [<cite>int</cite>]</span></dt><dd><p>The amount of padding, (pad_height, pad_width).</p>
+</dd>
+</dl>
+</dd>
+</dl>
+<dl class="py method">
+<dt id="pysegcnn.core.layers.Conv2dSame.__init__">
+<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#Conv2dSame.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.Conv2dSame.__init__" title="Permalink to this definition">¶</a></dt>
+<dd><p>Initialize.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>*args</strong> (<cite>list</cite> [<cite>str</cite>]) – <dl class="simple">
-<dt>positional arguments passed to <cite>torch.nn.Conv2d</cite>:</dt><dd><dl class="simple">
+<dd class="field-odd"><dl class="simple">
+<dt><strong>*args: `list` [`str`]</strong></dt><dd><dl class="simple">
+<dt>positional arguments passed to <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.nn.Conv2d</span></code>:</dt><dd><dl class="simple">
 <dt><code class="docutils literal notranslate"><span class="pre">'in_channels'</span></code>: <cite>int</cite></dt><dd><p>Number of input channels.</p>
 </dd>
 <dt><code class="docutils literal notranslate"><span class="pre">'out_channels'</span></code>: <cite>int</cite></dt><dd><p>Number of output channels.</p>
@@ -172,144 +204,12 @@ dimensions as the input.</p>
 </dl>
 </dd>
 </dl>
-</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional keyword arguments passed to <a href="#id1"><span class="problematic" id="id2">`torch.nn.Conv2d`_</span></a>.</p></li>
-<li><p><strong>_torch.nn.Conv2d</strong> (<em>.</em>) – <a class="reference external" href="https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html#torch.nn.Conv2d">https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html#torch.nn.Conv2d</a></p></li>
-</ul>
 </dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
+<dt><strong>**kwargs: `dict` [`str`]</strong></dt><dd><p>Additional keyword arguments passed to <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.nn.Conv2d</span></code>.</p>
 </dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
+</dl>
 </dd>
 </dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code>()</p></td>
-<td><p>Set the extra representation of the module</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">same_padding</span></code>(d, k)</p></td>
-<td><p>Calculate the amount of padding.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 67%" />
-<col style="width: 33%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>forward</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-odd"><td><p><strong>reset_parameters</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="pysegcnn.core.layers.Conv2dSame.__init__">
-<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#Conv2dSame.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.Conv2dSame.__init__" title="Permalink to this definition">¶</a></dt>
-<dd><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p>
 </dd></dl>
 
 <p class="rubric">Methods</p>
@@ -320,7 +220,7 @@ dimensions as the input.</p>
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="#pysegcnn.core.layers.Conv2dSame.__init__" title="pysegcnn.core.layers.Conv2dSame.__init__"><code class="xref py py-obj docutils literal notranslate"><span class="pre">__init__</span></code></a>(*args, **kwargs)</p></td>
-<td><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p></td>
+<td><p>Initialize.</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
 <td><p>Adds a child module to the current module.</p></td>
@@ -451,6 +351,15 @@ dimensions as the input.</p>
           </div>
           <footer>
   
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="pysegcnn.core.layers.ConvBnReluMaxPool.html" class="btn btn-neutral float-right" title="pysegcnn.core.layers.ConvBnReluMaxPool" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="pysegcnn.core.layers.Block.html" class="btn btn-neutral float-left" title="pysegcnn.core.layers.Block" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
 
   <hr/>
 
diff --git a/docs/_build/html/source/generated/pysegcnn.core.layers.ConvBnReluMaxPool.html b/docs/_build/html/source/generated/pysegcnn.core.layers.ConvBnReluMaxPool.html
index 09c844e..f037442 100644
--- a/docs/_build/html/source/generated/pysegcnn.core.layers.ConvBnReluMaxPool.html
+++ b/docs/_build/html/source/generated/pysegcnn.core.layers.ConvBnReluMaxPool.html
@@ -35,7 +35,9 @@
 
     
     <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
+    <link rel="search" title="Search" href="../../search.html" />
+    <link rel="next" title="pysegcnn.core.layers.ConvBnReluMaxUnpool" href="pysegcnn.core.layers.ConvBnReluMaxUnpool.html" />
+    <link rel="prev" title="pysegcnn.core.layers.Conv2dSame" href="pysegcnn.core.layers.Conv2dSame.html" /> 
 </head>
 
 <body class="wy-body-for-nav">
@@ -80,10 +82,26 @@
               
             
             
-              <ul>
+              <ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="../requirements.html">Requirements</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api.html">API Reference</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Reference</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../api.html#dataset">Dataset</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../api.html#models">Models</a><ul class="current">
+<li class="toctree-l3 current"><a class="reference internal" href="../api.html#layers">Layers</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.Block.html">pysegcnn.core.layers.Block</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.Conv2dSame.html">pysegcnn.core.layers.Conv2dSame</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">pysegcnn.core.layers.ConvBnReluMaxPool</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.ConvBnReluMaxUnpool.html">pysegcnn.core.layers.ConvBnReluMaxUnpool</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.ConvBnReluUpsample.html">pysegcnn.core.layers.ConvBnReluUpsample</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../api.html#encoder-decoder-architechture">Encoder-Decoder architechture</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../api.html#neural-networks">Neural Networks</a></li>
+</ul>
+</li>
+</ul>
+</li>
 </ul>
 
             
@@ -130,6 +148,8 @@
     
       <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
         
+          <li><a href="../api.html">API Reference</a> &raquo;</li>
+        
       <li>pysegcnn.core.layers.ConvBnReluMaxPool</li>
     
     
@@ -155,148 +175,30 @@
 <dt id="pysegcnn.core.layers.ConvBnReluMaxPool">
 <em class="property">class </em><code class="sig-prename descclassname">pysegcnn.core.layers.</code><code class="sig-name descname">ConvBnReluMaxPool</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#ConvBnReluMaxPool"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.ConvBnReluMaxPool" title="Permalink to this definition">¶</a></dt>
 <dd><p>Block of convolution, batchnorm, relu and 2x2 max pool.</p>
-<dl class="field-list simple">
+<dl class="py method">
+<dt id="pysegcnn.core.layers.ConvBnReluMaxPool.__init__">
+<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#ConvBnReluMaxPool.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.ConvBnReluMaxPool.__init__" title="Permalink to this definition">¶</a></dt>
+<dd><p>Initialize.</p>
+<dl class="field-list">
 <dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>in_channels</strong> (<cite>int</cite>) – Number of input channels.</p></li>
-<li><p><strong>out_channels</strong> (<cite>int</cite>) – Number of output channels.</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional keyword arguments passed to
-<cite>pysegcnn.core.layers.Conv2dSame</cite>.</p></li>
-</ul>
+<dd class="field-odd"><dl>
+<dt><strong>in_channels</strong><span class="classifier"><cite>int</cite></span></dt><dd><p>Number of input channels.</p>
 </dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
+<dt><strong>out_channels</strong><span class="classifier"><cite>int</cite></span></dt><dd><p>Number of output channels.</p>
 </dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
+<dt><strong>**kwargs: `dict` [`str`]</strong></dt><dd><p>Additional arguments passed to
+<a class="reference internal" href="pysegcnn.core.layers.Conv2dSame.html#pysegcnn.core.layers.Conv2dSame" title="pysegcnn.core.layers.Conv2dSame"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.Conv2dSame</span></code></a>.</p>
+</dd>
+</dl>
+</dd>
+<dt class="field-even">Raises</dt>
+<dd class="field-even"><dl class="simple">
+<dt>TypeError</dt><dd><p>Raised if <code class="xref py py-meth docutils literal notranslate"><span class="pre">layers()</span></code> method does
+not return an instance of <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.nn.Sequential</span></code>.</p>
+</dd>
+</dl>
 </dd>
 </dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">downsample</span></code>(x)</p></td>
-<td><p>2x2 max pooling layer, <cite>torch.nn.functional.max_pool2d</cite>.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code>()</p></td>
-<td><p>Define optional extra information about this module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">forward</span></code>(x)</p></td>
-<td><p>Forward pass of an encoder block.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">layers</span></code>()</p></td>
-<td><p>Sequence of convolution, batchnorm and relu layers.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 62%" />
-<col style="width: 38%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="pysegcnn.core.layers.ConvBnReluMaxPool.__init__">
-<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#ConvBnReluMaxPool.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.ConvBnReluMaxPool.__init__" title="Permalink to this definition">¶</a></dt>
-<dd><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p>
 </dd></dl>
 
 <p class="rubric">Methods</p>
@@ -307,7 +209,7 @@
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="#pysegcnn.core.layers.ConvBnReluMaxPool.__init__" title="pysegcnn.core.layers.ConvBnReluMaxPool.__init__"><code class="xref py py-obj docutils literal notranslate"><span class="pre">__init__</span></code></a>(in_channels, out_channels, **kwargs)</p></td>
-<td><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p></td>
+<td><p>Initialize.</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
 <td><p>Adds a child module to the current module.</p></td>
@@ -334,7 +236,7 @@
 <td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">downsample</span></code>(x)</p></td>
-<td><p>2x2 max pooling layer, <cite>torch.nn.functional.max_pool2d</cite>.</p></td>
+<td><p>2x2 max pooling layer.</p></td>
 </tr>
 <tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
 <td><p>Sets the module in evaluation mode.</p></td>
@@ -438,6 +340,15 @@
           </div>
           <footer>
   
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="pysegcnn.core.layers.ConvBnReluMaxUnpool.html" class="btn btn-neutral float-right" title="pysegcnn.core.layers.ConvBnReluMaxUnpool" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="pysegcnn.core.layers.Conv2dSame.html" class="btn btn-neutral float-left" title="pysegcnn.core.layers.Conv2dSame" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
 
   <hr/>
 
diff --git a/docs/_build/html/source/generated/pysegcnn.core.layers.ConvBnReluMaxUnpool.html b/docs/_build/html/source/generated/pysegcnn.core.layers.ConvBnReluMaxUnpool.html
index f694846..3cbf3dc 100644
--- a/docs/_build/html/source/generated/pysegcnn.core.layers.ConvBnReluMaxUnpool.html
+++ b/docs/_build/html/source/generated/pysegcnn.core.layers.ConvBnReluMaxUnpool.html
@@ -35,7 +35,9 @@
 
     
     <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
+    <link rel="search" title="Search" href="../../search.html" />
+    <link rel="next" title="pysegcnn.core.layers.ConvBnReluUpsample" href="pysegcnn.core.layers.ConvBnReluUpsample.html" />
+    <link rel="prev" title="pysegcnn.core.layers.ConvBnReluMaxPool" href="pysegcnn.core.layers.ConvBnReluMaxPool.html" /> 
 </head>
 
 <body class="wy-body-for-nav">
@@ -80,10 +82,26 @@
               
             
             
-              <ul>
+              <ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="../requirements.html">Requirements</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api.html">API Reference</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Reference</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../api.html#dataset">Dataset</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../api.html#models">Models</a><ul class="current">
+<li class="toctree-l3 current"><a class="reference internal" href="../api.html#layers">Layers</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.Block.html">pysegcnn.core.layers.Block</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.Conv2dSame.html">pysegcnn.core.layers.Conv2dSame</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.ConvBnReluMaxPool.html">pysegcnn.core.layers.ConvBnReluMaxPool</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">pysegcnn.core.layers.ConvBnReluMaxUnpool</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.ConvBnReluUpsample.html">pysegcnn.core.layers.ConvBnReluUpsample</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../api.html#encoder-decoder-architechture">Encoder-Decoder architechture</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../api.html#neural-networks">Neural Networks</a></li>
+</ul>
+</li>
+</ul>
+</li>
 </ul>
 
             
@@ -130,6 +148,8 @@
     
       <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
         
+          <li><a href="../api.html">API Reference</a> &raquo;</li>
+        
       <li>pysegcnn.core.layers.ConvBnReluMaxUnpool</li>
     
     
@@ -155,148 +175,30 @@
 <dt id="pysegcnn.core.layers.ConvBnReluMaxUnpool">
 <em class="property">class </em><code class="sig-prename descclassname">pysegcnn.core.layers.</code><code class="sig-name descname">ConvBnReluMaxUnpool</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#ConvBnReluMaxUnpool"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.ConvBnReluMaxUnpool" title="Permalink to this definition">¶</a></dt>
 <dd><p>Block of convolution, batchnorm, relu and 2x2 max unpool.</p>
-<dl class="field-list simple">
+<dl class="py method">
+<dt id="pysegcnn.core.layers.ConvBnReluMaxUnpool.__init__">
+<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#ConvBnReluMaxUnpool.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.ConvBnReluMaxUnpool.__init__" title="Permalink to this definition">¶</a></dt>
+<dd><p>Initialize.</p>
+<dl class="field-list">
 <dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>in_channels</strong> (<cite>int</cite>) – Number of input channels.</p></li>
-<li><p><strong>out_channels</strong> (<cite>int</cite>) – Number of output channels</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional keyword arguments passed to
-<cite>pysegcnn.core.layers.Conv2dSame</cite>.</p></li>
-</ul>
+<dd class="field-odd"><dl>
+<dt><strong>in_channels</strong><span class="classifier"><cite>int</cite></span></dt><dd><p>Number of input channels.</p>
 </dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
+<dt><strong>out_channels</strong><span class="classifier"><cite>int</cite></span></dt><dd><p>Number of output channels.</p>
 </dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
+<dt><strong>**kwargs: `dict` [`str`]</strong></dt><dd><p>Additional arguments passed to
+<a class="reference internal" href="pysegcnn.core.layers.Conv2dSame.html#pysegcnn.core.layers.Conv2dSame" title="pysegcnn.core.layers.Conv2dSame"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.Conv2dSame</span></code></a>.</p>
+</dd>
+</dl>
+</dd>
+<dt class="field-even">Raises</dt>
+<dd class="field-even"><dl class="simple">
+<dt>TypeError</dt><dd><p>Raised if <code class="xref py py-meth docutils literal notranslate"><span class="pre">layers()</span></code> method does
+not return an instance of <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.nn.Sequential</span></code>.</p>
+</dd>
+</dl>
 </dd>
 </dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code>()</p></td>
-<td><p>Define optional extra information about this module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">forward</span></code>(x, feature, indices, skip)</p></td>
-<td><p>Forward pass of a decoder block.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">layers</span></code>()</p></td>
-<td><p>Sequence of convolution, batchnorm and relu layers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">upsample</span></code>(x, feature, indices)</p></td>
-<td><p>2x2 max unpooling layer.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 62%" />
-<col style="width: 38%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="pysegcnn.core.layers.ConvBnReluMaxUnpool.__init__">
-<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#ConvBnReluMaxUnpool.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.ConvBnReluMaxUnpool.__init__" title="Permalink to this definition">¶</a></dt>
-<dd><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p>
 </dd></dl>
 
 <p class="rubric">Methods</p>
@@ -307,7 +209,7 @@
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="#pysegcnn.core.layers.ConvBnReluMaxUnpool.__init__" title="pysegcnn.core.layers.ConvBnReluMaxUnpool.__init__"><code class="xref py py-obj docutils literal notranslate"><span class="pre">__init__</span></code></a>(in_channels, out_channels, **kwargs)</p></td>
-<td><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p></td>
+<td><p>Initialize.</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
 <td><p>Adds a child module to the current module.</p></td>
@@ -438,6 +340,15 @@
           </div>
           <footer>
   
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="pysegcnn.core.layers.ConvBnReluUpsample.html" class="btn btn-neutral float-right" title="pysegcnn.core.layers.ConvBnReluUpsample" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="pysegcnn.core.layers.ConvBnReluMaxPool.html" class="btn btn-neutral float-left" title="pysegcnn.core.layers.ConvBnReluMaxPool" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
 
   <hr/>
 
diff --git a/docs/_build/html/source/generated/pysegcnn.core.layers.ConvBnReluUpsample.html b/docs/_build/html/source/generated/pysegcnn.core.layers.ConvBnReluUpsample.html
index f5ebbff..c504ad0 100644
--- a/docs/_build/html/source/generated/pysegcnn.core.layers.ConvBnReluUpsample.html
+++ b/docs/_build/html/source/generated/pysegcnn.core.layers.ConvBnReluUpsample.html
@@ -35,7 +35,9 @@
 
     
     <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
+    <link rel="search" title="Search" href="../../search.html" />
+    <link rel="next" title="pysegcnn.core.layers.EncoderBlock" href="pysegcnn.core.layers.EncoderBlock.html" />
+    <link rel="prev" title="pysegcnn.core.layers.ConvBnReluMaxUnpool" href="pysegcnn.core.layers.ConvBnReluMaxUnpool.html" /> 
 </head>
 
 <body class="wy-body-for-nav">
@@ -80,10 +82,26 @@
               
             
             
-              <ul>
+              <ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="../requirements.html">Requirements</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api.html">API Reference</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Reference</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../api.html#dataset">Dataset</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../api.html#models">Models</a><ul class="current">
+<li class="toctree-l3 current"><a class="reference internal" href="../api.html#layers">Layers</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.Block.html">pysegcnn.core.layers.Block</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.Conv2dSame.html">pysegcnn.core.layers.Conv2dSame</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.ConvBnReluMaxPool.html">pysegcnn.core.layers.ConvBnReluMaxPool</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.ConvBnReluMaxUnpool.html">pysegcnn.core.layers.ConvBnReluMaxUnpool</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">pysegcnn.core.layers.ConvBnReluUpsample</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../api.html#encoder-decoder-architechture">Encoder-Decoder architechture</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../api.html#neural-networks">Neural Networks</a></li>
+</ul>
+</li>
+</ul>
+</li>
 </ul>
 
             
@@ -130,6 +148,8 @@
     
       <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
         
+          <li><a href="../api.html">API Reference</a> &raquo;</li>
+        
       <li>pysegcnn.core.layers.ConvBnReluUpsample</li>
     
     
@@ -154,148 +174,31 @@
 <dl class="py class">
 <dt id="pysegcnn.core.layers.ConvBnReluUpsample">
 <em class="property">class </em><code class="sig-prename descclassname">pysegcnn.core.layers.</code><code class="sig-name descname">ConvBnReluUpsample</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#ConvBnReluUpsample"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.ConvBnReluUpsample" title="Permalink to this definition">¶</a></dt>
-<dd><p>Block of convolution, batchnorm, relu and nearest neighbor upsampling.</p>
-<dl class="field-list simple">
+<dd><p>Block of convolution, batchnorm, relu and nearest neighbor upsample.</p>
+<dl class="py method">
+<dt id="pysegcnn.core.layers.ConvBnReluUpsample.__init__">
+<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#ConvBnReluUpsample.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.ConvBnReluUpsample.__init__" title="Permalink to this definition">¶</a></dt>
+<dd><p>Initialize.</p>
+<dl class="field-list">
 <dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>in_channels</strong> (<cite>int</cite>) – Number of input channels.</p></li>
-<li><p><strong>out_channels</strong> (<cite>int</cite>) – Number of output channels</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional arguments passed to <cite>pysegcnn.core.layers.Conv2dSame</cite>.</p></li>
-</ul>
+<dd class="field-odd"><dl>
+<dt><strong>in_channels</strong><span class="classifier"><cite>int</cite></span></dt><dd><p>Number of input channels.</p>
 </dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
+<dt><strong>out_channels</strong><span class="classifier"><cite>int</cite></span></dt><dd><p>Number of output channels.</p>
 </dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
+<dt><strong>**kwargs: `dict` [`str`]</strong></dt><dd><p>Additional arguments passed to
+<a class="reference internal" href="pysegcnn.core.layers.Conv2dSame.html#pysegcnn.core.layers.Conv2dSame" title="pysegcnn.core.layers.Conv2dSame"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.Conv2dSame</span></code></a>.</p>
+</dd>
+</dl>
+</dd>
+<dt class="field-even">Raises</dt>
+<dd class="field-even"><dl class="simple">
+<dt>TypeError</dt><dd><p>Raised if <code class="xref py py-meth docutils literal notranslate"><span class="pre">layers()</span></code> method does
+not return an instance of <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.nn.Sequential</span></code>.</p>
+</dd>
+</dl>
 </dd>
 </dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code>()</p></td>
-<td><p>Define optional extra information about this module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">forward</span></code>(x, feature, indices, skip)</p></td>
-<td><p>Forward pass of a decoder block.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">layers</span></code>()</p></td>
-<td><p>Sequence of convolution, batchnorm and relu layers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">upsample</span></code>(x, feature[, indices])</p></td>
-<td><p>Nearest neighbor upsampling.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 62%" />
-<col style="width: 38%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="pysegcnn.core.layers.ConvBnReluUpsample.__init__">
-<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#ConvBnReluUpsample.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.ConvBnReluUpsample.__init__" title="Permalink to this definition">¶</a></dt>
-<dd><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p>
 </dd></dl>
 
 <p class="rubric">Methods</p>
@@ -306,7 +209,7 @@
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="#pysegcnn.core.layers.ConvBnReluUpsample.__init__" title="pysegcnn.core.layers.ConvBnReluUpsample.__init__"><code class="xref py py-obj docutils literal notranslate"><span class="pre">__init__</span></code></a>(in_channels, out_channels, **kwargs)</p></td>
-<td><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p></td>
+<td><p>Initialize.</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
 <td><p>Adds a child module to the current module.</p></td>
@@ -437,6 +340,15 @@
           </div>
           <footer>
   
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="pysegcnn.core.layers.EncoderBlock.html" class="btn btn-neutral float-right" title="pysegcnn.core.layers.EncoderBlock" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="pysegcnn.core.layers.ConvBnReluMaxUnpool.html" class="btn btn-neutral float-left" title="pysegcnn.core.layers.ConvBnReluMaxUnpool" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
 
   <hr/>
 
diff --git a/docs/_build/html/source/generated/pysegcnn.core.layers.Decoder.html b/docs/_build/html/source/generated/pysegcnn.core.layers.Decoder.html
index 286b5ca..761c49f 100644
--- a/docs/_build/html/source/generated/pysegcnn.core.layers.Decoder.html
+++ b/docs/_build/html/source/generated/pysegcnn.core.layers.Decoder.html
@@ -35,7 +35,9 @@
 
     
     <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
+    <link rel="search" title="Search" href="../../search.html" />
+    <link rel="next" title="pysegcnn.core.models.Network" href="pysegcnn.core.models.Network.html" />
+    <link rel="prev" title="pysegcnn.core.layers.Encoder" href="pysegcnn.core.layers.Encoder.html" /> 
 </head>
 
 <body class="wy-body-for-nav">
@@ -80,10 +82,25 @@
               
             
             
-              <ul>
+              <ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="../requirements.html">Requirements</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api.html">API Reference</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Reference</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../api.html#dataset">Dataset</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../api.html#models">Models</a><ul class="current">
+<li class="toctree-l3"><a class="reference internal" href="../api.html#layers">Layers</a></li>
+<li class="toctree-l3 current"><a class="reference internal" href="../api.html#encoder-decoder-architechture">Encoder-Decoder architechture</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.EncoderBlock.html">pysegcnn.core.layers.EncoderBlock</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.DecoderBlock.html">pysegcnn.core.layers.DecoderBlock</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.Encoder.html">pysegcnn.core.layers.Encoder</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">pysegcnn.core.layers.Decoder</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../api.html#neural-networks">Neural Networks</a></li>
+</ul>
+</li>
+</ul>
+</li>
 </ul>
 
             
@@ -130,6 +147,8 @@
     
       <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
         
+          <li><a href="../api.html">API Reference</a> &raquo;</li>
+        
       <li>pysegcnn.core.layers.Decoder</li>
     
     
@@ -156,149 +175,49 @@
 <em class="property">class </em><code class="sig-prename descclassname">pysegcnn.core.layers.</code><code class="sig-name descname">Decoder</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">filters</span></em>, <em class="sig-param"><span class="n">block</span></em>, <em class="sig-param"><span class="n">skip</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#Decoder"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.Decoder" title="Permalink to this definition">¶</a></dt>
 <dd><p>Generic convolutional decoder.</p>
 <p>When instanciating an encoder-decoder architechure, <code class="docutils literal notranslate"><span class="pre">filters</span></code> should be
-the same for <cite>pysegcnn.core.layers.Encoder</cite> and
-<cite>pysegcnn.core.layers.Decoder</cite>.</p>
-<p>See <cite>pysegcnn.core.models.UNet</cite> for an example implementation.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>filters</strong> (<cite>list</cite> [<cite>int</cite>]) – List of input channels to each convolutional block. The length of
-<code class="docutils literal notranslate"><span class="pre">filters</span></code> determines the depth of the decoder. The first element of
-<code class="docutils literal notranslate"><span class="pre">filters</span></code> has to be the number of channels of the input images.</p></li>
-<li><p><strong>block</strong> (<cite>pysegcnn.core.layers.DecoderBlock</cite>) – The convolutional block defining a layer in the decoder.
-A subclass of <cite>pysegcnn.core.layers.DecoderBlock</cite>, e.g.
-<cite>pysegcnn.core.layers.ConvBnReluMaxUnpool</cite>.</p></li>
-<li><p><strong>skip</strong> (<cite>bool</cite>) – Whether to apply skip connections from the encoder to the decoder.</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional arguments passed to <cite>pysegcnn.core.layers.Conv2dSame</cite>.</p></li>
-</ul>
+the same for <a class="reference internal" href="pysegcnn.core.layers.Encoder.html#pysegcnn.core.layers.Encoder" title="pysegcnn.core.layers.Encoder"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.Encoder</span></code></a> and
+<a class="reference internal" href="#pysegcnn.core.layers.Decoder" title="pysegcnn.core.layers.Decoder"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.Decoder</span></code></a>.</p>
+<p>See <a class="reference internal" href="pysegcnn.core.models.UNet.html#pysegcnn.core.models.UNet" title="pysegcnn.core.models.UNet"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.models.UNet</span></code></a> for an example implementation.</p>
+<dl class="field-list">
+<dt class="field-odd">Attributes</dt>
+<dd class="field-odd"><dl>
+<dt><strong>features</strong><span class="classifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">numpy.ndarray</span></code></span></dt><dd><p>Input channels to each convolutional block, i.e. <code class="docutils literal notranslate"><span class="pre">filters</span></code>.</p>
+</dd>
+<dt><strong>block</strong><span class="classifier"><a class="reference internal" href="pysegcnn.core.layers.EncoderBlock.html#pysegcnn.core.layers.EncoderBlock" title="pysegcnn.core.layers.EncoderBlock"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.EncoderBlock</span></code></a></span></dt><dd><p>The convolutional block defining a layer in the decoder.
+A subclass of <a class="reference internal" href="pysegcnn.core.layers.EncoderBlock.html#pysegcnn.core.layers.EncoderBlock" title="pysegcnn.core.layers.EncoderBlock"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.EncoderBlock</span></code></a>, e.g.
+<a class="reference internal" href="pysegcnn.core.layers.ConvBnReluMaxPool.html#pysegcnn.core.layers.ConvBnReluMaxPool" title="pysegcnn.core.layers.ConvBnReluMaxPool"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.ConvBnReluMaxPool</span></code></a>.</p>
 </dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
+<dt><strong>skip</strong><span class="classifier"><cite>bool</cite></span></dt><dd><p>Whether to apply skip connections from the encoder to the decoder.</p>
 </dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
+<dt><strong>layers</strong><span class="classifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">torch.nn.ModuleList</span></code></span></dt><dd><p>List of blocks in the decoder.</p>
+</dd>
+</dl>
 </dd>
 </dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code>()</p></td>
-<td><p>Set the extra representation of the module</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">forward</span></code>(x, enc_cache)</p></td>
-<td><p>Forward pass of the decoder.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 62%" />
-<col style="width: 38%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
 <dl class="py method">
 <dt id="pysegcnn.core.layers.Decoder.__init__">
 <code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">filters</span></em>, <em class="sig-param"><span class="n">block</span></em>, <em class="sig-param"><span class="n">skip</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#Decoder.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.Decoder.__init__" title="Permalink to this definition">¶</a></dt>
-<dd><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p>
+<dd><p>Initialize.</p>
+<dl class="field-list">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><dl>
+<dt><strong>filters</strong><span class="classifier"><cite>list</cite> [<cite>int</cite>]</span></dt><dd><p>List of input channels to each convolutional block. The length of
+<code class="docutils literal notranslate"><span class="pre">filters</span></code> determines the depth of the decoder. The first element
+of <code class="docutils literal notranslate"><span class="pre">filters</span></code> has to be the number of channels of the input
+images.</p>
+</dd>
+<dt><strong>block</strong><span class="classifier"><a class="reference internal" href="pysegcnn.core.layers.DecoderBlock.html#pysegcnn.core.layers.DecoderBlock" title="pysegcnn.core.layers.DecoderBlock"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.DecoderBlock</span></code></a></span></dt><dd><p>The convolutional block defining a layer in the decoder.
+A subclass of <a class="reference internal" href="pysegcnn.core.layers.DecoderBlock.html#pysegcnn.core.layers.DecoderBlock" title="pysegcnn.core.layers.DecoderBlock"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.DecoderBlock</span></code></a>, e.g.
+<a class="reference internal" href="pysegcnn.core.layers.ConvBnReluMaxUnpool.html#pysegcnn.core.layers.ConvBnReluMaxUnpool" title="pysegcnn.core.layers.ConvBnReluMaxUnpool"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.ConvBnReluMaxUnpool</span></code></a>.</p>
+</dd>
+<dt><strong>skip</strong><span class="classifier"><cite>bool</cite>, optional</span></dt><dd><p>Whether to apply skip connections from the encoder to the decoder.</p>
+</dd>
+<dt><strong>**kwargs: `dict` [`str`]</strong></dt><dd><p>Additional arguments passed to
+<a class="reference internal" href="pysegcnn.core.layers.Conv2dSame.html#pysegcnn.core.layers.Conv2dSame" title="pysegcnn.core.layers.Conv2dSame"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.Conv2dSame</span></code></a>.</p>
+</dd>
+</dl>
+</dd>
+</dl>
 </dd></dl>
 
 <p class="rubric">Methods</p>
@@ -309,7 +228,7 @@ A subclass of <cite>pysegcnn.core.layers.DecoderBlock</cite>, e.g.
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="#pysegcnn.core.layers.Decoder.__init__" title="pysegcnn.core.layers.Decoder.__init__"><code class="xref py py-obj docutils literal notranslate"><span class="pre">__init__</span></code></a>(filters, block[, skip])</p></td>
-<td><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p></td>
+<td><p>Initialize.</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
 <td><p>Adds a child module to the current module.</p></td>
@@ -434,6 +353,15 @@ A subclass of <cite>pysegcnn.core.layers.DecoderBlock</cite>, e.g.
           </div>
           <footer>
   
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="pysegcnn.core.models.Network.html" class="btn btn-neutral float-right" title="pysegcnn.core.models.Network" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="pysegcnn.core.layers.Encoder.html" class="btn btn-neutral float-left" title="pysegcnn.core.layers.Encoder" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
 
   <hr/>
 
diff --git a/docs/_build/html/source/generated/pysegcnn.core.layers.DecoderBlock.html b/docs/_build/html/source/generated/pysegcnn.core.layers.DecoderBlock.html
index fa52e72..830aa5d 100644
--- a/docs/_build/html/source/generated/pysegcnn.core.layers.DecoderBlock.html
+++ b/docs/_build/html/source/generated/pysegcnn.core.layers.DecoderBlock.html
@@ -35,7 +35,9 @@
 
     
     <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
+    <link rel="search" title="Search" href="../../search.html" />
+    <link rel="next" title="pysegcnn.core.layers.Encoder" href="pysegcnn.core.layers.Encoder.html" />
+    <link rel="prev" title="pysegcnn.core.layers.EncoderBlock" href="pysegcnn.core.layers.EncoderBlock.html" /> 
 </head>
 
 <body class="wy-body-for-nav">
@@ -80,10 +82,25 @@
               
             
             
-              <ul>
+              <ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="../requirements.html">Requirements</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api.html">API Reference</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Reference</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../api.html#dataset">Dataset</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../api.html#models">Models</a><ul class="current">
+<li class="toctree-l3"><a class="reference internal" href="../api.html#layers">Layers</a></li>
+<li class="toctree-l3 current"><a class="reference internal" href="../api.html#encoder-decoder-architechture">Encoder-Decoder architechture</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.EncoderBlock.html">pysegcnn.core.layers.EncoderBlock</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">pysegcnn.core.layers.DecoderBlock</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.Encoder.html">pysegcnn.core.layers.Encoder</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.Decoder.html">pysegcnn.core.layers.Decoder</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../api.html#neural-networks">Neural Networks</a></li>
+</ul>
+</li>
+</ul>
+</li>
 </ul>
 
             
@@ -130,6 +147,8 @@
     
       <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
         
+          <li><a href="../api.html">API Reference</a> &raquo;</li>
+        
       <li>pysegcnn.core.layers.DecoderBlock</li>
     
     
@@ -155,147 +174,30 @@
 <dt id="pysegcnn.core.layers.DecoderBlock">
 <em class="property">class </em><code class="sig-prename descclassname">pysegcnn.core.layers.</code><code class="sig-name descname">DecoderBlock</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#DecoderBlock"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.DecoderBlock" title="Permalink to this definition">¶</a></dt>
 <dd><p>Block of a convolutional decoder.</p>
-<dl class="field-list simple">
+<dl class="py method">
+<dt id="pysegcnn.core.layers.DecoderBlock.__init__">
+<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#DecoderBlock.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.DecoderBlock.__init__" title="Permalink to this definition">¶</a></dt>
+<dd><p>Initialize.</p>
+<dl class="field-list">
 <dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>in_channels</strong> (<cite>int</cite>) – Number of input channels.</p></li>
-<li><p><strong>out_channels</strong> (<cite>int</cite>) – Number of output channels.</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional arguments passed to <cite>pysegcnn.core.layers.Conv2dSame</cite>.</p></li>
-</ul>
+<dd class="field-odd"><dl>
+<dt><strong>in_channels</strong><span class="classifier"><cite>int</cite></span></dt><dd><p>Number of input channels.</p>
 </dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
+<dt><strong>out_channels</strong><span class="classifier"><cite>int</cite></span></dt><dd><p>Number of output channels.</p>
 </dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
+<dt><strong>**kwargs: `dict` [`str`]</strong></dt><dd><p>Additional arguments passed to
+<a class="reference internal" href="pysegcnn.core.layers.Conv2dSame.html#pysegcnn.core.layers.Conv2dSame" title="pysegcnn.core.layers.Conv2dSame"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.Conv2dSame</span></code></a>.</p>
+</dd>
+</dl>
+</dd>
+<dt class="field-even">Raises</dt>
+<dd class="field-even"><dl class="simple">
+<dt>TypeError</dt><dd><p>Raised if <code class="xref py py-meth docutils literal notranslate"><span class="pre">layers()</span></code> method does
+not return an instance of <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.nn.Sequential</span></code>.</p>
+</dd>
+</dl>
 </dd>
 </dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code>()</p></td>
-<td><p>Set the extra representation of the module</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">forward</span></code>(x, feature, indices, skip)</p></td>
-<td><p>Forward pass of a decoder block.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">layers</span></code>()</p></td>
-<td><p>Define the layers of the block.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">upsample</span></code>(x, feature, indices)</p></td>
-<td><p>Define the upsampling method.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 62%" />
-<col style="width: 38%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="pysegcnn.core.layers.DecoderBlock.__init__">
-<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#DecoderBlock.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.DecoderBlock.__init__" title="Permalink to this definition">¶</a></dt>
-<dd><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p>
 </dd></dl>
 
 <p class="rubric">Methods</p>
@@ -306,7 +208,7 @@
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="#pysegcnn.core.layers.DecoderBlock.__init__" title="pysegcnn.core.layers.DecoderBlock.__init__"><code class="xref py py-obj docutils literal notranslate"><span class="pre">__init__</span></code></a>(in_channels, out_channels, **kwargs)</p></td>
-<td><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p></td>
+<td><p>Initialize.</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
 <td><p>Adds a child module to the current module.</p></td>
@@ -437,6 +339,15 @@
           </div>
           <footer>
   
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="pysegcnn.core.layers.Encoder.html" class="btn btn-neutral float-right" title="pysegcnn.core.layers.Encoder" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="pysegcnn.core.layers.EncoderBlock.html" class="btn btn-neutral float-left" title="pysegcnn.core.layers.EncoderBlock" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
 
   <hr/>
 
diff --git a/docs/_build/html/source/generated/pysegcnn.core.layers.Encoder.html b/docs/_build/html/source/generated/pysegcnn.core.layers.Encoder.html
index fbc6521..ebc77d2 100644
--- a/docs/_build/html/source/generated/pysegcnn.core.layers.Encoder.html
+++ b/docs/_build/html/source/generated/pysegcnn.core.layers.Encoder.html
@@ -35,7 +35,9 @@
 
     
     <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
+    <link rel="search" title="Search" href="../../search.html" />
+    <link rel="next" title="pysegcnn.core.layers.Decoder" href="pysegcnn.core.layers.Decoder.html" />
+    <link rel="prev" title="pysegcnn.core.layers.DecoderBlock" href="pysegcnn.core.layers.DecoderBlock.html" /> 
 </head>
 
 <body class="wy-body-for-nav">
@@ -80,10 +82,25 @@
               
             
             
-              <ul>
+              <ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="../requirements.html">Requirements</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api.html">API Reference</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Reference</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../api.html#dataset">Dataset</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../api.html#models">Models</a><ul class="current">
+<li class="toctree-l3"><a class="reference internal" href="../api.html#layers">Layers</a></li>
+<li class="toctree-l3 current"><a class="reference internal" href="../api.html#encoder-decoder-architechture">Encoder-Decoder architechture</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.EncoderBlock.html">pysegcnn.core.layers.EncoderBlock</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.DecoderBlock.html">pysegcnn.core.layers.DecoderBlock</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">pysegcnn.core.layers.Encoder</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.Decoder.html">pysegcnn.core.layers.Decoder</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../api.html#neural-networks">Neural Networks</a></li>
+</ul>
+</li>
+</ul>
+</li>
 </ul>
 
             
@@ -130,6 +147,8 @@
     
       <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
         
+          <li><a href="../api.html">API Reference</a> &raquo;</li>
+        
       <li>pysegcnn.core.layers.Encoder</li>
     
     
@@ -156,148 +175,56 @@
 <em class="property">class </em><code class="sig-prename descclassname">pysegcnn.core.layers.</code><code class="sig-name descname">Encoder</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">filters</span></em>, <em class="sig-param"><span class="n">block</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#Encoder"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.Encoder" title="Permalink to this definition">¶</a></dt>
 <dd><p>Generic convolutional encoder.</p>
 <p>When instanciating an encoder-decoder architechure, <code class="docutils literal notranslate"><span class="pre">filters</span></code> should be
-the same for <cite>pysegcnn.core.layers.Encoder</cite> and
-<cite>pysegcnn.core.layers.Decoder</cite>.</p>
-<p>See <cite>pysegcnn.core.models.UNet</cite> for an example implementation.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>filters</strong> (<cite>list</cite> [<cite>int</cite>]) – List of input channels to each convolutional block. The length of
-<code class="docutils literal notranslate"><span class="pre">filters</span></code> determines the depth of the encoder. The first element of
-<code class="docutils literal notranslate"><span class="pre">filters</span></code> has to be the number of channels of the input images.</p></li>
-<li><p><strong>block</strong> (<cite>pysegcnn.core.layers.EncoderBlock</cite>) – The convolutional block defining a layer in the encoder.
-A subclass of <cite>pysegcnn.core.layers.EncoderBlock</cite>, e.g.
-<cite>pysegcnn.core.layers.ConvBnReluMaxPool</cite>.</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional arguments passed to <cite>pysegcnn.core.layers.Conv2dSame</cite>.</p></li>
-</ul>
+the same for <a class="reference internal" href="#pysegcnn.core.layers.Encoder" title="pysegcnn.core.layers.Encoder"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.Encoder</span></code></a> and
+<a class="reference internal" href="pysegcnn.core.layers.Decoder.html#pysegcnn.core.layers.Decoder" title="pysegcnn.core.layers.Decoder"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.Decoder</span></code></a>.</p>
+<p>See <a class="reference internal" href="pysegcnn.core.models.UNet.html#pysegcnn.core.models.UNet" title="pysegcnn.core.models.UNet"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.models.UNet</span></code></a> for an example implementation.</p>
+<dl class="field-list">
+<dt class="field-odd">Attributes</dt>
+<dd class="field-odd"><dl>
+<dt><strong>features</strong><span class="classifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">numpy.ndarray</span></code></span></dt><dd><p>Input channels to each convolutional block, i.e. <code class="docutils literal notranslate"><span class="pre">filters</span></code>.</p>
+</dd>
+<dt><strong>block</strong><span class="classifier"><a class="reference internal" href="pysegcnn.core.layers.EncoderBlock.html#pysegcnn.core.layers.EncoderBlock" title="pysegcnn.core.layers.EncoderBlock"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.EncoderBlock</span></code></a></span></dt><dd><p>The convolutional block defining a layer in the encoder.
+A subclass of <a class="reference internal" href="pysegcnn.core.layers.EncoderBlock.html#pysegcnn.core.layers.EncoderBlock" title="pysegcnn.core.layers.EncoderBlock"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.EncoderBlock</span></code></a>, e.g.
+<a class="reference internal" href="pysegcnn.core.layers.ConvBnReluMaxPool.html#pysegcnn.core.layers.ConvBnReluMaxPool" title="pysegcnn.core.layers.ConvBnReluMaxPool"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.ConvBnReluMaxPool</span></code></a>.</p>
 </dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
+<dt><strong>layers</strong><span class="classifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">torch.nn.ModuleList</span></code></span></dt><dd><p>List of blocks in the encoder.</p>
 </dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
+<dt><strong>cache</strong><span class="classifier"><cite>dict</cite></span></dt><dd><dl class="simple">
+<dt>Intermediate encoder outputs. Dictionary with keys:</dt><dd><dl class="simple">
+<dt><code class="docutils literal notranslate"><span class="pre">'feature'</span></code></dt><dd><p>The intermediate encoder outputs (<code class="xref py py-class docutils literal notranslate"><span class="pre">torch.Tensor</span></code>).</p>
+</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">'indices'</span></code></dt><dd><p>The indices of the max pooling layer, if required
+(<code class="xref py py-class docutils literal notranslate"><span class="pre">torch.Tensor</span></code>).</p>
+</dd>
+</dl>
+</dd>
+</dl>
+</dd>
+</dl>
 </dd>
 </dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code>()</p></td>
-<td><p>Set the extra representation of the module</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">forward</span></code>(x)</p></td>
-<td><p>Forward pass of the encoder.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 62%" />
-<col style="width: 38%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
 <dl class="py method">
 <dt id="pysegcnn.core.layers.Encoder.__init__">
 <code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">filters</span></em>, <em class="sig-param"><span class="n">block</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#Encoder.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.Encoder.__init__" title="Permalink to this definition">¶</a></dt>
-<dd><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p>
+<dd><p>Initialize.</p>
+<dl class="field-list">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><dl>
+<dt><strong>filters</strong><span class="classifier"><cite>list</cite> [<cite>int</cite>]</span></dt><dd><p>List of input channels to each convolutional block. The length of
+<code class="docutils literal notranslate"><span class="pre">filters</span></code> determines the depth of the encoder. The first element
+of <code class="docutils literal notranslate"><span class="pre">filters</span></code> has to be the number of channels of the input
+images.</p>
+</dd>
+<dt><strong>block</strong><span class="classifier"><a class="reference internal" href="pysegcnn.core.layers.EncoderBlock.html#pysegcnn.core.layers.EncoderBlock" title="pysegcnn.core.layers.EncoderBlock"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.EncoderBlock</span></code></a></span></dt><dd><p>The convolutional block defining a layer in the encoder.
+A subclass of <a class="reference internal" href="pysegcnn.core.layers.EncoderBlock.html#pysegcnn.core.layers.EncoderBlock" title="pysegcnn.core.layers.EncoderBlock"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.EncoderBlock</span></code></a>, e.g.
+<a class="reference internal" href="pysegcnn.core.layers.ConvBnReluMaxPool.html#pysegcnn.core.layers.ConvBnReluMaxPool" title="pysegcnn.core.layers.ConvBnReluMaxPool"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.ConvBnReluMaxPool</span></code></a>.</p>
+</dd>
+<dt><strong>**kwargs: `dict` [`str`]</strong></dt><dd><p>Additional arguments passed to
+<a class="reference internal" href="pysegcnn.core.layers.Conv2dSame.html#pysegcnn.core.layers.Conv2dSame" title="pysegcnn.core.layers.Conv2dSame"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.Conv2dSame</span></code></a>.</p>
+</dd>
+</dl>
+</dd>
+</dl>
 </dd></dl>
 
 <p class="rubric">Methods</p>
@@ -308,7 +235,7 @@ A subclass of <cite>pysegcnn.core.layers.EncoderBlock</cite>, e.g.
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="#pysegcnn.core.layers.Encoder.__init__" title="pysegcnn.core.layers.Encoder.__init__"><code class="xref py py-obj docutils literal notranslate"><span class="pre">__init__</span></code></a>(filters, block, **kwargs)</p></td>
-<td><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p></td>
+<td><p>Initialize.</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
 <td><p>Adds a child module to the current module.</p></td>
@@ -433,6 +360,15 @@ A subclass of <cite>pysegcnn.core.layers.EncoderBlock</cite>, e.g.
           </div>
           <footer>
   
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="pysegcnn.core.layers.Decoder.html" class="btn btn-neutral float-right" title="pysegcnn.core.layers.Decoder" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="pysegcnn.core.layers.DecoderBlock.html" class="btn btn-neutral float-left" title="pysegcnn.core.layers.DecoderBlock" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
 
   <hr/>
 
diff --git a/docs/_build/html/source/generated/pysegcnn.core.layers.EncoderBlock.html b/docs/_build/html/source/generated/pysegcnn.core.layers.EncoderBlock.html
index c41607a..8fb1f3d 100644
--- a/docs/_build/html/source/generated/pysegcnn.core.layers.EncoderBlock.html
+++ b/docs/_build/html/source/generated/pysegcnn.core.layers.EncoderBlock.html
@@ -35,7 +35,9 @@
 
     
     <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
+    <link rel="search" title="Search" href="../../search.html" />
+    <link rel="next" title="pysegcnn.core.layers.DecoderBlock" href="pysegcnn.core.layers.DecoderBlock.html" />
+    <link rel="prev" title="pysegcnn.core.layers.ConvBnReluUpsample" href="pysegcnn.core.layers.ConvBnReluUpsample.html" /> 
 </head>
 
 <body class="wy-body-for-nav">
@@ -80,10 +82,25 @@
               
             
             
-              <ul>
+              <ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="../requirements.html">Requirements</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api.html">API Reference</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Reference</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../api.html#dataset">Dataset</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../api.html#models">Models</a><ul class="current">
+<li class="toctree-l3"><a class="reference internal" href="../api.html#layers">Layers</a></li>
+<li class="toctree-l3 current"><a class="reference internal" href="../api.html#encoder-decoder-architechture">Encoder-Decoder architechture</a><ul class="current">
+<li class="toctree-l4 current"><a class="current reference internal" href="#">pysegcnn.core.layers.EncoderBlock</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.DecoderBlock.html">pysegcnn.core.layers.DecoderBlock</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.Encoder.html">pysegcnn.core.layers.Encoder</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.layers.Decoder.html">pysegcnn.core.layers.Decoder</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../api.html#neural-networks">Neural Networks</a></li>
+</ul>
+</li>
+</ul>
+</li>
 </ul>
 
             
@@ -130,6 +147,8 @@
     
       <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
         
+          <li><a href="../api.html">API Reference</a> &raquo;</li>
+        
       <li>pysegcnn.core.layers.EncoderBlock</li>
     
     
@@ -155,147 +174,30 @@
 <dt id="pysegcnn.core.layers.EncoderBlock">
 <em class="property">class </em><code class="sig-prename descclassname">pysegcnn.core.layers.</code><code class="sig-name descname">EncoderBlock</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#EncoderBlock"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.EncoderBlock" title="Permalink to this definition">¶</a></dt>
 <dd><p>Block of a convolutional encoder.</p>
-<dl class="field-list simple">
+<dl class="py method">
+<dt id="pysegcnn.core.layers.EncoderBlock.__init__">
+<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#EncoderBlock.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.EncoderBlock.__init__" title="Permalink to this definition">¶</a></dt>
+<dd><p>Initialize.</p>
+<dl class="field-list">
 <dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>in_channels</strong> (<cite>int</cite>) – Number of input channels.</p></li>
-<li><p><strong>out_channels</strong> (<cite>int</cite>) – Number of output channels.</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional arguments passed to <cite>pysegcnn.core.layers.Conv2dSame</cite>.</p></li>
-</ul>
+<dd class="field-odd"><dl>
+<dt><strong>in_channels</strong><span class="classifier"><cite>int</cite></span></dt><dd><p>Number of input channels.</p>
 </dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
+<dt><strong>out_channels</strong><span class="classifier"><cite>int</cite></span></dt><dd><p>Number of output channels.</p>
 </dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
+<dt><strong>**kwargs: `dict` [`str`]</strong></dt><dd><p>Additional arguments passed to
+<a class="reference internal" href="pysegcnn.core.layers.Conv2dSame.html#pysegcnn.core.layers.Conv2dSame" title="pysegcnn.core.layers.Conv2dSame"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.Conv2dSame</span></code></a>.</p>
+</dd>
+</dl>
+</dd>
+<dt class="field-even">Raises</dt>
+<dd class="field-even"><dl class="simple">
+<dt>TypeError</dt><dd><p>Raised if <code class="xref py py-meth docutils literal notranslate"><span class="pre">layers()</span></code> method does
+not return an instance of <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.nn.Sequential</span></code>.</p>
+</dd>
+</dl>
 </dd>
 </dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">downsample</span></code>(x)</p></td>
-<td><p>Define the downsampling method.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code>()</p></td>
-<td><p>Set the extra representation of the module</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">forward</span></code>(x)</p></td>
-<td><p>Forward pass of an encoder block.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">layers</span></code>()</p></td>
-<td><p>Define the layers of the block.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 62%" />
-<col style="width: 38%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
-<dl class="py method">
-<dt id="pysegcnn.core.layers.EncoderBlock.__init__">
-<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">out_channels</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/layers.html#EncoderBlock.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.layers.EncoderBlock.__init__" title="Permalink to this definition">¶</a></dt>
-<dd><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p>
 </dd></dl>
 
 <p class="rubric">Methods</p>
@@ -306,7 +208,7 @@
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="#pysegcnn.core.layers.EncoderBlock.__init__" title="pysegcnn.core.layers.EncoderBlock.__init__"><code class="xref py py-obj docutils literal notranslate"><span class="pre">__init__</span></code></a>(in_channels, out_channels, **kwargs)</p></td>
-<td><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p></td>
+<td><p>Initialize.</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
 <td><p>Adds a child module to the current module.</p></td>
@@ -437,6 +339,15 @@
           </div>
           <footer>
   
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="pysegcnn.core.layers.DecoderBlock.html" class="btn btn-neutral float-right" title="pysegcnn.core.layers.DecoderBlock" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="pysegcnn.core.layers.ConvBnReluUpsample.html" class="btn btn-neutral float-left" title="pysegcnn.core.layers.ConvBnReluUpsample" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
 
   <hr/>
 
diff --git a/docs/_build/html/source/generated/pysegcnn.core.layers.html b/docs/_build/html/source/generated/pysegcnn.core.layers.html
deleted file mode 100644
index 5f954e5..0000000
--- a/docs/_build/html/source/generated/pysegcnn.core.layers.html
+++ /dev/null
@@ -1,283 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>pysegcnn.core.layers &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
-        <script src="../../_static/jquery.js"></script>
-        <script src="../../_static/underscore.js"></script>
-        <script src="../../_static/doctools.js"></script>
-        <script src="../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" />
-    <link rel="next" title="pysegcnn.core.models" href="pysegcnn.core.models.html" />
-    <link rel="prev" title="API Reference" href="../api.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../requirements.html">Requirements</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Reference</a><ul class="current">
-<li class="toctree-l2 current"><a class="reference internal" href="../api.html#layers-and-models">Layers and Models</a><ul class="current">
-<li class="toctree-l3 current"><a class="current reference internal" href="#">pysegcnn.core.layers</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#license">License</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="pysegcnn.core.models.html">pysegcnn.core.models</a></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../../index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-          <li><a href="../api.html">API Reference</a> &raquo;</li>
-        
-      <li>pysegcnn.core.layers</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-            
-            <a href="../../_sources/source/generated/pysegcnn.core.layers.rst.txt" rel="nofollow"> View page source</a>
-          
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <div class="section" id="module-pysegcnn.core.layers">
-<span id="pysegcnn-core-layers"></span><h1>pysegcnn.core.layers<a class="headerlink" href="#module-pysegcnn.core.layers" title="Permalink to this headline">¶</a></h1>
-<p>Layers of a convolutional encoder-decoder network.</p>
-<div class="section" id="license">
-<h2>License<a class="headerlink" href="#license" title="Permalink to this headline">¶</a></h2>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-<p class="rubric">Functions</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">conv_bn_relu</span></code>(in_channels, out_channels, **kwargs)</p></td>
-<td><p>Block of convolution, batch normalization and rectified linear unit.</p></td>
-</tr>
-</tbody>
-</table>
-<p class="rubric">Classes</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">Block</span></code>(in_channels, out_channels, **kwargs)</p></td>
-<td><p>Basic convolutional block.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">Conv2dSame</span></code>(*args, **kwargs)</p></td>
-<td><p>A convolution preserving the shape of its input.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">ConvBnReluMaxPool</span></code>(in_channels, out_channels, …)</p></td>
-<td><p>Block of convolution, batchnorm, relu and 2x2 max pool.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">ConvBnReluMaxUnpool</span></code>(in_channels, …)</p></td>
-<td><p>Block of convolution, batchnorm, relu and 2x2 max unpool.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">ConvBnReluUpsample</span></code>(in_channels, …)</p></td>
-<td><p>Block of convolution, batchnorm, relu and nearest neighbor upsampling.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">Decoder</span></code>(filters, block[, skip])</p></td>
-<td><p>Generic convolutional decoder.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">DecoderBlock</span></code>(in_channels, out_channels, **kwargs)</p></td>
-<td><p>Block of a convolutional decoder.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">Encoder</span></code>(filters, block, **kwargs)</p></td>
-<td><p>Generic convolutional encoder.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">EncoderBlock</span></code>(in_channels, out_channels, **kwargs)</p></td>
-<td><p>Block of a convolutional encoder.</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-</div>
-
-
-           </div>
-           
-          </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="pysegcnn.core.models.html" class="btn btn-neutral float-right" title="pysegcnn.core.models" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="../api.html" class="btn btn-neutral float-left" title="API Reference" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
-    </div>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/source/generated/pysegcnn.core.models.Network.html b/docs/_build/html/source/generated/pysegcnn.core.models.Network.html
index 1147eae..d5fb800 100644
--- a/docs/_build/html/source/generated/pysegcnn.core.models.Network.html
+++ b/docs/_build/html/source/generated/pysegcnn.core.models.Network.html
@@ -35,7 +35,9 @@
 
     
     <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
+    <link rel="search" title="Search" href="../../search.html" />
+    <link rel="next" title="pysegcnn.core.models.UNet" href="pysegcnn.core.models.UNet.html" />
+    <link rel="prev" title="pysegcnn.core.layers.Decoder" href="pysegcnn.core.layers.Decoder.html" /> 
 </head>
 
 <body class="wy-body-for-nav">
@@ -80,10 +82,23 @@
               
             
             
-              <ul>
+              <ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="../requirements.html">Requirements</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api.html">API Reference</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Reference</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../api.html#dataset">Dataset</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../api.html#models">Models</a><ul class="current">
+<li class="toctree-l3"><a class="reference internal" href="../api.html#layers">Layers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../api.html#encoder-decoder-architechture">Encoder-Decoder architechture</a></li>
+<li class="toctree-l3 current"><a class="reference internal" href="../api.html#neural-networks">Neural Networks</a><ul class="current">
+<li class="toctree-l4 current"><a class="current reference internal" href="#">pysegcnn.core.models.Network</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.models.UNet.html">pysegcnn.core.models.UNet</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
 </ul>
 
             
@@ -130,6 +145,8 @@
     
       <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
         
+          <li><a href="../api.html">API Reference</a> &raquo;</li>
+        
       <li>pysegcnn.core.models.Network</li>
     
     
@@ -156,153 +173,19 @@
 <em class="property">class </em><code class="sig-prename descclassname">pysegcnn.core.models.</code><code class="sig-name descname">Network</code><a class="reference internal" href="../../_modules/pysegcnn/core/models.html#Network"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.models.Network" title="Permalink to this definition">¶</a></dt>
 <dd><p>Generic Network class.</p>
 <p>The base class for each model. If you want to implement a new model,
-inherit the <code class="docutils literal notranslate"><span class="pre">~pysegcnn.core.models.Network</span></code> class.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p></p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p>None.</p>
-</dd>
+inherit the <a class="reference internal" href="#pysegcnn.core.models.Network" title="pysegcnn.core.models.Network"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.models.Network</span></code></a> class.</p>
+<dl class="field-list">
 <dt class="field-odd">Attributes</dt>
-<dd class="field-odd"><dl class="simple">
-<dt><code class="xref py py-obj docutils literal notranslate"><span class="pre">state</span></code></dt><dd><p>Return the model state file.</p>
+<dd class="field-odd"><dl>
+<dt><strong>state_file</strong><span class="classifier"><cite>str</cite> or <cite>None</cite> or <code class="xref py py-class docutils literal notranslate"><span class="pre">pathlib.Path</span></code></span></dt><dd><p>The model state file, where the model parameters are saved.</p>
 </dd>
 </dl>
 </dd>
 </dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code>()</p></td>
-<td><p>Set the extra representation of the module</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">forward</span></code>(*input)</p></td>
-<td><p></p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">freeze</span></code>()</p></td>
-<td><p>Freeze the weights of a model.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load</span></code>(state_file)</p></td>
-<td><p>Load a model state.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">save</span></code>(state_file, optimizer[, bands])</p></td>
-<td><p>Save the model state.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">unfreeze</span></code>()</p></td>
-<td><p>Unfreeze the weights of a model.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 62%" />
-<col style="width: 38%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
 <dl class="py method">
 <dt id="pysegcnn.core.models.Network.__init__">
 <code class="sig-name descname">__init__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/models.html#Network.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.models.Network.__init__" title="Permalink to this definition">¶</a></dt>
-<dd><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p>
+<dd><p>Initialize.</p>
 </dd></dl>
 
 <p class="rubric">Methods</p>
@@ -313,7 +196,7 @@ inherit the <code class="docutils literal notranslate"><span class="pre">~pysegc
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="#pysegcnn.core.models.Network.__init__" title="pysegcnn.core.models.Network.__init__"><code class="xref py py-obj docutils literal notranslate"><span class="pre">__init__</span></code></a>()</p></td>
-<td><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p></td>
+<td><p>Initialize.</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
 <td><p>Adds a child module to the current module.</p></td>
@@ -453,6 +336,15 @@ inherit the <code class="docutils literal notranslate"><span class="pre">~pysegc
           </div>
           <footer>
   
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="pysegcnn.core.models.UNet.html" class="btn btn-neutral float-right" title="pysegcnn.core.models.UNet" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="pysegcnn.core.layers.Decoder.html" class="btn btn-neutral float-left" title="pysegcnn.core.layers.Decoder" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
 
   <hr/>
 
diff --git a/docs/_build/html/source/generated/pysegcnn.core.models.UNet.html b/docs/_build/html/source/generated/pysegcnn.core.models.UNet.html
index b276d7b..2a81325 100644
--- a/docs/_build/html/source/generated/pysegcnn.core.models.UNet.html
+++ b/docs/_build/html/source/generated/pysegcnn.core.models.UNet.html
@@ -35,7 +35,8 @@
 
     
     <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" /> 
+    <link rel="search" title="Search" href="../../search.html" />
+    <link rel="prev" title="pysegcnn.core.models.Network" href="pysegcnn.core.models.Network.html" /> 
 </head>
 
 <body class="wy-body-for-nav">
@@ -80,10 +81,23 @@
               
             
             
-              <ul>
+              <ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="../requirements.html">Requirements</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../api.html">API Reference</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Reference</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../api.html#dataset">Dataset</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../api.html#models">Models</a><ul class="current">
+<li class="toctree-l3"><a class="reference internal" href="../api.html#layers">Layers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../api.html#encoder-decoder-architechture">Encoder-Decoder architechture</a></li>
+<li class="toctree-l3 current"><a class="reference internal" href="../api.html#neural-networks">Neural Networks</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="pysegcnn.core.models.Network.html">pysegcnn.core.models.Network</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">pysegcnn.core.models.UNet</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
 </ul>
 
             
@@ -130,6 +144,8 @@
     
       <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
         
+          <li><a href="../api.html">API Reference</a> &raquo;</li>
+        
       <li>pysegcnn.core.models.UNet</li>
     
     
@@ -154,170 +170,60 @@
 <dl class="py class">
 <dt id="pysegcnn.core.models.UNet">
 <em class="property">class </em><code class="sig-prename descclassname">pysegcnn.core.models.</code><code class="sig-name descname">UNet</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">nclasses</span></em>, <em class="sig-param"><span class="n">filters</span></em>, <em class="sig-param"><span class="n">skip</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/models.html#UNet"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.models.UNet" title="Permalink to this definition">¶</a></dt>
-<dd><p>A PyTorch implementation of <a class="reference external" href="https://arxiv.org/abs/1505.04597">U-Net</a>.</p>
-<dl class="simple">
-<dt>Slightly modified version of U-Net:</dt><dd><ul class="simple">
-<li><p>each convolution is followed by a batch normalization layer</p></li>
-<li><p>the upsampling is implemented by a 2x2 max unpooling operation</p></li>
+<dd><p>A slightly modified implementation of <a class="reference external" href="https://arxiv.org/abs/1505.04597">U-Net</a> in PyTorch.</p>
+<div class="admonition important">
+<p class="admonition-title">Important</p>
+<ul class="simple">
+<li><p>Each convolution is followed by a batch normalization layer</p></li>
+<li><p>Upsampling is implemented by a 2x2 max unpooling operation</p></li>
 </ul>
+</div>
+<dl class="field-list">
+<dt class="field-odd">Attributes</dt>
+<dd class="field-odd"><dl>
+<dt><strong>in_channels</strong><span class="classifier"><cite>int</cite></span></dt><dd><p>Number of channels of the input images.</p>
 </dd>
-</dl>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>in_channels</strong> (<cite>int</cite>) – Number of channels of the input images.</p></li>
-<li><p><strong>nclasses</strong> (<cite>int</cite>) – Number of classes.</p></li>
-<li><p><strong>filters</strong> (<cite>list</cite> [<cite>int</cite>]) – List of input channels to each convolutional block.</p></li>
-<li><p><strong>skip</strong> (<cite>bool</cite>) – Whether to apply skip connections from the encoder to the decoder.</p></li>
-<li><p><strong>**kwargs</strong> (‘dict’ [<cite>str</cite>]) – Additional keyword arguments passed to
-<cite>pysegcnn.core.layers.Conv2dSame</cite>.</p></li>
-</ul>
+<dt><strong>nclasses</strong><span class="classifier"><cite>int</cite></span></dt><dd><p>Number of classes.</p>
 </dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p></p>
+<dt><strong>kwargs</strong><span class="classifier"><cite>dict</cite> [<cite>str</cite>]</span></dt><dd><p>Additional keyword arguments passed to
+<a class="reference internal" href="pysegcnn.core.layers.Conv2dSame.html#pysegcnn.core.layers.Conv2dSame" title="pysegcnn.core.layers.Conv2dSame"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.Conv2dSame</span></code></a>.</p>
 </dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>None.</p>
+<dt><strong>nfilters</strong><span class="classifier"><cite>list</cite> [<cite>int</cite>]</span></dt><dd><p>List of input channels to each convolutional block.</p>
 </dd>
-<dt class="field-even">Attributes</dt>
-<dd class="field-even"><dl class="simple">
-<dt><code class="xref py py-obj docutils literal notranslate"><span class="pre">state</span></code></dt><dd><p>Return the model state file.</p>
+<dt><strong>skip</strong><span class="classifier"><cite>bool</cite></span></dt><dd><p>Whether to apply skip connections from the encoder to the decoder.</p>
+</dd>
+<dt><strong>epoch</strong><span class="classifier"><cite>int</cite></span></dt><dd><p>Number of epochs the model was trained.</p>
+</dd>
+<dt><strong>encoder</strong><span class="classifier"><a class="reference internal" href="pysegcnn.core.layers.Encoder.html#pysegcnn.core.layers.Encoder" title="pysegcnn.core.layers.Encoder"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.Encoder</span></code></a></span></dt><dd><p>The convolutional encoder.</p>
+</dd>
+<dt><strong>decoder</strong><span class="classifier"><a class="reference internal" href="pysegcnn.core.layers.Decoder.html#pysegcnn.core.layers.Decoder" title="pysegcnn.core.layers.Decoder"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.Decoder</span></code></a></span></dt><dd><p>The convolutional decoder.</p>
+</dd>
+<dt><strong>classifier</strong><span class="classifier"><a class="reference internal" href="pysegcnn.core.layers.Conv2dSame.html#pysegcnn.core.layers.Conv2dSame" title="pysegcnn.core.layers.Conv2dSame"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.Conv2dSame</span></code></a></span></dt><dd><p>The classification layer, a 1x1 convolution.</p>
 </dd>
 </dl>
 </dd>
 </dl>
-<p class="rubric">Methods</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
-<td><p>Adds a child module to the current module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">apply</span></code>(fn)</p></td>
-<td><p>Applies <code class="docutils literal notranslate"><span class="pre">fn</span></code> recursively to every submodule (as returned by <code class="docutils literal notranslate"><span class="pre">.children()</span></code>) as well as self.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">bfloat16</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">bfloat16</span></code> datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">buffers</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module buffers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cpu</span></code>()</p></td>
-<td><p>Moves all model parameters and buffers to the CPU.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">cuda</span></code>([device])</p></td>
-<td><p>Moves all model parameters and buffers to the GPU.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">double</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">double</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">eval</span></code>()</p></td>
-<td><p>Sets the module in evaluation mode.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">extra_repr</span></code>()</p></td>
-<td><p>Set the extra representation of the module</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">float</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to float datatype.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">forward</span></code>(x)</p></td>
-<td><p>Forward propagation of U-Net.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">freeze</span></code>()</p></td>
-<td><p>Freeze the weights of a model.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">half</span></code>()</p></td>
-<td><p>Casts all floating point parameters and buffers to <code class="docutils literal notranslate"><span class="pre">half</span></code> datatype.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load</span></code>(state_file)</p></td>
-<td><p>Load a model state.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_state_dict</span></code>(state_dict[, strict])</p></td>
-<td><p>Copies parameters and buffers from <code class="xref py py-attr docutils literal notranslate"><span class="pre">state_dict</span></code> into this module and its descendants.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">modules</span></code>()</p></td>
-<td><p>Returns an iterator over all modules in the network.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_buffers</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_children</span></code>()</p></td>
-<td><p>Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_modules</span></code>([memo, prefix])</p></td>
-<td><p>Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">named_parameters</span></code>([prefix, recurse])</p></td>
-<td><p>Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">parameters</span></code>([recurse])</p></td>
-<td><p>Returns an iterator over module parameters.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_backward_hook</span></code>(hook)</p></td>
-<td><p>Registers a backward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_buffer</span></code>(name, tensor[, persistent])</p></td>
-<td><p>Adds a buffer to the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward hook on the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_forward_pre_hook</span></code>(hook)</p></td>
-<td><p>Registers a forward pre-hook on the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_parameter</span></code>(name, param)</p></td>
-<td><p>Adds a parameter to the module.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">requires_grad_</span></code>([requires_grad])</p></td>
-<td><p>Change if autograd should record operations on parameters in this module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">save</span></code>(state_file, optimizer[, bands])</p></td>
-<td><p>Save the model state.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">state_dict</span></code>([destination, prefix, keep_vars])</p></td>
-<td><p>Returns a dictionary containing a whole state of the module.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">to</span></code>(*args, **kwargs)</p></td>
-<td><p>Moves and/or casts the parameters and buffers.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">train</span></code>([mode])</p></td>
-<td><p>Sets the module in training mode.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">type</span></code>(dst_type)</p></td>
-<td><p>Casts all parameters and buffers to <code class="xref py py-attr docutils literal notranslate"><span class="pre">dst_type</span></code>.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">unfreeze</span></code>()</p></td>
-<td><p>Unfreeze the weights of a model.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">zero_grad</span></code>()</p></td>
-<td><p>Sets gradients of all model parameters to zero.</p></td>
-</tr>
-</tbody>
-</table>
-<table class="docutils align-default">
-<colgroup>
-<col style="width: 62%" />
-<col style="width: 38%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><strong>__call__</strong></p></td>
-<td></td>
-</tr>
-<tr class="row-even"><td><p><strong>share_memory</strong></p></td>
-<td></td>
-</tr>
-</tbody>
-</table>
 <dl class="py method">
 <dt id="pysegcnn.core.models.UNet.__init__">
 <code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">in_channels</span></em>, <em class="sig-param"><span class="n">nclasses</span></em>, <em class="sig-param"><span class="n">filters</span></em>, <em class="sig-param"><span class="n">skip</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/pysegcnn/core/models.html#UNet.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pysegcnn.core.models.UNet.__init__" title="Permalink to this definition">¶</a></dt>
-<dd><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p>
+<dd><p>Initialize.</p>
+<dl class="field-list">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><dl>
+<dt><strong>in_channels</strong><span class="classifier"><cite>int</cite></span></dt><dd><p>Number of channels of the input images.</p>
+</dd>
+<dt><strong>nclasses</strong><span class="classifier"><cite>int</cite></span></dt><dd><p>Number of classes.</p>
+</dd>
+<dt><strong>filters</strong><span class="classifier"><cite>list</cite> [<cite>int</cite>]</span></dt><dd><p>List of input channels to each convolutional block.</p>
+</dd>
+<dt><strong>skip</strong><span class="classifier"><cite>bool</cite></span></dt><dd><p>Whether to apply skip connections from the encoder to the decoder.</p>
+</dd>
+<dt><strong>**kwargs: `dict` [`str`]</strong></dt><dd><p>Additional keyword arguments passed to
+<a class="reference internal" href="pysegcnn.core.layers.Conv2dSame.html#pysegcnn.core.layers.Conv2dSame" title="pysegcnn.core.layers.Conv2dSame"><code class="xref py py-class docutils literal notranslate"><span class="pre">pysegcnn.core.layers.Conv2dSame</span></code></a>.</p>
+</dd>
+</dl>
+</dd>
+</dl>
 </dd></dl>
 
 <p class="rubric">Methods</p>
@@ -328,7 +234,7 @@
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="#pysegcnn.core.models.UNet.__init__" title="pysegcnn.core.models.UNet.__init__"><code class="xref py py-obj docutils literal notranslate"><span class="pre">__init__</span></code></a>(in_channels, nclasses, filters, …)</p></td>
-<td><p>Initializes internal Module state, shared by both nn.Module and ScriptModule.</p></td>
+<td><p>Initialize.</p></td>
 </tr>
 <tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">add_module</span></code>(name, module)</p></td>
 <td><p>Adds a child module to the current module.</p></td>
@@ -468,6 +374,13 @@
           </div>
           <footer>
   
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+      
+        <a href="pysegcnn.core.models.Network.html" class="btn btn-neutral float-left" title="pysegcnn.core.models.Network" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
 
   <hr/>
 
diff --git a/docs/_build/html/source/generated/pysegcnn.core.models.html b/docs/_build/html/source/generated/pysegcnn.core.models.html
deleted file mode 100644
index 0c44e06..0000000
--- a/docs/_build/html/source/generated/pysegcnn.core.models.html
+++ /dev/null
@@ -1,256 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>pysegcnn.core.models &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
-        <script src="../../_static/jquery.js"></script>
-        <script src="../../_static/underscore.js"></script>
-        <script src="../../_static/doctools.js"></script>
-        <script src="../../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../../genindex.html" />
-    <link rel="search" title="Search" href="../../search.html" />
-    <link rel="prev" title="pysegcnn.core.layers" href="pysegcnn.core.layers.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../../index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../requirements.html">Requirements</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
-<li class="toctree-l1 current"><a class="reference internal" href="../api.html">API Reference</a><ul class="current">
-<li class="toctree-l2 current"><a class="reference internal" href="../api.html#layers-and-models">Layers and Models</a><ul class="current">
-<li class="toctree-l3"><a class="reference internal" href="pysegcnn.core.layers.html">pysegcnn.core.layers</a></li>
-<li class="toctree-l3 current"><a class="current reference internal" href="#">pysegcnn.core.models</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#license">License</a></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../../index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-          <li><a href="../api.html">API Reference</a> &raquo;</li>
-        
-      <li>pysegcnn.core.models</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-            
-            <a href="../../_sources/source/generated/pysegcnn.core.models.rst.txt" rel="nofollow"> View page source</a>
-          
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <div class="section" id="module-pysegcnn.core.models">
-<span id="pysegcnn-core-models"></span><h1>pysegcnn.core.models<a class="headerlink" href="#module-pysegcnn.core.models" title="Permalink to this headline">¶</a></h1>
-<p>Neural networks for semantic image segmentation.</p>
-<div class="section" id="license">
-<h2>License<a class="headerlink" href="#license" title="Permalink to this headline">¶</a></h2>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-<p class="rubric">Classes</p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">Network</span></code>()</p></td>
-<td><p>Generic Network class.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">SupportedLossFunctions</span></code>(value)</p></td>
-<td><p>Names and corresponding classes of the tested loss functions.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">SupportedModels</span></code>(value)</p></td>
-<td><p>Names and corresponding classes of the implemented models.</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">SupportedOptimizers</span></code>(value)</p></td>
-<td><p>Names and corresponding classes of the tested optimizers.</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">UNet</span></code>(in_channels, nclasses, filters, skip, …)</p></td>
-<td><p>A PyTorch implementation of <a href="#id1"><span class="problematic" id="id2">`U-Net`_</span></a>.</p></td>
-</tr>
-</tbody>
-</table>
-</div>
-</div>
-
-
-           </div>
-           
-          </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-      
-        <a href="pysegcnn.core.layers.html" class="btn btn-neutral float-left" title="pysegcnn.core.layers" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
-    </div>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/source/install.html b/docs/_build/html/source/install.html
deleted file mode 100644
index 51ec939..0000000
--- a/docs/_build/html/source/install.html
+++ /dev/null
@@ -1,278 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>Installation &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-        <script src="../_static/jquery.js"></script>
-        <script src="../_static/underscore.js"></script>
-        <script src="../_static/doctools.js"></script>
-        <script src="../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../genindex.html" />
-    <link rel="search" title="Search" href="../search.html" />
-    <link rel="prev" title="PySegCNN: Image segmentation with convolutional neural networks in Python" href="../index.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul class="current">
-<li class="toctree-l1 current"><a class="current reference internal" href="#">Installation</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="#download">Download</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#conda">Conda</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#conda-environments">Conda environments</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#install-pytorch">Install PyTorch</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#install-pysegcnn">Install PySegCNN</a></li>
-</ul>
-</li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-      <li>Installation</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-            
-            <a href="../_sources/source/install.rst.txt" rel="nofollow"> View page source</a>
-          
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <div class="section" id="installation">
-<h1>Installation<a class="headerlink" href="#installation" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="download">
-<h2>Download<a class="headerlink" href="#download" title="Permalink to this headline">¶</a></h2>
-<p>You can download <code class="docutils literal notranslate"><span class="pre">pysegcnn</span></code> from this repository’s
-<a class="reference external" href="https://gitlab.inf.unibz.it/REMSEN/ccisnow/pysegcnn">website</a>
-or alternatively use <code class="docutils literal notranslate"><span class="pre">git</span></code> from terminal:</p>
-<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>git clone https://gitlab.inf.unibz.it/REMSEN/ccisnow/pysegcnn.git
-</pre></div>
-</div>
-<p>This creates a copy of the repository in your current directory on the file
-system.</p>
-</div>
-<div class="section" id="conda">
-<h2>Conda<a class="headerlink" href="#conda" title="Permalink to this headline">¶</a></h2>
-<p>To install <code class="docutils literal notranslate"><span class="pre">pysegcnn</span></code>, I recommend to use the <code class="docutils literal notranslate"><span class="pre">conda</span></code> package manager.
-You can download <code class="docutils literal notranslate"><span class="pre">conda</span></code> <a class="reference external" href="https://docs.conda.io/en/latest/miniconda.html">here</a>.
-Once successfully installed <code class="docutils literal notranslate"><span class="pre">conda</span></code>, I recommend to add <code class="docutils literal notranslate"><span class="pre">conda-forge</span></code> as
-your default channel:</p>
-<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>conda config --add channels conda-forge
-</pre></div>
-</div>
-</div>
-<div class="section" id="conda-environments">
-<h2>Conda environments<a class="headerlink" href="#conda-environments" title="Permalink to this headline">¶</a></h2>
-<p>To install <code class="docutils literal notranslate"><span class="pre">pysegcnn</span></code>, I recommend to create a specific <code class="docutils literal notranslate"><span class="pre">conda</span></code>
-<a class="reference external" href="https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html">environment</a>,
-by using the provided <code class="docutils literal notranslate"><span class="pre">environment.yml</span></code> file. In a terminal, navigate to the
-<strong>cloned git repositories root directory</strong> (<code class="docutils literal notranslate"><span class="pre">/pysegcnn</span></code>) and type:</p>
-<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>conda env create -f environment.yml
-</pre></div>
-</div>
-<p>This may take a while. The above command creates a conda environment with all
-required dependencies except the <code class="docutils literal notranslate"><span class="pre">pytorch</span></code> package. The first line in
-<code class="docutils literal notranslate"><span class="pre">environment.yml</span></code> defines the environment name, in this case <code class="docutils literal notranslate"><span class="pre">pysegcnn</span></code>.
-Activate your environment using:</p>
-<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>conda activate pysegcnn
-</pre></div>
-</div>
-</div>
-<div class="section" id="install-pytorch">
-<h2>Install PyTorch<a class="headerlink" href="#install-pytorch" title="Permalink to this headline">¶</a></h2>
-<p>The installation of <code class="docutils literal notranslate"><span class="pre">pytorch</span></code> is heavily dependent on the hardware of your
-machine. Therefore, after activating your environment, install the version of
-<a class="reference external" href="https://pytorch.org/">PyTorch</a> that your system supports by following the
-official <a class="reference external" href="https://pytorch.org/get-started/locally/">instructions</a>.</p>
-<p>If you have to build <code class="docutils literal notranslate"><span class="pre">pytorch</span></code> from source, follow this
-<a class="reference external" href="https://github.com/pytorch/pytorch#from-source">guide</a>.</p>
-<p><a class="reference external" href="https://pytorch.org/get-started/locally/#linux-verification">Here</a> is how to
-check if <code class="docutils literal notranslate"><span class="pre">pytorch</span></code> is installed correctly.</p>
-</div>
-<div class="section" id="install-pysegcnn">
-<h2>Install PySegCNN<a class="headerlink" href="#install-pysegcnn" title="Permalink to this headline">¶</a></h2>
-<p>To finally install <code class="docutils literal notranslate"><span class="pre">pysegcnn</span></code> run the below command <strong>from this repositories
-root directory within the activated ``pysegcnn`` conda environment</strong>:</p>
-<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>pip install -e .
-</pre></div>
-</div>
-<p>If successful, you should be able to import <code class="docutils literal notranslate"><span class="pre">pysegcnn</span></code> from any Python
-interpreter using:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">pysegcnn</span>
-</pre></div>
-</div>
-</div>
-</div>
-
-
-           </div>
-           
-          </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-      
-        <a href="../index.html" class="btn btn-neutral float-left" title="PySegCNN: Image segmentation with convolutional neural networks in Python" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
-    </div>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/source/installation.html b/docs/_build/html/source/installation.html
index 5fb964c..422e882 100644
--- a/docs/_build/html/source/installation.html
+++ b/docs/_build/html/source/installation.html
@@ -36,6 +36,7 @@
     
     <link rel="index" title="Index" href="../genindex.html" />
     <link rel="search" title="Search" href="../search.html" />
+    <link rel="next" title="API Reference" href="api.html" />
     <link rel="prev" title="Requirements" href="requirements.html" /> 
 </head>
 
@@ -91,6 +92,7 @@
 <li class="toctree-l2"><a class="reference internal" href="#install-pysegcnn">Install PySegCNN</a></li>
 </ul>
 </li>
+<li class="toctree-l1"><a class="reference internal" href="api.html">API Reference</a></li>
 </ul>
 
             
@@ -230,6 +232,8 @@ interpreter using:</p>
   
     <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
       
+        <a href="api.html" class="btn btn-neutral float-right" title="API Reference" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
       
         <a href="requirements.html" class="btn btn-neutral float-left" title="Requirements" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
       
diff --git a/docs/_build/html/source/main.html b/docs/_build/html/source/main.html
deleted file mode 100644
index d25c64c..0000000
--- a/docs/_build/html/source/main.html
+++ /dev/null
@@ -1,300 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>main package &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-        <script src="../_static/jquery.js"></script>
-        <script src="../_static/underscore.js"></script>
-        <script src="../_static/doctools.js"></script>
-        <script src="../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../genindex.html" />
-    <link rel="search" title="Search" href="../search.html" />
-    <link rel="next" title="preprocessing package" href="preprocessing.html" />
-    <link rel="prev" title="core package" href="core.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul class="current">
-<li class="toctree-l1 current"><a class="reference internal" href="modules.html">pysegcnn</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="core.html">core package</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">main package</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="#submodules">Submodules</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#module-main.config">main.config module</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#license">License</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="#module-main.eval">main.eval module</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#id1">License</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="#module-main.train">main.train module</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#id2">License</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="#module-main">Module contents</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="preprocessing.html">preprocessing package</a></li>
-</ul>
-</li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-          <li><a href="modules.html">pysegcnn</a> &raquo;</li>
-        
-      <li>main package</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-            
-            <a href="../_sources/source/main.rst.txt" rel="nofollow"> View page source</a>
-          
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <div class="section" id="main-package">
-<h1>main package<a class="headerlink" href="#main-package" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="submodules">
-<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
-</div>
-<div class="section" id="module-main.config">
-<span id="main-config-module"></span><h2>main.config module<a class="headerlink" href="#module-main.config" title="Permalink to this headline">¶</a></h2>
-<p>The configuration file to train and evaluate a model.</p>
-<p>The configuration is handled by the configuration dictionaries.</p>
-<p>Modify the values to your needs, but DO NOT modify the keys.</p>
-<div class="section" id="license">
-<h3>License<a class="headerlink" href="#license" title="Permalink to this headline">¶</a></h3>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-</div>
-</div>
-<div class="section" id="module-main.eval">
-<span id="main-eval-module"></span><h2>main.eval module<a class="headerlink" href="#module-main.eval" title="Permalink to this headline">¶</a></h2>
-<p>Main script to evaluate a model.</p>
-<p>Steps to run a model evaluation:</p>
-<blockquote>
-<div><ol class="arabic simple">
-<li><p>Configure the dictionary ‘eval_config’ in pysegcnn/main/config.py</p></li>
-<li><p>Save pysegcnn/main/config.py</p></li>
-<li><p>In a terminal, navigate to the repository’s root directory</p></li>
-<li><p>run “python pysegcnn/main/eval.py”</p></li>
-</ol>
-</div></blockquote>
-<div class="section" id="id1">
-<h3>License<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h3>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-</div>
-</div>
-<div class="section" id="module-main.train">
-<span id="main-train-module"></span><h2>main.train module<a class="headerlink" href="#module-main.train" title="Permalink to this headline">¶</a></h2>
-<p>Main script to train a model.</p>
-<p>Steps to launch a model run:</p>
-<blockquote>
-<div><ol class="arabic simple">
-<li><p>Configure the model run in pysegcnn/main/config.py
-(i) configure the dataset      : dictionary ‘dataset_config’
-(j) configure the dataset split: dictionary ‘split_config’
-(k) configure the model        : dictionary ‘model_config’</p></li>
-<li><p>Save pysegcnn/main/config.py</p></li>
-<li><p>In a terminal, navigate to the repository’s root directory</p></li>
-<li><p>run “python pysegcnn/main/train.py”</p></li>
-</ol>
-</div></blockquote>
-<div class="section" id="id2">
-<h3>License<a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h3>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-</div>
-</div>
-<div class="section" id="module-main">
-<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-main" title="Permalink to this headline">¶</a></h2>
-</div>
-</div>
-
-
-           </div>
-           
-          </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="preprocessing.html" class="btn btn-neutral float-right" title="preprocessing package" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="core.html" class="btn btn-neutral float-left" title="core package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
-    </div>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/source/modules.html b/docs/_build/html/source/modules.html
deleted file mode 100644
index abe9a8d..0000000
--- a/docs/_build/html/source/modules.html
+++ /dev/null
@@ -1,300 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>pysegcnn &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-        <script src="../_static/jquery.js"></script>
-        <script src="../_static/underscore.js"></script>
-        <script src="../_static/doctools.js"></script>
-        <script src="../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../genindex.html" />
-    <link rel="search" title="Search" href="../search.html" />
-    <link rel="next" title="core package" href="core.html" />
-    <link rel="prev" title="&lt;no title&gt;" href="../index.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul class="current">
-<li class="toctree-l1 current"><a class="current reference internal" href="#">pysegcnn</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="core.html">core package</a></li>
-<li class="toctree-l2"><a class="reference internal" href="main.html">main package</a></li>
-<li class="toctree-l2"><a class="reference internal" href="preprocessing.html">preprocessing package</a></li>
-</ul>
-</li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-      <li>pysegcnn</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-            
-            <a href="../_sources/source/modules.rst.txt" rel="nofollow"> View page source</a>
-          
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <div class="section" id="pysegcnn">
-<h1>pysegcnn<a class="headerlink" href="#pysegcnn" title="Permalink to this headline">¶</a></h1>
-<div class="toctree-wrapper compound">
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="core.html">core package</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="core.html#submodules">Submodules</a></li>
-<li class="toctree-l2"><a class="reference internal" href="core.html#module-core.cli">core.cli module</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="core.html#license">License</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="core.html#module-core.constants">core.constants module</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="core.html#id1">License</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="core.html#module-core.dataset">core.dataset module</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="core.html#id2">License</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="core.html#module-core.graphics">core.graphics module</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="core.html#id4">License</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="core.html#module-core.layers">core.layers module</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="core.html#id5">License</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="core.html#module-core.logging">core.logging module</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="core.html#id6">License</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="core.html#module-core.models">core.models module</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="core.html#id7">License</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="core.html#module-core.predict">core.predict module</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="core.html#id8">License</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="core.html#module-core.split">core.split module</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="core.html#id9">License</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="core.html#module-core.trainer">core.trainer module</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="core.html#id10">License</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="core.html#module-core.transforms">core.transforms module</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="core.html#id11">License</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="core.html#module-core.utils">core.utils module</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="core.html#id12">License</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="core.html#module-core">Module contents</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="main.html">main package</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="main.html#submodules">Submodules</a></li>
-<li class="toctree-l2"><a class="reference internal" href="main.html#module-main.config">main.config module</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="main.html#license">License</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="main.html#module-main.eval">main.eval module</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="main.html#id1">License</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="main.html#module-main.train">main.train module</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="main.html#id2">License</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="main.html#module-main">Module contents</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="preprocessing.html">preprocessing package</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="preprocessing.html#submodules">Submodules</a></li>
-<li class="toctree-l2"><a class="reference internal" href="preprocessing.html#module-preprocessing.sparcs">preprocessing.sparcs module</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="preprocessing.html#license">License</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="preprocessing.html#module-preprocessing">Module contents</a></li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-
-
-           </div>
-           
-          </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-        <a href="core.html" class="btn btn-neutral float-right" title="core package" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
-      
-      
-        <a href="../index.html" class="btn btn-neutral float-left" title="&lt;no title&gt;" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
-    </div>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/source/preprocessing.html b/docs/_build/html/source/preprocessing.html
deleted file mode 100644
index 9621025..0000000
--- a/docs/_build/html/source/preprocessing.html
+++ /dev/null
@@ -1,247 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>preprocessing package &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-        <script src="../_static/jquery.js"></script>
-        <script src="../_static/underscore.js"></script>
-        <script src="../_static/doctools.js"></script>
-        <script src="../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../genindex.html" />
-    <link rel="search" title="Search" href="../search.html" />
-    <link rel="prev" title="main package" href="main.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul class="current">
-<li class="toctree-l1 current"><a class="reference internal" href="modules.html">pysegcnn</a><ul class="current">
-<li class="toctree-l2"><a class="reference internal" href="core.html">core package</a></li>
-<li class="toctree-l2"><a class="reference internal" href="main.html">main package</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">preprocessing package</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="#submodules">Submodules</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#module-preprocessing.sparcs">preprocessing.sparcs module</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#license">License</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="#module-preprocessing">Module contents</a></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-          <li><a href="modules.html">pysegcnn</a> &raquo;</li>
-        
-      <li>preprocessing package</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-            
-            <a href="../_sources/source/preprocessing.rst.txt" rel="nofollow"> View page source</a>
-          
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <div class="section" id="preprocessing-package">
-<h1>preprocessing package<a class="headerlink" href="#preprocessing-package" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="submodules">
-<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
-</div>
-<div class="section" id="module-preprocessing.sparcs">
-<span id="preprocessing-sparcs-module"></span><h2>preprocessing.sparcs module<a class="headerlink" href="#module-preprocessing.sparcs" title="Permalink to this headline">¶</a></h2>
-<p>Command line script to preprocess the Sparcs dataset.</p>
-<p>After downloading the Sparcs dataset, from the repository’s root directory run:</p>
-<blockquote>
-<div><p>python pysegcnn/preprocessing/sparcs.py</p>
-</div></blockquote>
-<p>The above command will print the usage of the script.</p>
-<div class="section" id="license">
-<h3>License<a class="headerlink" href="#license" title="Permalink to this headline">¶</a></h3>
-<blockquote>
-<div><p>Copyright (c) 2020 Daniel Frisinghelli</p>
-<p>This source code is licensed under the GNU General Public License v3.</p>
-<p>See the LICENSE file in the repository’s root directory.</p>
-</div></blockquote>
-</div>
-</div>
-<div class="section" id="module-preprocessing">
-<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-preprocessing" title="Permalink to this headline">¶</a></h2>
-</div>
-</div>
-
-
-           </div>
-           
-          </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-      
-        <a href="main.html" class="btn btn-neutral float-left" title="main package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
-    </div>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/source/readme.html b/docs/_build/html/source/readme.html
deleted file mode 100644
index 32d5d7f..0000000
--- a/docs/_build/html/source/readme.html
+++ /dev/null
@@ -1,210 +0,0 @@
-
-
-<!DOCTYPE html>
-<html class="writer-html5" lang="en" >
-<head>
-  <meta charset="utf-8">
-  
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  
-  <title>README &mdash; PySegCNN  documentation</title>
-  
-
-  
-  <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
-  <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-
-  
-  
-  
-  
-
-  
-  <!--[if lt IE 9]>
-    <script src="../_static/js/html5shiv.min.js"></script>
-  <![endif]-->
-  
-    
-      <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-        <script src="../_static/jquery.js"></script>
-        <script src="../_static/underscore.js"></script>
-        <script src="../_static/doctools.js"></script>
-        <script src="../_static/language_data.js"></script>
-    
-    <script type="text/javascript" src="../_static/js/theme.js"></script>
-
-    
-    <link rel="index" title="Index" href="../genindex.html" />
-    <link rel="search" title="Search" href="../search.html" />
-    <link rel="prev" title="preprocessing package" href="preprocessing.html" /> 
-</head>
-
-<body class="wy-body-for-nav">
-
-   
-  <div class="wy-grid-for-nav">
-    
-    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
-      <div class="wy-side-scroll">
-        <div class="wy-side-nav-search" >
-          
-
-          
-            <a href="../index.html" class="icon icon-home" alt="Documentation Home"> PySegCNN
-          
-
-          
-          </a>
-
-          
-            
-            
-          
-
-          
-<div role="search">
-  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
-    <input type="text" name="q" placeholder="Search docs" />
-    <input type="hidden" name="check_keywords" value="yes" />
-    <input type="hidden" name="area" value="default" />
-  </form>
-</div>
-
-          
-        </div>
-
-        
-        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
-          
-            
-            
-              
-            
-            
-              <ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="modules.html">pysegcnn</a></li>
-<li class="toctree-l1 current"><a class="current reference internal" href="#">README</a></li>
-</ul>
-
-            
-          
-        </div>
-        
-      </div>
-    </nav>
-
-    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
-      
-      <nav class="wy-nav-top" aria-label="top navigation">
-        
-          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
-          <a href="../index.html">PySegCNN</a>
-        
-      </nav>
-
-
-      <div class="wy-nav-content">
-        
-        <div class="rst-content">
-        
-          
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<div role="navigation" aria-label="breadcrumbs navigation">
-
-  <ul class="wy-breadcrumbs">
-    
-      <li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
-        
-      <li>README</li>
-    
-    
-      <li class="wy-breadcrumbs-aside">
-        
-            
-            <a href="../_sources/source/readme.rst.txt" rel="nofollow"> View page source</a>
-          
-        
-      </li>
-    
-  </ul>
-
-  
-  <hr/>
-</div>
-          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
-           <div itemprop="articleBody">
-            
-  <div class="section" id="readme">
-<h1>README<a class="headerlink" href="#readme" title="Permalink to this headline">¶</a></h1>
-</div>
-
-
-           </div>
-           
-          </div>
-          <footer>
-  
-    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-      
-      
-        <a href="preprocessing.html" class="btn btn-neutral float-left" title="preprocessing package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
-      
-    </div>
-  
-
-  <hr/>
-
-  <div role="contentinfo">
-    <p>
-        
-        &copy; Copyright 2020, Daniel Frisinghelli
-
-    </p>
-  </div>
-    
-    
-    
-    Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a
-    
-    <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a>
-    
-    provided by <a href="https://readthedocs.org">Read the Docs</a>. 
-
-</footer>
-
-        </div>
-      </div>
-
-    </section>
-
-  </div>
-  
-
-  <script type="text/javascript">
-      jQuery(function () {
-          SphinxRtdTheme.Navigation.enable(true);
-      });
-  </script>
-
-  
-  
-    
-   
-
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/source/requirements.html b/docs/_build/html/source/requirements.html
index 6360808..aaceee5 100644
--- a/docs/_build/html/source/requirements.html
+++ b/docs/_build/html/source/requirements.html
@@ -92,6 +92,7 @@
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
+<li class="toctree-l1"><a class="reference internal" href="api.html">API Reference</a></li>
 </ul>
 
             
diff --git a/docs/conf.py b/docs/conf.py
index 40c453e..c3ffaec 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -32,15 +32,17 @@ author = 'Daniel Frisinghelli'
 # ones.
 extensions = [
     'sphinx.ext.autodoc',
+    'sphinx.ext.autosummary',
     'sphinx.ext.viewcode',
-    'sphinx.ext.napoleon',
-    'recommonmark',
-    'numpydoc'
+    'numpydoc',
 ]
 
-# napoleon options
-napoleon_google_docstring = False
+# numpydoc options
+numpydoc_show_class_members = False
+numpydoc_show_inherited_class_members = False
 
+# autosummary options
+autosummary_generate = True
 
 # Add any paths that contain templates here, relative to this directory.
 templates_path = ['_templates']
diff --git a/docs/source/api.rst b/docs/source/api.rst
index 4de52de..6d2aabc 100644
--- a/docs/source/api.rst
+++ b/docs/source/api.rst
@@ -13,9 +13,9 @@ Dataset
 
 Custom dataset classes compliant to the PyTorch `standard <https://pytorch.org/docs/stable/data.html>`_.
 
-Image Dataset
-^^^^^^^^^^^^^
-Generic class to implement `custom datasets <https://pytorch.org/tutorials/beginner/data_loading_tutorial.html>`_.
+Generic classes
+^^^^^^^^^^^^^^^
+Generic class to implement a `custom dataset <https://pytorch.org/tutorials/beginner/data_loading_tutorial.html>`_.
 
 .. autosummary::
     :toctree: generated/
@@ -23,11 +23,21 @@ Generic class to implement `custom datasets <https://pytorch.org/tutorials/begin
 
     core.dataset.ImageDataset
 
-Supported datasets
-^^^^^^^^^^^^^^^^^^
+Generic class to implement a custom dataset following a standard directory
+structure.
+
+.. autosummary::
+    :toctree: generated/
+    :nosignatures:
+
+    core.dataset.StandardEoDataset
+
 
-The following open-source spaceborne multispectral image datasets are supported
-out-of-the-box:
+Specific classes
+^^^^^^^^^^^^^^^^
+
+Specific classes for some open-source image datasets. Currently, the following
+spaceborne multispectral image datasets are supported out-of-the-box:
 
 .. autosummary::
     :toctree: generated/
@@ -36,7 +46,6 @@ out-of-the-box:
     core.dataset.SparcsDataset
     core.dataset.Cloud95Dataset
 
-
 Models
 ------
 
@@ -81,6 +90,9 @@ Neural Networks
     core.models.UNet
 
 
+..
+    Links:
+
 .. _Sparcs:
     https://www.usgs.gov/land-resources/nli/landsat/spatial-procedures-automated-removal-cloud-and-shadow-sparcs-validation
 
@@ -92,3 +104,12 @@ Neural Networks
 
 .. _U-Net:
     https://arxiv.org/abs/1505.04597
+
+.. _Landsat-8:
+    https://www.usgs.gov/land-resources/nli/landsat/landsat-8?qt-science_support_page_related_con=0#qt-science_support_page_related_con
+
+.. _Sentinel-2:
+    https://sentinel.esa.int/web/sentinel/missions/sentinel-2
+
+.. _Hughes & Hayes (2014):
+    https://www.mdpi.com/2072-4292/6/6/4907
diff --git a/docs/source/generated/pysegcnn.core.dataset.Cloud95Dataset.rst b/docs/source/generated/pysegcnn.core.dataset.Cloud95Dataset.rst
index 0b86506..a181065 100644
--- a/docs/source/generated/pysegcnn.core.dataset.Cloud95Dataset.rst
+++ b/docs/source/generated/pysegcnn.core.dataset.Cloud95Dataset.rst
@@ -1,4 +1,4 @@
-pysegcnn.core.dataset.Cloud95Dataset
+pysegcnn.core.dataset.Cloud95Dataset
 ====================================
 
 .. currentmodule:: pysegcnn.core.dataset
diff --git a/docs/source/generated/pysegcnn.core.dataset.ImageDataset.rst b/docs/source/generated/pysegcnn.core.dataset.ImageDataset.rst
index c04ed1f..31c36ff 100644
--- a/docs/source/generated/pysegcnn.core.dataset.ImageDataset.rst
+++ b/docs/source/generated/pysegcnn.core.dataset.ImageDataset.rst
@@ -1,4 +1,4 @@
-pysegcnn.core.dataset.ImageDataset
+pysegcnn.core.dataset.ImageDataset
 ==================================
 
 .. currentmodule:: pysegcnn.core.dataset
diff --git a/docs/source/generated/pysegcnn.core.dataset.SparcsDataset.rst b/docs/source/generated/pysegcnn.core.dataset.SparcsDataset.rst
index d5c9fe4..cb357b5 100644
--- a/docs/source/generated/pysegcnn.core.dataset.SparcsDataset.rst
+++ b/docs/source/generated/pysegcnn.core.dataset.SparcsDataset.rst
@@ -1,4 +1,4 @@
-pysegcnn.core.dataset.SparcsDataset
+pysegcnn.core.dataset.SparcsDataset
 ===================================
 
 .. currentmodule:: pysegcnn.core.dataset
diff --git a/docs/source/generated/pysegcnn.core.layers.Block.rst b/docs/source/generated/pysegcnn.core.layers.Block.rst
index 3e960b4..3187534 100644
--- a/docs/source/generated/pysegcnn.core.layers.Block.rst
+++ b/docs/source/generated/pysegcnn.core.layers.Block.rst
@@ -1,4 +1,4 @@
-pysegcnn.core.layers.Block
+pysegcnn.core.layers.Block
 ==========================
 
 .. currentmodule:: pysegcnn.core.layers
diff --git a/docs/source/generated/pysegcnn.core.layers.Conv2dSame.rst b/docs/source/generated/pysegcnn.core.layers.Conv2dSame.rst
index 7c81180..42b472e 100644
--- a/docs/source/generated/pysegcnn.core.layers.Conv2dSame.rst
+++ b/docs/source/generated/pysegcnn.core.layers.Conv2dSame.rst
@@ -1,4 +1,4 @@
-pysegcnn.core.layers.Conv2dSame
+pysegcnn.core.layers.Conv2dSame
 ===============================
 
 .. currentmodule:: pysegcnn.core.layers
diff --git a/docs/source/generated/pysegcnn.core.layers.ConvBnReluMaxPool.rst b/docs/source/generated/pysegcnn.core.layers.ConvBnReluMaxPool.rst
index 7a99902..6260fe5 100644
--- a/docs/source/generated/pysegcnn.core.layers.ConvBnReluMaxPool.rst
+++ b/docs/source/generated/pysegcnn.core.layers.ConvBnReluMaxPool.rst
@@ -1,4 +1,4 @@
-pysegcnn.core.layers.ConvBnReluMaxPool
+pysegcnn.core.layers.ConvBnReluMaxPool
 ======================================
 
 .. currentmodule:: pysegcnn.core.layers
diff --git a/docs/source/generated/pysegcnn.core.layers.ConvBnReluMaxUnpool.rst b/docs/source/generated/pysegcnn.core.layers.ConvBnReluMaxUnpool.rst
index c83252a..386abc1 100644
--- a/docs/source/generated/pysegcnn.core.layers.ConvBnReluMaxUnpool.rst
+++ b/docs/source/generated/pysegcnn.core.layers.ConvBnReluMaxUnpool.rst
@@ -1,4 +1,4 @@
-pysegcnn.core.layers.ConvBnReluMaxUnpool
+pysegcnn.core.layers.ConvBnReluMaxUnpool
 ========================================
 
 .. currentmodule:: pysegcnn.core.layers
diff --git a/docs/source/generated/pysegcnn.core.layers.ConvBnReluUpsample.rst b/docs/source/generated/pysegcnn.core.layers.ConvBnReluUpsample.rst
index bac34ee..6d4f3e6 100644
--- a/docs/source/generated/pysegcnn.core.layers.ConvBnReluUpsample.rst
+++ b/docs/source/generated/pysegcnn.core.layers.ConvBnReluUpsample.rst
@@ -1,4 +1,4 @@
-pysegcnn.core.layers.ConvBnReluUpsample
+pysegcnn.core.layers.ConvBnReluUpsample
 =======================================
 
 .. currentmodule:: pysegcnn.core.layers
diff --git a/docs/source/generated/pysegcnn.core.layers.Decoder.rst b/docs/source/generated/pysegcnn.core.layers.Decoder.rst
index 9ca6527..a5fcf7f 100644
--- a/docs/source/generated/pysegcnn.core.layers.Decoder.rst
+++ b/docs/source/generated/pysegcnn.core.layers.Decoder.rst
@@ -1,4 +1,4 @@
-pysegcnn.core.layers.Decoder
+pysegcnn.core.layers.Decoder
 ============================
 
 .. currentmodule:: pysegcnn.core.layers
diff --git a/docs/source/generated/pysegcnn.core.layers.DecoderBlock.rst b/docs/source/generated/pysegcnn.core.layers.DecoderBlock.rst
index 3acc653..d6a87bc 100644
--- a/docs/source/generated/pysegcnn.core.layers.DecoderBlock.rst
+++ b/docs/source/generated/pysegcnn.core.layers.DecoderBlock.rst
@@ -1,4 +1,4 @@
-pysegcnn.core.layers.DecoderBlock
+pysegcnn.core.layers.DecoderBlock
 =================================
 
 .. currentmodule:: pysegcnn.core.layers
diff --git a/docs/source/generated/pysegcnn.core.layers.Encoder.rst b/docs/source/generated/pysegcnn.core.layers.Encoder.rst
index 09aa71c..fcd00c6 100644
--- a/docs/source/generated/pysegcnn.core.layers.Encoder.rst
+++ b/docs/source/generated/pysegcnn.core.layers.Encoder.rst
@@ -1,4 +1,4 @@
-pysegcnn.core.layers.Encoder
+pysegcnn.core.layers.Encoder
 ============================
 
 .. currentmodule:: pysegcnn.core.layers
diff --git a/docs/source/generated/pysegcnn.core.layers.EncoderBlock.rst b/docs/source/generated/pysegcnn.core.layers.EncoderBlock.rst
index 37385b2..454ce41 100644
--- a/docs/source/generated/pysegcnn.core.layers.EncoderBlock.rst
+++ b/docs/source/generated/pysegcnn.core.layers.EncoderBlock.rst
@@ -1,4 +1,4 @@
-pysegcnn.core.layers.EncoderBlock
+pysegcnn.core.layers.EncoderBlock
 =================================
 
 .. currentmodule:: pysegcnn.core.layers
diff --git a/docs/source/generated/pysegcnn.core.models.Network.rst b/docs/source/generated/pysegcnn.core.models.Network.rst
index a5b21f0..99819a3 100644
--- a/docs/source/generated/pysegcnn.core.models.Network.rst
+++ b/docs/source/generated/pysegcnn.core.models.Network.rst
@@ -1,4 +1,4 @@
-pysegcnn.core.models.Network
+pysegcnn.core.models.Network
 ============================
 
 .. currentmodule:: pysegcnn.core.models
diff --git a/docs/source/generated/pysegcnn.core.models.UNet.rst b/docs/source/generated/pysegcnn.core.models.UNet.rst
index 933d3fc..92cb118 100644
--- a/docs/source/generated/pysegcnn.core.models.UNet.rst
+++ b/docs/source/generated/pysegcnn.core.models.UNet.rst
@@ -1,4 +1,4 @@
-pysegcnn.core.models.UNet
+pysegcnn.core.models.UNet
 =========================
 
 .. currentmodule:: pysegcnn.core.models
-- 
GitLab