TeX에서 신경망의 네트워크 다이어그램을 그리는 방법
개요
TikZ라는 $\TeX$용 그리기 패키지를 사용하여 그립니다.
벡터 이미지로서 그려지기 때문에, 확대 축소에 의한 그림의 흐트러짐이 발생하지 않고, 그림내에 있는 문자가 copipe 가능하게 된다고 하는 이점이 있습니다.
또, 상대 위치에 의한 위치의 지정이나 foreach를 사용할 수 있기 때문에(구체예는 이하의 그리기 예 이나 Tikz foreach 사용 연습 - Qiita 참조), 묘화 처리를 효율적으로 기술할 수 있습니다.
그리기 예
양방향 LSTM(Bi-directional LSTM/LSTM에 대해서는 아는 LSTM ~ 최근의 동향과 함께 - Qiita 참조)의 네트워크 구성도를 그려 보고 싶습니다.
코드
TODO
섹션의 지시에 따라 다시 작성하고 컴파일합니다.
% 古いパッケージや記法のチェック用
% (コンパイル時に古いパッケージや記法を『Package nag Warning:』で始まる警告の形で指摘してくれるので, この警告が少なくなるように記述すると良い)
\RequirePackage[l2tabu, orthodox]{nag}
% latexコマンドでのコンパイル用
% TODO: 欧文の場合, 以下のコメントアウトを解除
% \documentclass{article}
% platexコマンドでのコンパイル用
% TODO: 和文の場合, 以下のコメントアウトを解除
% \documentclass[dvipdfmx]{jsarticle}
% ネットワーク構成図描画用
\usepackage{tikz}
% 省略記号
\def\ellipsis{$\cdots$}
\begin{document}
% ネットワーク構成図
\begin{figure}[tbp]
\centering
% ノード間の距離
\def\nodeDistance{1.1cm}
% 曲線の始点の角度 (°)
\def\angleStartCurve{360 * 9 / 56}
\begin{tikzpicture}[shorten >= 1pt, ->, node distance=\nodeDistance]
% 変数や省略部のスタイル
\tikzset{var/.style={minimum size=15pt}};
% ノードのスタイル
\tikzset{neuron/.style={var, draw, circle}};
% 入力部を描画
\node[var] (I-n) {$x_n$};
\node[var, left of=I-n] (I-3) {\ellipsis};
\foreach \i/\j in {2/3, 1/2}
{
\node[var, left of=I-\j] (I-\i) {$x_\i$};
}
% 省略部のノードや変数を描画
\foreach \f/\t in {I/F-LSTM, F-LSTM/B-LSTM, B-LSTM/L-S}
{
\node[var, above of=\f-3] (\t-3) {\ellipsis};
}
\node[var, above of=L-S-3] (O-3) {\ellipsis};
\foreach \n in {1, 2, n}
{
% 表示されるノードや変数を描画
\foreach \o/\f/\t in {neuron/I/F-LSTM, neuron/F-LSTM/B-LSTM, neuron/B-LSTM/L-S}
{
\node[\o, above of=\f-\n] (\t-\n) {};
}
\node[var, above of=L-S-\n] (O-\n) {$y_\n$};
% 縦方向の線を描画
\draw (I-\n) to [out=\angleStartCurve, in=360 - \angleStartCurve] (B-LSTM-\n);
\draw (F-LSTM-\n) to [out=180 - \angleStartCurve, in=180 + \angleStartCurve] (L-S-\n);
\foreach \f/\t in {I/F-LSTM, B-LSTM/L-S, L-S/O}
{
\path (\f-\n) edge (\t-\n);
}
}
% 横方向の線を描画
\foreach \i/\j in {1/2, 2/3, 3/n}
{
\foreach \n/\f/\t in {F-LSTM/\i/\j, B-LSTM/\j/\i}
{
\path (\n-\f) edge (\n-\t);
}
}
% 注釈を描画
\foreach \f/\n in {I/Input, B-LSTM/Backward LSTM, F-LSTM/Foward LSTM, L-S/Linear, O/Output}
{
\node[node distance=2 * \nodeDistance and \nodeDistance, text width=9em, text centered, right of=\f-n] (A-\f) {\n};
}
\end{tikzpicture}
\caption{Bi-directional LSTM}
\label{Fig:Bi-directional LSTM}
\end{figure}
\end{document}
컴파일 결과
참고문헌
양방향 LSTM(Bi-directional LSTM/LSTM에 대해서는 아는 LSTM ~ 최근의 동향과 함께 - Qiita 참조)의 네트워크 구성도를 그려 보고 싶습니다.
코드
TODO
섹션의 지시에 따라 다시 작성하고 컴파일합니다.% 古いパッケージや記法のチェック用
% (コンパイル時に古いパッケージや記法を『Package nag Warning:』で始まる警告の形で指摘してくれるので, この警告が少なくなるように記述すると良い)
\RequirePackage[l2tabu, orthodox]{nag}
% latexコマンドでのコンパイル用
% TODO: 欧文の場合, 以下のコメントアウトを解除
% \documentclass{article}
% platexコマンドでのコンパイル用
% TODO: 和文の場合, 以下のコメントアウトを解除
% \documentclass[dvipdfmx]{jsarticle}
% ネットワーク構成図描画用
\usepackage{tikz}
% 省略記号
\def\ellipsis{$\cdots$}
\begin{document}
% ネットワーク構成図
\begin{figure}[tbp]
\centering
% ノード間の距離
\def\nodeDistance{1.1cm}
% 曲線の始点の角度 (°)
\def\angleStartCurve{360 * 9 / 56}
\begin{tikzpicture}[shorten >= 1pt, ->, node distance=\nodeDistance]
% 変数や省略部のスタイル
\tikzset{var/.style={minimum size=15pt}};
% ノードのスタイル
\tikzset{neuron/.style={var, draw, circle}};
% 入力部を描画
\node[var] (I-n) {$x_n$};
\node[var, left of=I-n] (I-3) {\ellipsis};
\foreach \i/\j in {2/3, 1/2}
{
\node[var, left of=I-\j] (I-\i) {$x_\i$};
}
% 省略部のノードや変数を描画
\foreach \f/\t in {I/F-LSTM, F-LSTM/B-LSTM, B-LSTM/L-S}
{
\node[var, above of=\f-3] (\t-3) {\ellipsis};
}
\node[var, above of=L-S-3] (O-3) {\ellipsis};
\foreach \n in {1, 2, n}
{
% 表示されるノードや変数を描画
\foreach \o/\f/\t in {neuron/I/F-LSTM, neuron/F-LSTM/B-LSTM, neuron/B-LSTM/L-S}
{
\node[\o, above of=\f-\n] (\t-\n) {};
}
\node[var, above of=L-S-\n] (O-\n) {$y_\n$};
% 縦方向の線を描画
\draw (I-\n) to [out=\angleStartCurve, in=360 - \angleStartCurve] (B-LSTM-\n);
\draw (F-LSTM-\n) to [out=180 - \angleStartCurve, in=180 + \angleStartCurve] (L-S-\n);
\foreach \f/\t in {I/F-LSTM, B-LSTM/L-S, L-S/O}
{
\path (\f-\n) edge (\t-\n);
}
}
% 横方向の線を描画
\foreach \i/\j in {1/2, 2/3, 3/n}
{
\foreach \n/\f/\t in {F-LSTM/\i/\j, B-LSTM/\j/\i}
{
\path (\n-\f) edge (\n-\t);
}
}
% 注釈を描画
\foreach \f/\n in {I/Input, B-LSTM/Backward LSTM, F-LSTM/Foward LSTM, L-S/Linear, O/Output}
{
\node[node distance=2 * \nodeDistance and \nodeDistance, text width=9em, text centered, right of=\f-n] (A-\f) {\n};
}
\end{tikzpicture}
\caption{Bi-directional LSTM}
\label{Fig:Bi-directional LSTM}
\end{figure}
\end{document}
컴파일 결과
참고문헌
Reference
이 문제에 관하여(TeX에서 신경망의 네트워크 다이어그램을 그리는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SUZUKI_Masaya/items/d4042c57f560804baabc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)