Maximiliano, parte de nuestro equipo, nos hizo el favor de escribir esta reseña porque controla perfectamente el tema.
Solución:
Aquí, tenemos un festival de foreach
:
documentclass[border=0.125cm]standalone
usepackagetikz
usetikzlibrarypositioning
begindocument
tikzset%
every neuron/.style=
circle,
draw,
minimum size=1cm
,
neuron missing/.style=
draw=none,
scale=4,
text height=0.333cm,
execute at begin node=colorblack$vdots$
,
begintikzpicture[x=1.5cm, y=1.5cm, >=stealth]
foreach m/l [count=y] in 1,2,3,missing,4
node [every neuron/.try, neuron m/.try] (input-m) at (0,2.5-y) ;
foreach m [count=y] in 1,missing,2
node [every neuron/.try, neuron m/.try ] (hidden-m) at (2,2-y*1.25) ;
foreach m [count=y] in 1,missing,2
node [every neuron/.try, neuron m/.try ] (output-m) at (4,1.5-y) ;
foreach l [count=i] in 1,2,3,n
draw [<-] (input-i) -- ++(-1,0)
node [above, midway] $I_l$;
foreach l [count=i] in 1,n
node [above] at (hidden-i.north) $H_l$;
foreach l [count=i] in 1,n
draw [->] (output-i) -- ++(1,0)
node [above, midway] $O_l$;
foreach i in 1,...,4
foreach j in 1,...,2
draw [->] (input-i) -- (hidden-j);
foreach i in 1,...,2
foreach j in 1,...,2
draw [->] (hidden-i) -- (output-j);
foreach l [count=x from 0] in Input, Hidden, Ouput
node [align=center, above] at (x*2,2) l \ layer;
endtikzpicture
enddocument
Aunque parece imprudente tener n
indique el número de nodos en cada capa cuando podrían ser diferentes y la disposición del diagrama sugiere que no lo son.
Esta es una solución donde un dot
con completamente lleno de círculo negro, cuyo tamaño se puede cambiar a través de minimum size=xx
se define como un estilo.
Código
documentclass[]article
usepackage[margin=1cm]geometry
usepackagetikz,pgfplots,pgf
usetikzlibrarymatrix,shapes,arrows,positioning
begindocument
beginfigure[htp]
centering
begintikzpicture[
plain/.style=
draw=none,
fill=none,
,
dot/.style=draw,shape=circle,minimum size=3pt,inner sep=0,fill=black
,
net/.style=
matrix of nodes,
nodes=
draw,
circle,
inner sep=8.5pt
,
nodes in empty cells,
column sep=0.6cm,
row sep=-11pt
,
>=latex
]
matrix[net] (mat)
\
& ;
foreach ai/mi in 2/I1,4/I2,6/I3,12/In
draw[<-] (mat-ai-1) -- node[above] mi +(-1cm,0);
foreach ai in 2,4,6,12
foreach aii/mii in 3/H1,11/Hn
draw[->] (mat-ai-1) -- (mat-aii-2) node[yshift=0.6cm] mii;
foreach ai in 3,11
draw[->] (mat-ai-2) -- (mat-4-3);
draw[->] (mat-4-3) -- node[above] O1 +(1cm,0);
foreach ai in 3,11
draw[->] (mat-ai-2) -- (mat-10-3);
draw[->] (mat-10-3) -- node[above] On +(1cm,0);
endtikzpicture
captionANN diagram for Speed Sign recognition.
labelfig_m_3
endfigure
enddocument
Encontré este paquete neuralnetwork, hecho por Mark K Cowan, que hace que dibujar redes neuronales sea bastante simple. Por ejemplo:
documentclassstandalone
usepackageneuralnetwork
begindocument
beginneuralnetwork[height=4]
newcommandx[2]$x_#2$
newcommandy[2]$haty_#2$
newcommandhfirst[2]small $h^(1)_#2$
newcommandhsecond[2]small $h^(2)_#2$
inputlayer[count=3, bias=true, title=Input\layer, text=x]
hiddenlayer[count=4, bias=false, title=Hidden\layer 1, text=hfirst] linklayers
hiddenlayer[count=3, bias=false, title=Hidden\layer 2, text=hsecond] linklayers
outputlayer[count=2, title=Output\layer, text=y] linklayers
endneuralnetwork
enddocument
Si te ha resultado de utilidad este post, sería de mucha ayuda si lo compartes con el resto desarrolladores de este modo contrubuyes a difundir este contenido.