From 362d5944c3f0e60a82a4ae0e1fc58b40198a14c4 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 22 Jun 2021 21:08:26 +0000 Subject: nndraw (22jun21) git-svn-id: svn://tug.org/texlive/trunk@59674 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/nndraw/README | 42 ++++ Master/texmf-dist/doc/latex/nndraw/nndraw.pdf | Bin 0 -> 102511 bytes Master/texmf-dist/source/latex/nndraw/nndraw.dtx | 258 +++++++++++++++++++++++ Master/texmf-dist/source/latex/nndraw/nndraw.ins | 58 +++++ Master/texmf-dist/tex/latex/nndraw/nndraw.sty | 150 +++++++++++++ Master/tlpkg/bin/tlpkg-ctan-check | 2 +- Master/tlpkg/tlpsrc/collection-pictures.tlpsrc | 1 + Master/tlpkg/tlpsrc/nndraw.tlpsrc | 0 8 files changed, 510 insertions(+), 1 deletion(-) create mode 100644 Master/texmf-dist/doc/latex/nndraw/README create mode 100644 Master/texmf-dist/doc/latex/nndraw/nndraw.pdf create mode 100644 Master/texmf-dist/source/latex/nndraw/nndraw.dtx create mode 100644 Master/texmf-dist/source/latex/nndraw/nndraw.ins create mode 100644 Master/texmf-dist/tex/latex/nndraw/nndraw.sty create mode 100644 Master/tlpkg/tlpsrc/nndraw.tlpsrc diff --git a/Master/texmf-dist/doc/latex/nndraw/README b/Master/texmf-dist/doc/latex/nndraw/README new file mode 100644 index 00000000000..35018d65c62 --- /dev/null +++ b/Master/texmf-dist/doc/latex/nndraw/README @@ -0,0 +1,42 @@ +NAME + nndraw -- a LaTeX package which provides utilities to draw neural networks + +VERSION + Version: 1.0 + +COPYRIGHT + Copyright (C) 2021 by Carlos Cardoso Dias + -------------------------------------------------------------------------- + This work may be distributed and/or modified under the + conditions of the LaTeX Project Public License, either version 1.3 + of this license or (at your option) any later version. + The latest version of this license is in + http://www.latex-project.org/lppl.txt + and version 1.3 or later is part of all distributions of LaTeX + version 2005/12/01 or later. + +DESCRIPTION + Draws fully connected neural networks in a simple and efficient way + +USAGE + Usage example: a fully connected neural network with input and output layers + and one hidden layer. + + \usepackage{nndraw} + \begin{document} + \begin{fullyconnectednn}[biasy = -4.5, + titley = 1, + inout = false] + \nnlayer[title = Input layer]{2} + \nnlayer[title = Hidden layer]{4} + \nnlayer[title = Ouput layer, hasbias = false]{1} + \end{fullyconnectednn} + \end{document} + +AUTHOR + Carlos Cardoso Dias + + E-mail: carlosdias.dev@gmail.com + + WWW: + diff --git a/Master/texmf-dist/doc/latex/nndraw/nndraw.pdf b/Master/texmf-dist/doc/latex/nndraw/nndraw.pdf new file mode 100644 index 00000000000..1328cb8f72e Binary files /dev/null and b/Master/texmf-dist/doc/latex/nndraw/nndraw.pdf differ diff --git a/Master/texmf-dist/source/latex/nndraw/nndraw.dtx b/Master/texmf-dist/source/latex/nndraw/nndraw.dtx new file mode 100644 index 00000000000..fe1a0901490 --- /dev/null +++ b/Master/texmf-dist/source/latex/nndraw/nndraw.dtx @@ -0,0 +1,258 @@ +% \iffalse meta-comment +% +% Copyright (C) 2021 by Carlos Cardoso Dias +% --------------------------------------------------------------------------- +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Carlos Cardoso Dias. +% +% This work consists of the files nndraw.dtx and nndraw.ins +% and the derived filebase nndraw.sty. +% +% \fi +% +% \iffalse +%<*driver> +\ProvidesFile{nndraw.dtx} +% +%\NeedsTeXFormat{LaTeX2e}[1999/12/01] +%\ProvidesPackage{nndraw} +%<*package> + [2021/06/22 1.0 nndraw is a LaTeX package which provides utilities to draw neural networks.] +% +% +%<*driver> +\documentclass{ltxdoc} +\usepackage{nndraw}[2021/06/22] +\EnableCrossrefs +\CodelineIndex +\RecordChanges +\begin{document} + \DocInput{nndraw.dtx} + \PrintChanges + \PrintIndex +\end{document} +% +% \fi +% +% \CheckSum{129} +% +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% +% \changes{1.0}{2021/06/22}{Converted to DTX file} +% +% \DoNotIndex{\newcommand,\newenvironment} +% +% \providecommand*{\url}{\texttt} +% \GetFileInfo{nndraw.dtx} +% \title{The \textsf{nndraw} package} +% \author{Carlos Cardoso Dias \\ \url{carlosdias.dev@gmail.com}} +% \date{\fileversion~from \filedate} +% +% \maketitle +% +% \section{Introduction} +% +\textbf{nndraw} is a \LaTeX package which provides utilities to draw neural networks in an efficient way. +Currently this package provides utilities to draw fully connected feedforward neural networks with an arbitrary +number of layers described inside the `fullyconnectednn` environment using the command `nnlayer`. +% +% \section{Usage} +% +An example of usage is shown below, in this example, a fully connected feedforward +deep neural network is provided with two inputs in the first layer, one hidden layer +with four neurons and one output layer with one output. This example shows how easy it is +to customize the presence/absence of biases in any layer as well as its position. + +\begin{verbatim} +\begin{fullyconnectednn}[biasy = -4.5, + titley = 1, + inout = false] + \nnlayer[title = Input layer]{2} + \nnlayer[title = Hidden layer]{4} + \nnlayer[title = Ouput layer, hasbias = false]{1} +\end{fullyconnectednn} +\end{verbatim} + +\noindent Which is drawn as + +\begin{fullyconnectednn}[biasy = -4.5, + titley = 1, + inout = false] + \nnlayer[title = Input layer]{2} + \nnlayer[title = Hidden layer]{4} + \nnlayer[title = Ouput layer, hasbias = false]{1} +\end{fullyconnectednn} +% +% +% \StopEventually{} +% +% \section{Implementation} +% +% \iffalse +%<*package> +% \fi +% +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{nndraw}[2021/06/20 Neural Networks Draw LaTeX package] +\RequirePackage{tikz} +\pgfdeclarelayer{back} +\pgfsetlayers{back,main} +% \end{macrocode} +% +% \begin{macro}{\nnlayerNoText} +% \begin{macrocode} +\newcommand\nnlayerNoText[1]{} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\newif\ifnnlayerHasBias +\pgfkeys{ + /nnlayer/.is family, /nnlayer, + default/.style = {title = , text = \nnlayerNoText, hasbias = true, bias = , color = , biascolor = }, + title/.estore in = \nnlayerTitle, + text/.store in = \nnlayerText, + hasbias/.is if = nnlayerHasBias, + bias/.estore in = \nnlayerBias, + color/.estore in = \nnlayerColor, + biascolor/.estore in = \nnlayerBiasColor, +} +\newcounter{numlayers} +\newcounter{nninputlayer} +\newcounter{lastnnsize} +\tikzstyle{neuron}=[circle, minimum size=6mm, fill=gray!70] +\tikzstyle{neuron_connection}=[->, shorten >=1pt, gray!70] +% \end{macrocode} +% +% \begin{macro}{\nnlayer} +% \begin{macrocode} +\newcommand\nnlayer[2][]{ + \pgfkeys{/nnlayer, default, #1} + \node[text width = \fullyconnectednnTextWidth, align = center] at (\fullyconnectednnLayersep * + \thenumlayers,\fullyconnectednnTitleY) {\nnlayerTitle}; + \if\thenninputlayer0 + \setcounter{nninputlayer}{#2} + \fi + \foreach \i in {1,...,#2} + { + \node[neuron, yshift=(#2 - \thenninputlayer)*5 mm, fill=\nnlayerColor] (\thenumlayers-\i) at (\thenumlayers * \fullyconnectednnLayersep,-\i) {\nnlayerText{\i}}; + } + \if\thelastnnsize0 + \else + \ifnnlayerHasBias + \node[neuron, yshift=5mm, fill=\nnlayerBiasColor] (bias-\thenumlayers) at (\thenumlayers * \fullyconnectednnLayersep -\fullyconnectednnLayersep + \fullyconnectednnBiasX, \fullyconnectednnBiasY) {\nnlayerBias}; + \fi + \begin{pgfonlayer}{back} +% \end{macrocode} +% node connections +% \begin{macrocode} + \foreach \i in {1,...,\thelastnnsize} + { + \foreach \j in {1,...,#2} + { + \draw[neuron_connection] (\the\numexpr\thenumlayers-1\relax-\i) -- (\thenumlayers-\j); + } + } +% \end{macrocode} +% bias connections +% \begin{macrocode} + \ifnnlayerHasBias + \foreach \j in {1,...,#2} + { + \draw[neuron_connection] (bias-\thenumlayers) -- (\thenumlayers-\j); + } + \fi + \end{pgfonlayer} + \fi + \setcounter{lastnnsize}{#2} + \stepcounter{numlayers} +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\newif\iffullyconnectednnInout +\pgfkeys{ + /fullyconnectednn/.is family, /fullyconnectednn, + default/.style = {input = \nnlayerNoText, output = \nnlayerNoText, layersep = 3, biasx = 0.75, biasy = -8.75, titley = 0.75, inout = true, text width = 2cm}, + input/.store in = \fullyconnectednnInput, + output/.store in = \fullyconnectednnOutput, + layersep/.estore in = \fullyconnectednnLayersep, + biasx/.estore in = \fullyconnectednnBiasX, + biasy/.estore in = \fullyconnectednnBiasY, + titley/.estore in = \fullyconnectednnTitleY, + inout/.is if = fullyconnectednnInout, + text width/.estore in = \fullyconnectednnTextWidth, +} +% \end{macrocode} +% +% \begin{environment}{fullyconnectednn} +% \begin{macrocode} +\newenvironment{fullyconnectednn}[1][] + { + \pgfkeys{/fullyconnectednn, default, #1} + \begin{center} + \begin{tikzpicture} + \setcounter{numlayers}{0} + \setcounter{nninputlayer}{0} + \setcounter{lastnnsize}{0} + } + { + \iffullyconnectednnInout + \begin{pgfonlayer}{back} +% \end{macrocode} +% Inputs +% \begin{macrocode} + \foreach \i in {1,...,\thenninputlayer} + { + \draw[<-, shorten <=1pt] (0-\i) -- ++(-1,0) node[left]{\fullyconnectednnInput{\i}}; + } + +% \end{macrocode} +% Outputs +% \begin{macrocode} + \foreach \i in {1,...,\thelastnnsize} + { + \draw[->, shorten <=1pt] (\the\numexpr\thenumlayers-1\relax-\i) -- ++(1,0) node[right]{\fullyconnectednnOutput{\i}}; + } + \end{pgfonlayer} + \fi + \end{tikzpicture} + \end{center} + } +% \end{macrocode} +% \end{environment} +% + +% +% \iffalse +% +% \fi +% +% \Finale +\endinput diff --git a/Master/texmf-dist/source/latex/nndraw/nndraw.ins b/Master/texmf-dist/source/latex/nndraw/nndraw.ins new file mode 100644 index 00000000000..eeaed657d3f --- /dev/null +++ b/Master/texmf-dist/source/latex/nndraw/nndraw.ins @@ -0,0 +1,58 @@ +%% Copyright (C) 2021 by Carlos Cardoso Dias +%% -------------------------------------------------------------------------- +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Carlos Cardoso Dias. +%% +%% This work consists of the files nndraw.dtx and nndraw.ins +%% and the derived filebase nndraw.sty. +%% + +\input docstrip.tex +\keepsilent + +\usedir{tex/latex/nndraw} + +\preamble + +This is a generated file. + +Copyright (C) 2021 by Carlos Cardoso Dias +-------------------------------------------------------------------------- +This work may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2005/12/01 or later. + +\endpreamble + +\generate{\file{nndraw.sty}{\from{nndraw.dtx}{package}}} + +\obeyspaces +\Msg{*************************************************************} +\Msg{* *} +\Msg{* To finish the installation you have to move the following *} +\Msg{* file into a directory searched by TeX: *} +\Msg{* *} +\Msg{* nndraw.sty *} +\Msg{* *} +\Msg{* To produce the documentation run the file nndraw.dtx *} +\Msg{* through LaTeX. *} +\Msg{* *} +\Msg{* Happy TeXing! *} +\Msg{* *} +\Msg{*************************************************************} + +\endbatchfile + diff --git a/Master/texmf-dist/tex/latex/nndraw/nndraw.sty b/Master/texmf-dist/tex/latex/nndraw/nndraw.sty new file mode 100644 index 00000000000..f7bd217d10e --- /dev/null +++ b/Master/texmf-dist/tex/latex/nndraw/nndraw.sty @@ -0,0 +1,150 @@ +%% +%% This is file `nndraw.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% nndraw.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% Copyright (C) 2021 by Carlos Cardoso Dias +%% -------------------------------------------------------------------------- +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +\NeedsTeXFormat{LaTeX2e}[1999/12/01] +\ProvidesPackage{nndraw} + [2021/06/22 1.0 nndraw is a LaTeX package which provides utilities to draw neural networks.] +\textbf{nndraw} is a \LaTeX package which provides utilities to draw neural networks in an efficient way. +Currently this package provides utilities to draw fully connected feedforward neural networks with an arbitrary +number of layers described inside the `fullyconnectednn` environment using the command `nnlayer`. +An example of usage is shown below, in this example, a fully connected feedforward +deep neural network is provided with two inputs in the first layer, one hidden layer +with four neurons and one output layer with one output. This example shows how easy it is +to customize the presence/absence of biases in any layer as well as its position. + +\begin{verbatim} +\begin{fullyconnectednn}[biasy = -4.5, + titley = 1, + inout = false] + \nnlayer[title = Input layer]{2} + \nnlayer[title = Hidden layer]{4} + \nnlayer[title = Ouput layer, hasbias = false]{1} +\end{fullyconnectednn} +\end{verbatim} + +\noindent Which is drawn as + +\begin{fullyconnectednn}[biasy = -4.5, + titley = 1, + inout = false] + \nnlayer[title = Input layer]{2} + \nnlayer[title = Hidden layer]{4} + \nnlayer[title = Ouput layer, hasbias = false]{1} +\end{fullyconnectednn} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{nndraw}[2021/06/20 Neural Networks Draw LaTeX package] +\RequirePackage{tikz} +\pgfdeclarelayer{back} +\pgfsetlayers{back,main} +\newcommand\nnlayerNoText[1]{} +\newif\ifnnlayerHasBias +\pgfkeys{ + /nnlayer/.is family, /nnlayer, + default/.style = {title = , text = \nnlayerNoText, hasbias = true, bias = , color = , biascolor = }, + title/.estore in = \nnlayerTitle, + text/.store in = \nnlayerText, + hasbias/.is if = nnlayerHasBias, + bias/.estore in = \nnlayerBias, + color/.estore in = \nnlayerColor, + biascolor/.estore in = \nnlayerBiasColor, +} +\newcounter{numlayers} +\newcounter{nninputlayer} +\newcounter{lastnnsize} +\tikzstyle{neuron}=[circle, minimum size=6mm, fill=gray!70] +\tikzstyle{neuron_connection}=[->, shorten >=1pt, gray!70] +\newcommand\nnlayer[2][]{ + \pgfkeys{/nnlayer, default, #1} + \node[text width = \fullyconnectednnTextWidth, align = center] at (\fullyconnectednnLayersep * + \thenumlayers,\fullyconnectednnTitleY) {\nnlayerTitle}; + \if\thenninputlayer0 + \setcounter{nninputlayer}{#2} + \fi + \foreach \i in {1,...,#2} + { + \node[neuron, yshift=(#2 - \thenninputlayer)*5 mm, fill=\nnlayerColor] (\thenumlayers-\i) at (\thenumlayers * \fullyconnectednnLayersep,-\i) {\nnlayerText{\i}}; + } + \if\thelastnnsize0 + \else + \ifnnlayerHasBias + \node[neuron, yshift=5mm, fill=\nnlayerBiasColor] (bias-\thenumlayers) at (\thenumlayers * \fullyconnectednnLayersep -\fullyconnectednnLayersep + \fullyconnectednnBiasX, \fullyconnectednnBiasY) {\nnlayerBias}; + \fi + \begin{pgfonlayer}{back} + \foreach \i in {1,...,\thelastnnsize} + { + \foreach \j in {1,...,#2} + { + \draw[neuron_connection] (\the\numexpr\thenumlayers-1\relax-\i) -- (\thenumlayers-\j); + } + } + \ifnnlayerHasBias + \foreach \j in {1,...,#2} + { + \draw[neuron_connection] (bias-\thenumlayers) -- (\thenumlayers-\j); + } + \fi + \end{pgfonlayer} + \fi + \setcounter{lastnnsize}{#2} + \stepcounter{numlayers} +} +\newif\iffullyconnectednnInout +\pgfkeys{ + /fullyconnectednn/.is family, /fullyconnectednn, + default/.style = {input = \nnlayerNoText, output = \nnlayerNoText, layersep = 3, biasx = 0.75, biasy = -8.75, titley = 0.75, inout = true, text width = 2cm}, + input/.store in = \fullyconnectednnInput, + output/.store in = \fullyconnectednnOutput, + layersep/.estore in = \fullyconnectednnLayersep, + biasx/.estore in = \fullyconnectednnBiasX, + biasy/.estore in = \fullyconnectednnBiasY, + titley/.estore in = \fullyconnectednnTitleY, + inout/.is if = fullyconnectednnInout, + text width/.estore in = \fullyconnectednnTextWidth, +} +\newenvironment{fullyconnectednn}[1][] + { + \pgfkeys{/fullyconnectednn, default, #1} + \begin{center} + \begin{tikzpicture} + \setcounter{numlayers}{0} + \setcounter{nninputlayer}{0} + \setcounter{lastnnsize}{0} + } + { + \iffullyconnectednnInout + \begin{pgfonlayer}{back} + \foreach \i in {1,...,\thenninputlayer} + { + \draw[<-, shorten <=1pt] (0-\i) -- ++(-1,0) node[left]{\fullyconnectednnInput{\i}}; + } + + \foreach \i in {1,...,\thelastnnsize} + { + \draw[->, shorten <=1pt] (\the\numexpr\thenumlayers-1\relax-\i) -- ++(1,0) node[right]{\fullyconnectednnOutput{\i}}; + } + \end{pgfonlayer} + \fi + \end{tikzpicture} + \end{center} + } + +\endinput +%% +%% End of file `nndraw.sty'. diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index c0af3540509..b55c210959b 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -552,7 +552,7 @@ my @TLP_working = qw( nfssext-cfr nicefilelist niceframe niceframe-type1 nicematrix nicetext nidanfloat nih nihbiosketch nimbus15 nimsticks ninecolors njurepo nkarta nl-interval nlctdoc - nmbib nnext noconflict nodetree noindentafter noitcrul nolbreaks + nmbib nndraw nnext noconflict nodetree noindentafter noitcrul nolbreaks nomencl nomentbl nonfloat nonumonpart nopageno norasi-c90 normalcolor nostarch notes notes2bib notespages notestex notex-bst noto noto-emoji notoccite notomath diff --git a/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc b/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc index e6953b338f4..89d5a655c70 100644 --- a/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc @@ -94,6 +94,7 @@ depend mkpic depend modiagram depend neuralnetwork depend nl-interval +depend nndraw depend numericplots depend pb-diagram depend penrose diff --git a/Master/tlpkg/tlpsrc/nndraw.tlpsrc b/Master/tlpkg/tlpsrc/nndraw.tlpsrc new file mode 100644 index 00000000000..e69de29bb2d -- cgit v1.2.3