diff --git a/.gitignore b/.gitignore
index 0e77146..7280af7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
*.aux
*.log
+*.gz
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..12f37ed
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..dfea426
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/plotneuralnet.iml b/.idea/plotneuralnet.iml
new file mode 100644
index 0000000..6f63a63
--- /dev/null
+++ b/.idea/plotneuralnet.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..9510dde
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1536764917516
+
+
+ 1536764917516
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/DeconvolutionNet/deconvnet.pdf b/examples/DeconvolutionNet/deconvnet.pdf
new file mode 100644
index 0000000..11589f6
Binary files /dev/null and b/examples/DeconvolutionNet/deconvnet.pdf differ
diff --git a/examples/DeconvolutionNet/deconvnet.tex b/examples/DeconvolutionNet/deconvnet.tex
new file mode 100644
index 0000000..e78e8a6
--- /dev/null
+++ b/examples/DeconvolutionNet/deconvnet.tex
@@ -0,0 +1,127 @@
+\documentclass[border=15pt, multi, tikz]{standalone}
+%\usepackage{blocks}
+\usepackage{import}
+\subimport{../../layers/}{init}
+\usetikzlibrary{positioning}
+
+\newcommand{\copymidarrow}{\tikz \draw[-Stealth,line width =0.8mm,draw={rgb:blue,4;red,1;green,1;black,3}] (-0.3,0) -- ++(0.3,0);}
+\begin{document}
+\begin{tikzpicture}
+\tikzstyle{connection}=[ultra thick,every node/.style={sloped,allow upside down},draw=\edgecolor,opacity=0.7]
+\tikzstyle{copyconnection}=[ultra thick,every node/.style={sloped,allow upside down},draw={rgb:blue,4;red,1;green,1;black,3},opacity=0.7]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Draw Encoder
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% conv1_1,conv1_2,pool1
+\pic[shift={(0,0,0)}] at (0,0,0) {ConvReluPool={blockname=crp1,%
+ numFilters={{"64","64","32"}},height=40,width={2,2},depth=40,zlabel=I}};
+% conv2_1,conv2_2,pool2
+\pic[shift={(1.6,0,0)}] at (crp1-east) {ConvReluPool={blockname=crp2,%
+ numFilters={{"128","128"}},height=35,width={2.5,2.5},depth=35,zlabel=I/2}};
+%% conv3_1,conv3_2,conv3_3,pool3
+\pic[shift={(1.2,0,0)}] at (crp2-east) {ConvReluPool={blockname=crp3,%
+ numFilters={{"256","256","256"}},height=30,width={3.3,3.3,3.3},depth=30,zlabel=I/4}};
+%% conv4_1,conv4_2,conv4_3,pool4
+\pic[shift={(1,0,0)}] at (crp3-east) {ConvReluPool={blockname=crp4,%
+ numFilters={{"512","512","512"}},height=23,width={4.5,4.5,4.5},depth=23,zlabel=I/8}};
+%% conv5_1,conv5_2,conv5_3
+\pic[shift={(1,0,0)}] at (crp4-east) {ConvReluPool={blockname=crp5,%
+ numFilters={{"512","512","512"}},height=12,width={4.5,4.5,4.5},depth=12,zlabel=I/16}};
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Draw Bottleneck
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% conv5_1,conv5_2,conv5_3
+\pic[shift={(1,0,0)}] at (crp5-east) {ConvRelu={blockname=cp,%
+ numFilters={{"4096","4096"}},height=5,width={7,7},depth=5,zlabel=I/8}};
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Draw Dencoder
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% conv5_1r,conv5_2r,conv5_3r
+\pic[shift={(2,0,0)}] at (cp-east) {UpConvRelu={blockname=ucp5r,%
+ numFilters={{"512","512","512"}},height=12,width={4.5,4.5,4.5},depth=12,zlabel=I/16,%
+ fillcolor = {rgb:blue,5;green,2.5;white,5},upcolor={rgb:blue,15}}};
+%% up32
+\pic[shift={(1.5,0,0)}] at (ucp5r-east) {UpConvRelu={blockname=ucp4r,%
+ numFilters={{"512","512","512"}},height=23,width={4.5,4.5,4.5},depth=23,zlabel=,%
+ fillcolor = {rgb:blue,5;green,2.5;white,5},upcolor={rgb:blue,15}}};
+
+%% up16
+\pic[shift={(2,0,0)}] at (ucp4r-east) {UpConvRelu={blockname=ucp3r,%
+ numFilters={{"256","256","256"}},height=30,width={3.3,3.3,3.3},depth=30,zlabel=,%
+ fillcolor = {rgb:blue,5;green,2.5;white,5},upcolor={rgb:blue,15}}};
+
+%% up8
+\pic[shift={(2,0,0)}] at (ucp3r-east) {UpConvRelu={blockname=ucp2r,%
+ numFilters={{"128","128"}},height=35,width={2.5,2.5},depth=35,zlabel=,%
+ fillcolor = {rgb:blue,5;green,2.5;white,5},upcolor={rgb:blue,15}}};
+
+
+%% up4
+\pic[shift={(2,0,0)}] at (ucp2r-east) {UpConvRelu={blockname=ucp1r,%
+ numFilters={{"64","64"}},height=40,width={2,2},depth=40,zlabel=,%
+ fillcolor = {rgb:blue,5;green,2.5;white,5},upcolor={rgb:blue,15}}};
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Draw score producer
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% score
+%\pic[shift={(2,0,0)}] at (ucp1r-east) {Conv={blockname=score,%
+% numFilters={{"21",""}},height=40,width={2},depth=40,zlabel=I}};
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Draw connections
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\draw [connection] (crp1-east) -- node {\midarrow} (crp2-west);
+\draw [connection] (crp2-east) -- node {\midarrow} (crp3-west);
+\draw [connection] (crp3-east) -- node {\midarrow} (crp4-west);
+\draw [connection] (crp4-east) -- node {\midarrow} (cp-west);
+\draw [connection] (cp-east) -- node {\midarrow} (ucp5r-west);
+\draw [connection] (ucp5r-east) -- node {\midarrow} (ucp4r-west);
+\draw [connection] (ucp4r-east) -- node {\midarrow} (ucp3r-west);
+\draw [connection] (ucp3r-east) -- node {\midarrow} (ucp2r-west);
+\draw [connection] (ucp2r-east) -- node {\midarrow} (ucp1r-west);
+%\draw [connection] (ucp1r-east) -- node {\midarrow} (score-west);
+
+\path (crp5-south-|crp5-east) -- (crp5-north-|crp5-east) coordinate[pos=1.25] (crp5-top) ;
+\path (crp4-south-|crp4-east) -- (crp4-north-|crp4-east) coordinate[pos=1.15] (crp4-top) ;
+\path (crp3-south-|crp3-east) -- (crp3-north-|crp3-east) coordinate[pos=1.15] (crp3-top) ;
+\path (crp2-south-|crp2-east) -- (crp2-north-|crp2-east) coordinate[pos=1.15] (crp2-top) ;
+\path (crp1-south-|crp1-east) -- (crp1-north-|crp1-east) coordinate[pos=1.15] (crp1-top) ;
+
+\path (ucp5r-upsouth) -- (ucp5r-upnorth) coordinate[pos=1.25] (ucp5r-top) ;
+\path (ucp4r-upsouth) -- (ucp4r-upnorth) coordinate[pos=1.15] (ucp4r-top) ;
+\path (ucp3r-upsouth) -- (ucp3r-upnorth) coordinate[pos=1.15] (ucp3r-top) ;
+\path (ucp2r-upsouth) -- (ucp2r-upnorth) coordinate[pos=1.15] (ucp2r-top) ;
+\path (ucp1r-upsouth) -- (ucp1r-upnorth) coordinate[pos=1.15] (ucp1r-top) ;
+
+\draw [copyconnection] (crp5-lastnorth-|crp5-east)
+ -- node {\copymidarrow}(crp5-top)
+ -- node {\copymidarrow}(ucp5r-top)
+ -- node {\copymidarrow} (ucp5r-upnorth);
+\draw [copyconnection] (crp4-lastnorth-|crp4-east)
+ -- node {\copymidarrow}(crp4-top)
+ -- node {\copymidarrow}(ucp4r-top)
+ -- node {\copymidarrow} (ucp4r-upnorth);
+\draw [copyconnection] (crp3-lastnorth-|crp3-east)
+ -- node {\copymidarrow}(crp3-top)
+ -- node {\copymidarrow}(ucp3r-top)
+ -- node {\copymidarrow} (ucp3r-upnorth);
+\draw [copyconnection] (crp2-lastnorth-|crp2-east)
+ -- node {\copymidarrow}(crp2-top)
+ -- node {\copymidarrow}(ucp2r-top)
+ -- node {\copymidarrow} (ucp2r-upnorth);
+\draw [copyconnection] (crp1-lastnorth-|crp1-east)
+ -- node {\copymidarrow}(crp1-top)
+ -- node {\copymidarrow}(ucp1r-top)
+ -- node {\copymidarrow} (ucp1r-upnorth);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\end{tikzpicture}
+\end{document}\grid
diff --git a/examples/FCNConvBlock+ConvertedConvBlock (copy)/fcnconvandconvertedconvblock.pdf b/examples/FCNConvBlock+ConvertedConvBlock (copy)/fcnconvandconvertedconvblock.pdf
new file mode 100644
index 0000000..c955de1
Binary files /dev/null and b/examples/FCNConvBlock+ConvertedConvBlock (copy)/fcnconvandconvertedconvblock.pdf differ
diff --git a/examples/FCNConvBlock+ConvertedConvBlock (copy)/fcnconvandconvertedconvblock.tex b/examples/FCNConvBlock+ConvertedConvBlock (copy)/fcnconvandconvertedconvblock.tex
new file mode 100644
index 0000000..b05b578
--- /dev/null
+++ b/examples/FCNConvBlock+ConvertedConvBlock (copy)/fcnconvandconvertedconvblock.tex
@@ -0,0 +1,47 @@
+\documentclass[border=15pt, multi, tikz]{standalone}
+%\usepackage{blocks}
+\usepackage{import}
+\subimport{../../layers/}{init}
+\usetikzlibrary{positioning}
+
+%\newcommand{\midarrow}{\tikz \draw[-Stealth,line width =0.8mm,draw=\edgecolor] (-0.3,0) -- ++(0.3,0);}
+\begin{document}
+\begin{tikzpicture}
+\tikzstyle{connection}=[ultra thick,every node/.style={sloped,allow upside down},draw=\edgecolor,opacity=0.7]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Draw Layer Blocks
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% conv1_1,conv1_2,pool1
+\pic[shift={(0,0,0)}] at (0,0,0) {ConvReluPool={blockname=crp1,%
+ numFilters={{"64","64","32"}},height=40,width={2,2},depth=40,zlabel=I}};
+% conv2_1,conv2_2,pool2
+\pic[shift={(2.1,0,0)}] at (crp1-east) {ConvReluPool={blockname=crp2,%
+ numFilters={{"128","128"}},height=35,width={3,3},depth=35,zlabel=I/2}};
+%% conv3_1,conv3_2,conv3_3,pool3
+\pic[shift={(2,0,0)}] at (crp2-east) {ConvReluPool={blockname=crp3,%
+ numFilters={{"256","256","256"}},height=30,width={4,4,4},depth=30,zlabel=I/4}};
+%% conv4_1,conv4_2,conv4_3,pool4
+\pic[shift={(1.8,0,0)}] at (crp3-east) {ConvReluPool={blockname=crp4,%
+ numFilters={{"512","512","512"}},height=23,width={7,7,7},depth=23,zlabel=I/8}};
+%% conv5_1,conv5_2,conv5_3,pool5
+\pic[shift={(1.5,0,0)}] at (crp4-east) {ConvReluPool={blockname=crp5,%
+ numFilters={{"512","512","512"}},height=15,width={7,7,7},depth=15,zlabel=I/16}};
+%% fc6, fc7
+\pic[shift={(1.2,0,0)}] at (crp5-east) {ConvRelu={blockname=cp6_7,%
+ numFilters={{"4096","4096"}},height=10,width={10,10},depth=10,zlabel=I/32}};
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Draw connections
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\draw [connection] (crp1-east) -- node {\midarrow} (crp2-west);
+\draw [connection] (crp2-east) -- node {\midarrow} (crp3-west);
+\draw [connection] (crp3-east) -- node {\midarrow} (crp4-west);
+\draw [connection] (crp4-east) -- node {\midarrow} (crp5-west);
+\draw [connection] (crp5-east) -- node {\midarrow} (cp6_7-west);
+\draw [connection] (cp6_7-east) -- node {\midarrow} ++(1.5,0,0);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\end{tikzpicture}
+\end{document}\grid
diff --git a/examples/SegNet/segnet.pdf b/examples/SegNet/segnet.pdf
new file mode 100644
index 0000000..59d45c1
Binary files /dev/null and b/examples/SegNet/segnet.pdf differ
diff --git a/examples/SegNet/segnet.tex b/examples/SegNet/segnet.tex
new file mode 100644
index 0000000..62b7e35
--- /dev/null
+++ b/examples/SegNet/segnet.tex
@@ -0,0 +1,116 @@
+\documentclass[border=15pt, multi, tikz]{standalone}
+%\usepackage{blocks}
+\usepackage{import}
+\subimport{../../layers/}{init}
+\usetikzlibrary{positioning}
+
+\newcommand{\copymidarrow}{\tikz \draw[-Stealth,line width =0.8mm,draw={rgb:blue,4;red,1;green,1;black,3}] (-0.3,0) -- ++(0.3,0);}
+\begin{document}
+\begin{tikzpicture}
+\tikzstyle{connection}=[ultra thick,every node/.style={sloped,allow upside down},draw=\edgecolor,opacity=0.7]
+\tikzstyle{copyconnection}=[ultra thick,every node/.style={sloped,allow upside down},draw={rgb:blue,4;red,1;green,1;black,3},opacity=0.7]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Draw Encoder
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% conv1_1,conv1_2,pool1
+\pic[shift={(0,0,0)}] at (0,0,0) {ConvReluPool={blockname=crp1,%
+ numFilters={{"64","64","32"}},height=40,width={2,2},depth=40,zlabel=I}};
+% conv2_1,conv2_2,pool2
+\pic[shift={(1.6,0,0)}] at (crp1-east) {ConvReluPool={blockname=crp2,%
+ numFilters={{"128","128"}},height=35,width={2.5,2.5},depth=35,zlabel=I/2}};
+%% conv3_1,conv3_2,conv3_3,pool3
+\pic[shift={(1.2,0,0)}] at (crp2-east) {ConvReluPool={blockname=crp3,%
+ numFilters={{"256","256","256"}},height=30,width={3.3,3.3,3.3},depth=30,zlabel=I/4}};
+%% conv4_1,conv4_2,conv4_3,pool4
+\pic[shift={(1,0,0)}] at (crp3-east) {ConvReluPool={blockname=crp4,%
+ numFilters={{"512","512","512"}},height=23,width={4.5,4.5,4.5},depth=23,zlabel=I/8}};
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Draw Bottleneck
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% conv5_1,conv5_2,conv5_3
+\pic[shift={(1,0,0)}] at (crp4-east) {ConvRelu={blockname=cp5,%
+ numFilters={{"512","512","512"}},height=12,width={4.5,4.5,4.5},depth=12,zlabel=I/16}};
+
+%% conv5_1r,conv5_2r,conv5_3r
+\pic[shift={(2,0,0)}] at (cp5-east) {ConvRelu={blockname=cp5r,%
+ numFilters={{"512","512","512"}},height=12,width={4.5,4.5,4.5},depth=12,zlabel=I/16}};
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Draw Dencoder
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% up32
+\pic[shift={(1.5,0,0)}] at (cp5r-east) {UpConvRelu={blockname=ucp4r,%
+ numFilters={{"512","512","512"}},height=23,width={4.5,4.5,4.5},depth=23,zlabel=}};
+
+%% up16
+\pic[shift={(2,0,0)}] at (ucp4r-east) {UpConvRelu={blockname=ucp3r,%
+ numFilters={{"256","256","256"}},height=30,width={3.3,3.3,3.3},depth=30,zlabel=}};
+
+%% up8
+\pic[shift={(2,0,0)}] at (ucp3r-east) {UpConvRelu={blockname=ucp2r,%
+ numFilters={{"128","128"}},height=35,width={2.5,2.5},depth=35,zlabel=}};
+
+
+%% up4
+\pic[shift={(2,0,0)}] at (ucp2r-east) {UpConvRelu={blockname=ucp1r,%
+ numFilters={{"64","64"}},height=40,width={2,2},depth=40,zlabel=}};
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Draw score producer
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% score
+%\pic[shift={(2,0,0)}] at (ucp1r-east) {Conv={blockname=score,%
+% numFilters={{"21",""}},height=40,width={2},depth=40,zlabel=I}};
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Draw connections
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\draw [connection] (crp1-east) -- node {\midarrow} (crp2-west);
+\draw [connection] (crp2-east) -- node {\midarrow} (crp3-west);
+\draw [connection] (crp3-east) -- node {\midarrow} (crp4-west);
+\draw [connection] (crp4-east) -- node {\midarrow} (cp5-west);
+\draw [connection] (cp5-east) -- node {\midarrow} (cp5r-west);
+\draw [connection] (cp5r-east) -- node {\midarrow} (ucp4r-west);
+\draw [connection] (ucp4r-east) -- node {\midarrow} (ucp3r-west);
+\draw [connection] (ucp3r-east) -- node {\midarrow} (ucp2r-west);
+\draw [connection] (ucp2r-east) -- node {\midarrow} (ucp1r-west);
+%\draw [connection] (ucp1r-east) -- node {\midarrow} (score-west);
+
+
+
+
+\path (crp4-south-|crp4-east) -- (crp4-north-|crp4-east) coordinate[pos=1.15] (crp4-top) ;
+\path (crp3-south-|crp3-east) -- (crp3-north-|crp3-east) coordinate[pos=1.15] (crp3-top) ;
+\path (crp2-south-|crp2-east) -- (crp2-north-|crp2-east) coordinate[pos=1.15] (crp2-top) ;
+\path (crp1-south-|crp1-east) -- (crp1-north-|crp1-east) coordinate[pos=1.15] (crp1-top) ;
+
+\path (ucp4r-upsouth) -- (ucp4r-upnorth) coordinate[pos=1.15] (ucp4r-top) ;
+\path (ucp3r-upsouth) -- (ucp3r-upnorth) coordinate[pos=1.15] (ucp3r-top) ;
+\path (ucp2r-upsouth) -- (ucp2r-upnorth) coordinate[pos=1.15] (ucp2r-top) ;
+\path (ucp1r-upsouth) -- (ucp1r-upnorth) coordinate[pos=1.15] (ucp1r-top) ;
+
+\draw [copyconnection] (crp4-lastnorth-|crp4-east)
+ -- node {\copymidarrow}(crp4-top)
+ -- node {\copymidarrow}(ucp4r-top)
+ -- node {\copymidarrow} (ucp4r-upnorth);
+\draw [copyconnection] (crp3-lastnorth-|crp3-east)
+ -- node {\copymidarrow}(crp3-top)
+ -- node {\copymidarrow}(ucp3r-top)
+ -- node {\copymidarrow} (ucp3r-upnorth);
+\draw [copyconnection] (crp2-lastnorth-|crp2-east)
+ -- node {\copymidarrow}(crp2-top)
+ -- node {\copymidarrow}(ucp2r-top)
+ -- node {\copymidarrow} (ucp2r-upnorth);
+\draw [copyconnection] (crp1-lastnorth-|crp1-east)
+ -- node {\copymidarrow}(crp1-top)
+ -- node {\copymidarrow}(ucp1r-top)
+ -- node {\copymidarrow} (ucp1r-upnorth);
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\end{tikzpicture}
+\end{document}\grid
diff --git a/examples/Unet/unet.pdf b/examples/Unet/unet.pdf
new file mode 100644
index 0000000..0735655
Binary files /dev/null and b/examples/Unet/unet.pdf differ
diff --git a/examples/Unet/unet.tex b/examples/Unet/unet.tex
new file mode 100644
index 0000000..2c65314
--- /dev/null
+++ b/examples/Unet/unet.tex
@@ -0,0 +1,138 @@
+\documentclass[border=15pt, multi, tikz]{standalone}
+%\usepackage{blocks}
+\usepackage{import}
+\subimport{../../layers/}{init}
+\usetikzlibrary{positioning}
+
+\newcommand{\copymidarrow}{\tikz \draw[-Stealth,line width =0.8mm,draw={rgb:blue,4;red,1;green,1;black,3}] (-0.3,0) -- ++(0.3,0);}
+\begin{document}
+\begin{tikzpicture}
+\tikzstyle{connection}=[ultra thick,every node/.style={sloped,allow upside down},draw=\edgecolor,opacity=0.7]
+\tikzstyle{copyconnection}=[ultra thick,every node/.style={sloped,allow upside down},draw={rgb:blue,4;red,1;green,1;black,3},opacity=0.7]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Draw Encoder
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% conv1_1,conv1_2,pool1
+\pic[shift={(0,0,0)}] at (0,0,0) {ConvReluPool={blockname=crp1,%
+ numFilters={{"64","64","32"}},height=40,width={2,2},depth=40,zlabel=I}};
+% conv2_1,conv2_2,pool2
+\pic[shift={(1.6,0,0)}] at (crp1-east) {ConvReluPool={blockname=crp2,%
+ numFilters={{"128","128"}},height=35,width={2.5,2.5},depth=35,zlabel=I/2}};
+%% conv3_1,conv3_2,conv3_3,pool3
+\pic[shift={(1.2,0,0)}] at (crp2-east) {ConvReluPool={blockname=crp3,%
+ numFilters={{"256","256"}},height=30,width={3.3,3.3},depth=30,zlabel=I/4}};
+%% conv4_1,conv4_2,conv4_3,pool4
+\pic[shift={(1,0,0)}] at (crp3-east) {ConvReluPool={blockname=crp4,%
+ numFilters={{"512","512"}},height=23,width={4.5,4.5},depth=23,zlabel=I/8}};
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Bottleneck
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% fc6,fc7
+\pic[shift={(0.9,0,0)}] at (crp4-east) {ConvRelu={blockname=cp6_7,%
+ numFilters={{"1024","1024"}},height=10,width={9,9},depth=10,zlabel=I/16}};
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Draw Dencoder
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% up32
+\pic[shift={(1.5,0,0)}] at (cp6_7-east) {UpConvRelu={blockname=up32,%
+ numFilters={{"512",""}},height=23,width={4.5},depth=23,zlabel=}};
+%% Concat32
+\pic[shift={(0,0,0)}] at (up32-east) {Gray={blockname=cat32,%
+ numFilters={{"512",""}},height=23,width={4.5},depth=23,zlabel=}};
+%% Conv32
+\pic[shift={(0.5,0,0)}] at (cat32-east) {ConvRelu={blockname=conv32,%
+ numFilters={{"512","512"}},height=23,width={4.5,4.5},depth=23,zlabel=I/8}};
+
+
+%% up16
+\pic[shift={(2,0,0)}] at (conv32-east) {UpConvRelu={blockname=up16,%
+ numFilters={{"256",""}},height=30,width={3.3},depth=30,zlabel=}};
+%% Concat16
+\pic[shift={(0,0,0)}] at (up16-east) {Gray={blockname=cat16,%
+ numFilters={{"256",""}},height=30,width={3.3},depth=30,zlabel=}};
+%% Conv16
+\pic[shift={(0.5,0,0)}] at (cat16-east) {ConvRelu={blockname=conv16,%
+ numFilters={{"256","256"}},height=30,width={3.3,3.3},depth=30,zlabel=I/4}};
+
+
+%% up8
+\pic[shift={(2,0,0)}] at (conv16-east) {UpConvRelu={blockname=up8,%
+ numFilters={{"128",""}},height=35,width={2.5},depth=35,zlabel=}};
+%% Concat8
+\pic[shift={(0,0,0)}] at (up8-east) {Gray={blockname=cat8,%
+ numFilters={{"128",""}},height=35,width={2.5},depth=35,zlabel=}};
+%% Conv8
+\pic[shift={(0.5,0,0)}] at (cat8-east) {ConvRelu={blockname=conv8,%
+ numFilters={{"128","128"}},height=35,width={2.5,2.5},depth=35,zlabel=I/2}};
+
+
+%% up4
+\pic[shift={(2,0,0)}] at (conv8-east) {UpConvRelu={blockname=up4,%
+ numFilters={{"64",""}},height=40,width={2},depth=40,zlabel=}};
+%% Concat4
+\pic[shift={(0,0,0)}] at (up4-east) {Gray={blockname=cat4,%
+ numFilters={{"64",""}},height=40,width={2},depth=40,zlabel=}};
+
+%% Conv4
+\pic[shift={(0.5,0,0)}] at (cat4-east) {ConvRelu={blockname=conv4,%
+ numFilters={{"64","64"}},height=40,width={2,2},depth=40,zlabel=I}};
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Draw score producer
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Conv4
+\pic[shift={(2,0,0)}] at (conv4-east) {Conv={blockname=score,%
+ numFilters={{"21",""}},height=40,width={2},depth=40,zlabel=I}};
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Draw connections
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\draw [connection] (crp1-east) -- node {\midarrow} (crp2-west);
+\draw [connection] (crp2-east) -- node {\midarrow} (crp3-west);
+\draw [connection] (crp3-east) -- node {\midarrow} (crp4-west);
+\draw [connection] (crp4-east) -- node {\midarrow} (cp6_7-west);
+\draw [connection] (cp6_7-east) -- node {\midarrow} (up32-west);
+\draw [connection] (cat32-east) -- node {\midarrow} (conv32-west);
+\draw [connection] (conv32-east) -- node {\midarrow} (up16-west);
+
+\draw [connection] (cat16-east) -- node {\midarrow} (conv16-west);
+\draw [connection] (conv16-east) -- node {\midarrow} (up8-west);
+
+\draw [connection] (cat8-east) -- node {\midarrow} (conv8-west);
+\draw [connection] (conv8-east) -- node {\midarrow} (up4-west);
+
+\draw [connection] (cat4-east) -- node {\midarrow} (conv4-west);
+\draw [connection] (conv4-east) -- node {\midarrow} (score-west);
+
+\path (crp4-lastsouth) -- (crp4-lastnorth) coordinate[pos=1.25] (crp4-top) ;
+\path (crp3-lastsouth) -- (crp3-lastnorth) coordinate[pos=1.25] (crp3-top) ;
+\path (crp2-lastsouth) -- (crp2-lastnorth) coordinate[pos=1.25] (crp2-top) ;
+\path (crp1-lastsouth) -- (crp1-lastnorth) coordinate[pos=1.25] (crp1-top) ;
+
+\path (cat32-south) -- (cat32-north) coordinate[pos=1.25] (cat32-top) ;
+\path (cat16-south) -- (cat16-north) coordinate[pos=1.25] (cat16-top) ;
+\path (cat8-south) -- (cat8-north) coordinate[pos=1.25] (cat8-top) ;
+\path (cat4-south) -- (cat4-north) coordinate[pos=1.25] (cat4-top) ;
+
+\draw [copyconnection] (crp4-lastnorth)
+ -- node {\copymidarrow}(crp4-top)
+ -- node {\copymidarrow}(cat32-top)
+ -- node {\copymidarrow} (cat32-north);
+\draw [copyconnection] (crp3-lastnorth)
+ -- node {\copymidarrow}(crp3-top)
+ -- node {\copymidarrow}(cat16-top)
+ -- node {\copymidarrow} (cat16-north);
+\draw [copyconnection] (crp2-lastnorth)
+ -- node {\copymidarrow}(crp2-top)
+ -- node {\copymidarrow}(cat8-top)
+ -- node {\copymidarrow} (cat8-north);
+\draw [copyconnection] (crp1-lastnorth)
+ -- node {\copymidarrow}(crp1-top)
+ -- node {\copymidarrow}(cat4-top)
+ -- node {\copymidarrow} (cat4-north);
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\end{tikzpicture}
+\end{document}\grid
diff --git a/examples/VGG16ConvBlock/vgg16convblock.pdf b/examples/VGG16ConvBlock/vgg16convblock.pdf
new file mode 100644
index 0000000..be62500
Binary files /dev/null and b/examples/VGG16ConvBlock/vgg16convblock.pdf differ
diff --git a/examples/VGG16ConvBlock/vgg16convblock.tex b/examples/VGG16ConvBlock/vgg16convblock.tex
new file mode 100644
index 0000000..8782b71
--- /dev/null
+++ b/examples/VGG16ConvBlock/vgg16convblock.tex
@@ -0,0 +1,46 @@
+\documentclass[border=15pt, multi, tikz]{standalone}
+%\usepackage{blocks}
+\usepackage{import}
+\subimport{../../layers/}{init}
+\usetikzlibrary{positioning}
+
+%\newcommand{\midarrow}{\tikz \draw[-Stealth,line width =0.8mm,draw=\edgecolor] (-0.3,0) -- ++(0.3,0);}
+\begin{document}
+\begin{tikzpicture}
+\tikzstyle{connection}=[ultra thick,every node/.style={sloped,allow upside down},draw=\edgecolor,opacity=0.7]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Draw Layer Blocks
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% conv1_1,conv1_2,pool1
+\pic[shift={(0,0,0)}] at (0,0,0) {ConvReluPool={blockname=crp1,%
+ numFilters={{"64","64","32"}},height=40,width={2,2},depth=40,ylabel=224,zlabel=224}};
+% conv2_1,conv2_2,pool2
+\pic[shift={(2.1,0,0)}] at (crp1-east) {ConvReluPool={blockname=crp2,%
+ numFilters={{"128","128"}},height=35,width={3,3},depth=35,ylabel=112,zlabel=112}};
+%% conv3_1,conv3_2,conv3_3,pool3
+\pic[shift={(2,0,0)}] at (crp2-east) {ConvReluPool={blockname=crp3,%
+ numFilters={{"256","256","256"}},height=30,width={4,4,4},depth=30,ylabel=56,zlabel=56}};
+%% conv4_1,conv4_2,conv4_3,pool4
+\pic[shift={(1.8,0,0)}] at (crp3-east) {ConvReluPool={blockname=crp4,%
+ numFilters={{"512","512","512"}},height=23,width={7,7,7},depth=23,ylabel=28,zlabel=28}};
+%% conv5_1,conv5_2,conv5_3,pool5
+\pic[shift={(1.5,0,0)}] at (crp4-east) {ConvReluPool={blockname=crp5,%
+ numFilters={{"512","512","512"}},height=15,width={7,7,7},depth=15,ylabel=14,zlabel=14}};
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Output
+%% Softmax
+%\pic[shift={(1,0,0)}] at (elt2-east) {Deconv={blockname=up8,%
+% numFilters={{"21","4096"}},height=35,width=1,depth=35,zlabel=I}};
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Draw connections
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\draw [connection] (crp1-east) -- node {\midarrow} (crp2-west);
+\draw [connection] (crp2-east) -- node {\midarrow} (crp3-west);
+\draw [connection] (crp3-east) -- node {\midarrow} (crp4-west);
+\draw [connection] (crp4-east) -- node {\midarrow} (crp5-west);
+\draw [connection] (crp5-east) -- node {\midarrow} ++(1.5,0,0);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\end{tikzpicture}
+\end{document}
diff --git a/examples/fcn32s/fcn32.pdf b/examples/fcn32s/fcn32.pdf
new file mode 100644
index 0000000..91bb055
Binary files /dev/null and b/examples/fcn32s/fcn32.pdf differ
diff --git a/examples/fcn32s/fcn32.tex b/examples/fcn32s/fcn32.tex
new file mode 100644
index 0000000..5f6a12e
--- /dev/null
+++ b/examples/fcn32s/fcn32.tex
@@ -0,0 +1,54 @@
+\documentclass[border=15pt, multi, tikz]{standalone}
+%\usepackage{blocks}
+\usepackage{import}
+\subimport{../../layers/}{init}
+\usetikzlibrary{positioning}
+
+%\newcommand{\midarrow}{\tikz \draw[-Stealth,line width =0.8mm,draw=\edgecolor] (-0.3,0) -- ++(0.3,0);}
+\begin{document}
+\begin{tikzpicture}
+\tikzstyle{connection}=[ultra thick,every node/.style={sloped,allow upside down},draw=\edgecolor,opacity=0.7]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Draw Layer Blocks
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% conv1_1,conv1_2,pool1
+\pic[shift={(0,0,0)}] at (0,0,0) {ConvReluPool={blockname=crp1,%
+ numFilters={{"64","64","32"}},height=40,width={2,2},depth=40,zlabel=I}};
+% conv2_1,conv2_2,pool2
+\pic[shift={(2.1,0,0)}] at (crp1-east) {ConvReluPool={blockname=crp2,%
+ numFilters={{"128","128"}},height=35,width={3,3},depth=35,zlabel=I/2}};
+%% conv3_1,conv3_2,conv3_3,pool3
+\pic[shift={(2,0,0)}] at (crp2-east) {ConvReluPool={blockname=crp3,%
+ numFilters={{"256","256","256"}},height=30,width={4,4,4},depth=30,zlabel=I/4}};
+%% conv4_1,conv4_2,conv4_3,pool4
+\pic[shift={(1.8,0,0)}] at (crp3-east) {ConvReluPool={blockname=crp4,%
+ numFilters={{"512","512","512"}},height=23,width={7,7,7},depth=23,zlabel=I/8}};
+%% conv5_1,conv5_2,conv5_3,pool5
+\pic[shift={(1.5,0,0)}] at (crp4-east) {ConvReluPool={blockname=crp5,%
+ numFilters={{"512","512","512"}},height=15,width={7,7,7},depth=15,zlabel=I/16}};
+%% fc6, fc7
+\pic[shift={(1.2,0,0)}] at (crp5-east) {ConvRelu={blockname=cp6_7,%
+ numFilters={{"4096","4096"}},height=10,width={10,10},depth=10,zlabel=I/32}};
+%% score32
+\pic[shift={(1,0,0)}] at (cp6_7-east) {Conv={blockname=score32,%
+ numFilters={{"21",""}},height=10,width=2,depth=10,zlabel=I/32}};
+
+%% Output
+%% Upsampling to original image size
+\pic[shift={(2,0,0)}] at (score32-east) {Deconv={blockname=up8,%
+ numFilters={{"21",""}},height=35,width=2,depth=35,zlabel=I}};
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Draw connections
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\draw [connection] (crp1-east) -- node {\midarrow} (crp2-west);
+\draw [connection] (crp2-east) -- node {\midarrow} (crp3-west);
+\draw [connection] (crp3-east) -- node {\midarrow} (crp4-west);
+\draw [connection] (crp4-east) -- node {\midarrow} (crp5-west);
+\draw [connection] (crp5-east) -- node {\midarrow} (cp6_7-west);
+\draw [connection] (cp6_7-east) -- node {\midarrow} (score32-west);
+\draw [connection] (score32-east) -- node {\midarrow} (up8-west);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\end{tikzpicture}
+\end{document}\grid
diff --git a/layers/ConvRelu.sty b/layers/ConvRelu.sty
index 9f217ea..7489085 100644
--- a/layers/ConvRelu.sty
+++ b/layers/ConvRelu.sty
@@ -19,7 +19,13 @@
\path [every edge/.append style={pic actions}]
(b) edge ["\numfilters"',midway] (b -| c);
\xdef\SecondLastLayerOriginX{\k} %making value of \k available after the loop as well
-}
+}
+\draw[relu,draw={rgb:black,1}]
+(d)
+-- (e)
+-- ++(0,-\cubescale*\cubey,0) coordinate (f)
+-- (c) -- cycle;
+
\draw [conv]
(\SecondLastLayerOriginX*\cubescale ,\cubescale*\cubey/2 , \cubescale*\cubez/2) coordinate
(d) -- ++(0,0,-\cubescale*\cubez) coordinate (e) -- ++(0,-\cubescale*\cubey,0) coordinate (f) -- (c) -- cycle ;
diff --git a/layers/ConvReluPool.sty b/layers/ConvReluPool.sty
index d2bc8c4..8e40c7e 100644
--- a/layers/ConvReluPool.sty
+++ b/layers/ConvReluPool.sty
@@ -41,10 +41,12 @@
\draw (\SecondLastLayerOriginX*\cubescale + 1*\cubescale , 0,0) coordinate (\cubeblockname-east);
\draw (0,0,0) coordinate (\cubeblockname-west);
-%\draw (0.5*\SecondLastLayerOriginX*\cubescale , -\cubescale*\cubey/2 , -\cubescale*\cubez/2) coordinate (\cubeblockname-center);
+
\path (\cubeblockname-west) -- (\cubeblockname-east) coordinate[pos=0.5] (\cubeblockname-anchor);
\path (\cubeblockname-anchor) -- ++(0,\cubescale*\cubey/2,0) coordinate (\cubeblockname-north);
\path (\cubeblockname-anchor) -- ++(0,-\cubescale*\cubey/2,0) coordinate (\cubeblockname-south);
+\path (\cubeblockname-east) -- ++(-2*\cubescale,\cubescale*\cubey/2,0) coordinate (\cubeblockname-lastnorth);
+\path (\cubeblockname-east) -- ++(-2*\cubescale,-\cubescale*\cubey/2,0) coordinate (\cubeblockname-lastsouth);
},
/block/.search also={/tikz},
/block/.cd,
diff --git a/layers/GenericBox.sty b/layers/GenericBox.sty
new file mode 100644
index 0000000..1981139
--- /dev/null
+++ b/layers/GenericBox.sty
@@ -0,0 +1,55 @@
+\ProvidesPackage{Conv}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%This Block can draw conv combination
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\tikzset{Conv/.pic={\tikzset{/block/.cd,#1}
+% conv layers
+\foreach \x [ count=\i,evaluate=\x as \numfilters using {array({\cubexlabel},\i-1)}, evaluate=\x as \k using {\x+\prev}, remember=\k as \prev (initially 0)] in \cubex
+{
+\draw [conv] (\k*\cubescale ,\cubescale*\cubey/2 , \cubescale*\cubez/2) coordinate
+ (d) -- ++(-\cubescale*\x,0,0) coordinate (a) -- ++(0,-\cubescale*\cubey,0) coordinate (b) edge coordinate [pos=1] (g) ++(0,0,-\cubescale*\cubez) -- ++(\cubescale*\x,0,0) coordinate (c) -- cycle
+ (d) -- ++(0,0,-\cubescale*\cubez) coordinate (e) edge coordinate[pos=1] (f) ++(0,-\cubescale*\cubey,0) (f) edge (g)
+ (d) -- (a) -- ++(0,0,-\cubescale*\cubez) coordinate (h) edge (g) -- ++(+\cubescale*\x,0,0) coordinate (e) -- cycle;
+% labelling each conv layer with number of filters in each layer
+\path [every edge/.append style={pic actions}]
+ (b) edge ["\numfilters"',midway] (b -| c);
+\xdef\SecondLastLayerOriginX{\k} %making value of \k available after the loop as well
+}
+\draw [conv]
+ (\SecondLastLayerOriginX*\cubescale ,\cubescale*\cubey/2 , \cubescale*\cubez/2) coordinate
+ (d) -- ++(0,0,-\cubescale*\cubez) coordinate (e) -- ++(0,-\cubescale*\cubey,0) coordinate (f) -- (c) -- cycle ;
+% Labelling the block
+\path [every edge/.append style={pic actions}]
+ % name or size of depth dimension
+ (c) edge ["\small\cubezlabel"',pos=0,text width=14*\cubescale*\cubez,text centered,sloped] (f)
+ % name or size of height dimension
+ (0,0,\cubez*\cubescale/2) coordinate (o) edge ["\cubeylabel",midway] (o |- o)
+ % Block name
+ (0,-\cubey*\cubescale/2,+\cubez*\cubescale/2) coordinate (o)+(0,-20pt) coordinate (o1) edge ["\textcolor{black}{ \bf \cubeblocklabel}"',midway,white] (o1 -| c) ;
+
+\draw (\SecondLastLayerOriginX*\cubescale, 0,0) coordinate (\cubeblockname-east);
+\draw (0,0,0) coordinate (\cubeblockname-west);
+\path (\cubeblockname-west) -- (\cubeblockname-east) coordinate[pos=0.5] (\cubeblockname-anchor);
+},
+/block/.search also={/tikz},
+/block/.cd,
+width/.store in=\cubex,
+height/.store in=\cubey,
+depth/.store in=\cubez,
+scale/.store in=\cubescale,
+numFilters/.store in=\cubexlabel,
+ylabel/.store in=\cubeylabel,
+zlabel/.store in=\cubezlabel,
+blocklabel/.store in=\cubeblocklabel,
+blockname/.store in=\cubeblockname,
+width=2,
+height=13,
+depth=15,
+scale=.2,
+numFilters=,
+ylabel=,
+zlabel=,
+blocklabel=,
+blockname=,
+}
diff --git a/layers/Gray.sty b/layers/Gray.sty
new file mode 100644
index 0000000..c14e64a
--- /dev/null
+++ b/layers/Gray.sty
@@ -0,0 +1,57 @@
+\ProvidesPackage{Gray}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%This Block can draw Deconvolution layer
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\tikzset{Gray/.pic={\tikzset{/block/.cd,#1}
+% gray layers
+\foreach \x [ count=\i,evaluate=\x as \numfilters using {array({\cubexlabel},\i-1)}, evaluate=\x as \k using {\x+\prev}, remember=\k as \prev (initially 0)] in \cubex
+{
+\draw [gray] (\k*\cubescale ,\cubescale*\cubey/2 , \cubescale*\cubez/2) coordinate
+ (d) -- ++(-\cubescale*\x,0,0) coordinate (a) -- ++(0,-\cubescale*\cubey,0) coordinate (b) edge coordinate [pos=1] (g) ++(0,0,-\cubescale*\cubez) -- ++(\cubescale*\x,0,0) coordinate (c) -- cycle
+ (d) -- ++(0,0,-\cubescale*\cubez) coordinate (e) edge coordinate[pos=1] (f) ++(0,-\cubescale*\cubey,0) (f) edge (g)
+ (d) -- (a) -- ++(0,0,-\cubescale*\cubez) coordinate (h) edge (g) -- ++(+\cubescale*\x,0,0) coordinate (e) -- cycle;
+% labelling each conv layer with number of filters in each layer
+\path [every edge/.append style={pic actions}]
+ (b) edge ["\numfilters"',midway] (b -| c);
+\xdef\SecondLastLayerOriginX{\k} %making value of \k available after the loop as well
+}
+\draw [gray]
+ (\SecondLastLayerOriginX*\cubescale ,\cubescale*\cubey/2 , \cubescale*\cubez/2) coordinate
+ (d) -- ++(0,0,-\cubescale*\cubez) coordinate (e) -- ++(0,-\cubescale*\cubey,0) coordinate (f) -- (c) -- cycle ;
+% Labelling the block
+\path [every edge/.append style={pic actions}]
+ % name or size of depth dimension
+ (c) edge ["\small\cubezlabel"',pos=0,text width=14*\cubescale*\cubez,text centered,sloped] (f)
+ % name or size of height dimension
+ (0,0,\cubez*\cubescale/2) coordinate (o) edge ["\cubeylabel",midway] (o |- o)
+ % Block name
+ (0,-\cubey*\cubescale/2,+\cubez*\cubescale/2) coordinate (o)+(0,-20pt) coordinate (o1) edge ["\textcolor{black}{ \bf \cubeblocklabel}"',midway,white] (o1 -| c) ;
+
+\draw (\SecondLastLayerOriginX*\cubescale, 0,0) coordinate (\cubeblockname-east);
+\draw (0,0,0) coordinate (\cubeblockname-west);
+\path (\cubeblockname-west) -- (\cubeblockname-east) coordinate[pos=0.5] (\cubeblockname-anchor);
+\path (\cubeblockname-anchor) -- ++(0,\cubescale*\cubey/2,0) coordinate (\cubeblockname-north);
+\path (\cubeblockname-anchor) -- ++(0,-\cubescale*\cubey/2,0) coordinate (\cubeblockname-south);
+\path (\cubeblockname-anchor) -- ++(0,0,\cubescale*\cubez/2) coordinate (\cubeblockname-out);
+},
+/block/.search also={/tikz},
+/block/.cd,
+width/.store in=\cubex,
+height/.store in=\cubey,
+depth/.store in=\cubez,
+scale/.store in=\cubescale,
+numFilters/.store in=\cubexlabel,
+ylabel/.store in=\cubeylabel,
+zlabel/.store in=\cubezlabel,
+blocklabel/.store in=\cubeblocklabel,
+blockname/.store in=\cubeblockname,
+width=2,
+height=13,
+depth=15,
+scale=.2,
+numFilters=,
+ylabel=,
+zlabel=,
+blocklabel=,
+blockname=,
+}
diff --git a/layers/UpConvRelu.sty b/layers/UpConvRelu.sty
new file mode 100644
index 0000000..aea1592
--- /dev/null
+++ b/layers/UpConvRelu.sty
@@ -0,0 +1,126 @@
+\ProvidesPackage{UpConvRelu}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%This Block can draw Upsampling+convRelu combination
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\tikzset{UpConvRelu/.pic={\tikzset{/block/.cd,#1}
+
+% Upsampling layer
+\draw [deconv,fill=\upcolor]
+(0,\cubescale*\cubey/2 , \cubescale*\cubez/2) coordinate (d)
+-- ++(-1*\cubescale,0,0) coordinate (a)
+-- ++(0,-\cubescale*\cubey,0) coordinate (b)
+edge coordinate[pos=1] (g) ++(0,0,-\cubescale*\cubez)
+-- ++(1*\cubescale,0,0) coordinate (c)
+edge coordinate[pos=1] (f) ++(0,0,-\cubescale*\cubez)
+-- cycle
+
+
+(d)
+-- ++(0,0,-\cubescale*\cubez) coordinate (e)
+edge (f)
+-- ++(-\cubescale*1,0,0) coordinate (h)
+edge (g)
+-- (a)
+-- cycle
+
+(g) edge (f)
+;
+
+\fill[deconv] (e)--(f)--(g)--(h)--cycle;
+\fill[deconv] (c)--(f)--(g)--(b)--cycle;
+\fill[deconv] (a)--(b)--(g)--(h)--cycle;
+
+\path (d) -- ++(-1*\cubescale,0,-\cubescale*\cubez/2) coordinate (\cubeblockname-upnorth);
+\path (c) -- ++(-1*\cubescale,0,-\cubescale*\cubez/2) coordinate (\cubeblockname-upsouth);
+
+%% conv layers
+\foreach \x [ count=\i,evaluate=\x as \numfilters using {array({\cubexlabel},\i-1)}, evaluate=\x as \k using {\x+\prev}, remember=\k as \prev (initially 0)] in \cubex
+{
+\draw [relu,fill=\fillcolor,draw=\fillcolor]
+ (\k*\cubescale ,\cubescale*\cubey/2 , \cubescale*\cubez/2) coordinate (d)
+ -- ++(-\cubescale*\x/3,0,0) coordinate (a1)
+ -- ++(0,-\cubescale*\cubey,0) coordinate (b1)
+ -- ++(\cubescale*\x/3,0,0) coordinate (c) -- cycle
+
+ (d)
+ -- (a1)
+ -- ++(0,0,-\cubescale*\cubez) coordinate (h1)
+ -- ++(+\cubescale*\x/3,0,0) coordinate (e) -- cycle
+ ;
+\draw [conv,fill=\fillcolor]
+ (d)
+ -- ++(-\cubescale*\x,0,0) coordinate (a)
+ -- ++(0,-\cubescale*\cubey,0) coordinate (b)
+ edge coordinate [pos=1] (g) ++(0,0,-\cubescale*\cubez)
+ -- (c) -- cycle
+
+ (d)
+ -- (e)
+ edge coordinate[pos=1] (f) ++(0,-\cubescale*\cubey,0)
+
+ (f)
+ edge (g)
+
+ (d)
+ -- (a)
+ -- ++(0,0,-\cubescale*\cubez) coordinate (h)
+ edge (g)
+ -- (e) -- cycle;
+% labelling each conv layer with number of filters in each layer
+\path [every edge/.append style={pic actions}]
+ (b) edge ["\numfilters"',midway] (b -| c);
+\xdef\SecondLastLayerOriginX{\k} %making value of \k available after the loop as well
+}
+\draw[relu,fill=\fillcolor,draw={rgb:black,1}]
+ (d)
+ -- (e)
+ -- ++(0,-\cubescale*\cubey,0) coordinate (f)
+ -- (c) -- cycle;
+
+
+
+
+% Labelling the block
+\path [every edge/.append style={pic actions}]
+ % name or size of depth dimension
+ (c) edge ["\small\cubezlabel"',pos=0,text width=14*\cubescale*\cubez,text centered,sloped] (f)
+ %(d) edge ["\bf\cubeblockname"',pos=0,text width=14*\cubescale*\cubez,text centered,sloped] (e)
+
+ % name or size of height dimension
+ (0,0,\cubez*\cubescale/2) coordinate (o) edge ["\cubeylabel",midway] (o |- o)
+ % Block name
+ %(0,-\cubey*\cubescale/2,+\cubez*\cubescale/2) coordinate (o)+(0,-20pt) coordinate (o1) edge ["\textcolor{black}{ \bf \cubeblocklabel}"',midway,white] (o1 -| c) ;
+ (0,-\cubey*\cubescale/2,+\cubez*\cubescale/2) coordinate (d)+(0,-20pt) coordinate (o1) edge ["\textcolor{black}{ \bf \cubeblocklabel}"',midway,white] (o1 -| c) ;
+
+\draw (\SecondLastLayerOriginX*\cubescale, 0,0) coordinate (\cubeblockname-east);
+\draw (0,0,0) coordinate (\cubeblockname-west);
+\path (\cubeblockname-west) -- (\cubeblockname-east) coordinate[pos=0.5] (\cubeblockname-anchor);
+\path (\cubeblockname-anchor) -- ++(0,\cubescale*\cubey/2,0) coordinate (\cubeblockname-north);
+\path (\cubeblockname-anchor) -- ++(0,-\cubescale*\cubey/2,0) coordinate (\cubeblockname-south);
+},
+/block/.search also={/tikz},
+/block/.cd,
+width/.store in=\cubex,
+height/.store in=\cubey,
+depth/.store in=\cubez,
+scale/.store in=\cubescale,
+numFilters/.store in=\cubexlabel,
+ylabel/.store in=\cubeylabel,
+zlabel/.store in=\cubezlabel,
+blocklabel/.store in=\cubeblocklabel,
+blockname/.store in=\cubeblockname,
+fillcolor/.store in=\fillcolor,
+upcolor/.store in=\upcolor,
+fillcolor = {rgb:yellow,5;red,5;white,5},
+upcolor = {rgb:blue,5;green,2.5;white,5},
+width=2,
+height=13,
+depth=15,
+scale=.2,
+numFilters=,
+ylabel=,
+zlabel=,
+blocklabel=,
+blockname=,
+}
diff --git a/layers/init.tex b/layers/init.tex
index c5be37a..b28dcba 100644
--- a/layers/init.tex
+++ b/layers/init.tex
@@ -7,9 +7,10 @@
\newcommand{\midarrow}{\tikz \draw[-Stealth,line width =0.8mm,draw=\edgecolor] (-0.3,0) -- ++(0.3,0);}
\tikzstyle{conv} =[every edge/.append style={pic actions, densely dashed, opacity=.7},fill opacity=0.4, pic actions, fill={rgb:yellow,5;red,2.5;white,5}]
-\tikzstyle{relu} =[every edge/.append style={pic actions, densely dashed, opacity=.7},fill opacity=0.6, pic actions, fill={rgb:yellow,5;red,5;white,4},draw={rgb:yellow,5;red,5;white,4}]
+\tikzstyle{relu} =[every edge/.append style={pic actions, densely dashed, opacity=.7},fill opacity=0.6, pic actions, fill={rgb:yellow,5;red,5;white,5},draw={rgb:yellow,5;red,5;white,5}]
\tikzstyle{pool} =[every edge/.append style={pic actions, densely dashed, opacity=.7},fill opacity=0.6, pic actions, fill={rgb:red,1;black,0.3}]% colour coeff will be normalized to 1
-\tikzstyle{deconv}=[every edge/.append style={pic actions, densely dashed, opacity=.7},fill opacity=0.4, pic actions, fill={rgb:blue,5;green,2.5;white,5}]
+\tikzstyle{deconv}=[every edge/.append style={pic actions, densely dashed, opacity=.5},fill opacity=0.7, pic actions, fill={rgb:blue,5;green,2.5;white,5}]
+\tikzstyle{gray}=[every edge/.append style={pic actions, densely dashed, opacity=.7},fill opacity=0.4, pic actions, fill={rgb:black,5;white,5}]
\tikzstyle{up}=[every edge/.append style={pic actions, densely dashed, opacity=.7},fill opacity=0.5, pic actions, fill={rgb:blue,5;green,2.5;white,1}]
\tikzstyle{layer} =[every edge/.append style={pic actions, densely dashed, opacity=.7},fill opacity=0.4, pic actions]
\tikzstyle{fullyconn} =[every edge/.append style={pic actions, densely dashed, opacity=.7},fill opacity=0.4, pic actions, fill={rgb:blue,5;red,2.5;white,5}]
@@ -17,9 +18,11 @@
\tikzstyle{DT} =[every edge/.append style={pic actions, densely dashed, opacity=.7},fill opacity=0.4, pic actions, fill={rgb:blue,1;red,2;green,4;white,7}]
\usepackage{ConvReluPool}
+\usepackage{Gray}
\usepackage{ConvRelu}
\usepackage{Conv}
\usepackage{Deconv}
+\usepackage{UpConvRelu}
\usepackage{Up}
%\usepackage{Eltwise}
\usepackage{Multiply}