Я пытаюсь создать иллюстрацию нейронной сети с помощью neuralnetwork
пакета. Я хочу пометить свои bias-нейроны отдельно.
Сейчас у меня есть код:
\documentclass[fleqn,11pt,a4paper,final]{article}
\usepackage{neuralnetwork}
\begin{document}
\begin{figure}[h!]
\begin{neuralnetwork}[height=1.5 ,maintitleheight=1cm,layertitleheight=3cm]
\newcommand{\nodetextx}[2]{$x_{#2}$}
\newcommand{\nodetextz}[2]{$y$}
\newcommand{\nodetexth}[2]{$h_{#2,1}$}
\newcommand{\nodetexthto}[2]{$h_{#2,2}$}
\inputlayer[count=3, title={Input-lag}, text=\nodetextx]
\hiddenlayer[count=5, title={Skjult lag}, text=\nodetexth]
\linklayers
\hiddenlayer[count=4, title={Skjult lag}, text=\nodetexthto]
\linklayers
\outputlayer[count=1, title={Output-lag}, text=\nodetextz]
\linklayers
\end{neuralnetwork}
\end{figure}
\end{document}
Что дает мне следующую иллюстрацию:
Я хочу, x_0
чтобы -нейрон был помечен \textbf{c_1}
, h_{0,1}
-нейрон был помечен \textbf{c_2}
и, наконец, h_{0,2}
-нейрон был помечен b
. Как мне это сделать?
Помощь приветствуется. Спасибо
решение1
Это может оказаться сложнее, чем следовало бы, но, похоже, это работает.
\documentclass[border=5mm]{standalone}
\usepackage{xpatch}
\usepackage{neuralnetwork}
% this is the command that prints the first node in a layer
% \node[bias neuron] (L\nn@layerindex-0) at (\nn@node@xb, \nn@node@y) {\nn@nodecaption{\nn@layerindex}{0}};
% we want to modify the last bit to use the loop macro \nn@nodeindex instead of 0
\makeatletter
\xpatchcmd{\layer}{\nn@nodecaption{\nn@layerindex}{0}}{\nn@nodecaption{\nn@layerindex}{\nn@nodeindex}}{}{}
% define the nodeindex to be zero initially
\newcommand\nn@nodeindex{0}
\newcommand{\nodetextx}[2]{
\ifnum \nn@nodeindex=0
$\mathbf{c_1}$
\else
$x_{#2}$
\fi
}
\newcommand{\nodetextz}[2]{$y$}
\newcommand{\nodetexth}[2]{
\ifnum \nn@nodeindex=0
$\mathbf{c_2}$
\else
$h_{#2,1}$
\fi
}
\newcommand{\nodetexthto}[2]{
\ifnum \nn@nodeindex=0
$b$
\else
$h_{#2,2}$
\fi
}
\makeatother
\begin{document}
\begin{neuralnetwork}[height=1.5 ,maintitleheight=1cm,layertitleheight=3cm]
\inputlayer[count=3, title={Input-lag}, text=\nodetextx]
\hiddenlayer[count=5, title={Skjult lag}, text=\nodetexth]
\linklayers
\hiddenlayer[count=4, title={Skjult lag}, text=\nodetexthto]
\linklayers
\outputlayer[count=1, title={Output-lag}, text=\nodetextz]
\linklayers
\end{neuralnetwork}
\end{document}
решение2
Разрешить
Я хочу внести свой вклад в решение. Решитесь, поставив тег bias = false
. Я больше не знаю, что такое bias. Я нашел его в другом блоге, и это сработало.
\documentclass[border=5mm]{standalone}
\usepackage{xpatch}
\usepackage{neuralnetwork}
% this is the command that prints the first node in a layer
% \node[bias neuron] (L\nn@layerindex-0) at (\nn@node@xb, \nn@node@y) {\nn@nodecaption{\nn@layerindex}{0}};
% we want to modify the last bit to use the loop macro \nn@nodeindex instead of 0
\makeatletter
\xpatchcmd{\layer}{\nn@nodecaption{\nn@layerindex}{0}}{\nn@nodecaption{\nn@layerindex}{\nn@nodeindex}}{}{}
% define the nodeindex to be zero initially
\newcommand\nn@nodeindex{0}
\newcommand{\nodetextx}[2]{
\ifnum \nn@nodeindex=0
$\mathbf{c_1}$
\else
$i_{#2}$
\fi
}
\newcommand{\nodetextz}[2]{$o_1$}
\newcommand{\nodetexth}[2]{
\ifnum \nn@nodeindex=0
$\mathbf{c_2}$
\else
$h_{1, #2}$
\fi
}
\newcommand{\nodetexthto}[2]{
\ifnum \nn@nodeindex=0
$b$
\else
$h_{2, #2}$
\fi
}
\makeatother
\begin{document}
\begin{neuralnetwork}[height=1.5 ,maintitleheight=1cm,layertitleheight=5cm]
\inputlayer[count=5, bias=false, title={Input}, text=\nodetextx]
\hiddenlayer[count=10, bias=false, title={Oc1}, text=\nodetexth]
\linklayers
\hiddenlayer[count=10, bias=false, title={Oc2}, text=\nodetexthto]
\linklayers
\outputlayer[count=1, title={Output}, text=\nodetextz]
\linklayers
\end{neuralnetwork}
\end{document}