目次

5. プログラムの実行法

5.1 プログラムのインストール

ファイル(dlant.zip) をダウンロードして、 適当なフォルダに展開してください。ファイル構成は以下の通りです。

  1. dl/ : 深層学習プログラム(Python)
  2. mom/ : モーメント法プログラム(C)

図5-1にシステム構成図を示します。
モーメント法計算、深層学習、図形出力の3つから成ります。

図5-1 システム構成図

5.2 モーメント法プログラムのデータ入力

ファイルMain.cを編集して計算条件を設定してください。
最初の行が"Iobs=1"のときは遠方界、"Iobs=2"のときは近傍界が計算されます。

リスト5-1 モーメント法プログラムのデータ入力(Main.cの一部)


	// 計算パラメーター
	const int    Iobs   = 1;           // 放射界の種類(1=遠方界,2=近傍界)
	const int    Ndata  = 1000;        // データ数
	const int    Rect[] = {1, 20, 4};  // 長方形パラメーター(最小数,最大数,単位長さ)
	const int    Ny     = 20;          // Y方向セル数
	const int    Nz     = 20;          // Z方向セル数
	const double Dy     = 0.01;        // Y方向長さ
	const double Dz     = 0.01;        // Z方向長さ
	const double Rad    = 0.002;       // 導線半径
	const double Freq   = 3e9;         // 周波数
	const int    Ncr    = 3;           // 電流成分数(1/2/3, 通常3)

	// 遠方界パラメーター(Iobs = 1)
	const int    Nff[]  = {40, 40};    // φ/θ分割数
	const double Lff[]  = {180, 180};  // φ/θ範囲
	const int    Kff    = 4;           // 成分数(2/4, 通常4)

	// 近傍界パラメーター(Iobs = 2)
	const int    Nnf[]  = {40, 40};    // Y/Z分割数
	const double Lnf[]  = {1.2, 1.2, 0.3}; // Y/Z範囲,X座標
	const int    Knf    = 4;           // 成分数(2/3/4/6/12, 成分は要編集)

5.3 モーメント法プログラムのビルド法

モーメント法プログラムをビルドするには、 ターミナル(コマンドプロンプト)で以下のコマンドを実行してください。

表5-1 モーメント法プログラムのビルド法
ビルドコマンドOSコンパイラー実行プログラム
$ nmake.exe -f Makefile_clWindows cl.exemom.exe
$ make -f Makefile_gcc LinuxまたはWSL2gcc mom

5.4 モーメント法プログラムの実行法

モーメント法プログラムはデータに関して独立した計算なので、 OpenMP(共有メモリー環境、スレッド並列)を用いて並列計算することができます。 計算時間はスレッド数分の1になります。
それぞれの環境で以下のコマンドのいずれかを実行してください。

Windows

$ mom.exe		1スレッド, mom.bin出力
$ mom.exe 8		8スレッド, mom.bin出力
$ mom.exe 8 foo.bin	8スレッド, foo.bin出力

LinuxまたはWSL2

$ ./mom			1スレッド, mom.bin出力
$ ./mom 8		8スレッド, mom.bin出力
$ ./mom 8 foo.bin	8スレッド, foo.bin出力

(注1)
デバッグを行って図形出力するときは、 OpenMOM等に付属している2次元図形表示プログラムev2d.exeを用いて以下のコマンドを実行してください。

$ ev2d.exe fig1.ev2
$ ev2d.exe fig2.ev2
$ ev2d.exe fig3.ev2

5.5 深層学習プログラムのデータ入力

ファイルdlant.pyを編集して計算条件を設定してください。

リスト5-3 深層学習プログラムのデータ入力(dlant.pyの一部)


    # 計算パラメーター
    load_model = 0     # 通常0, 前回保存したmodelfileからrestartするとき1
    save_model = 1     # 通常1, 計算終了時にmodelfileを保存しないとき0
    ndata = -1         # データ数, -1のときはすべてのデータ
    batch_size = 60    # バッチサイズ(通常50-100程度)
    num_epochs = 30    # エポック数
    train_ratio = 0.8  # 訓練データの割合(通常0.8程度)

5.6 深層学習プログラムの実行法

深層学習プログラムはPythonで記述されているのでビルド作業は不要です。
実行する前に、python, pip, numpy, matplotlib, torch, torchvision をインストールしてください。

深層学習を行うには下記のコマンドのいずれかを実行してください。

$ python dlant.py (ソースコード内でImode=1とし、datafileとmodelfileを指定する)
$ python dlant.py 1 datafile(ソースコード内でmodelfileを指定する)
$ python dlant.py 1 datafile modelfile

計算結果を図形出力するには下記のコマンドのいずれかを実行してください。
電流の図形出力方法と学習結果の出力ファイルをソースコード内で指定するか引数で指定します。

$ python post.py  (ソースコード内で電流とファイル名を指定する)
$ python post.py 1 (電流=線分電流, ファイル名=dlant.npz)
$ python post.py 2 (電流=セル電流, ファイル名=dlant.npz)
$ python post.py 1 foo.npz(電流=線分電流, ファイル名=foo.npz)
$ python post.py 2 foo.npz(電流=セル電流, ファイル名=foo.npz)

(注2)
コマンドpythonは環境によってはpython.exeまたはpython3となります。

5.7 計算時間

5.7.1 モーメント法の計算時間

モーメント法の計算時間は以下のように評価されます。

モーメント法の計算時間 ∝ (Ny, Nz, 観測面分割数に依存) * データ数 / スレッド数

計算時間の1例として以下のようになります。
・計算条件:Ny=Nz=20, Nθ=Nφ=40, データ数=100,000
・ハードウェア: AMD Ryzen 7 7840HS, 8コア16スレッド
・計算時間: 65秒

5.7.2 深層学習の計算時間

深層学習の計算時間は以下のように評価されます。

深層学習の計算時間 ∝ エポック数 * データ数 * パラメータ数

計算時間の1例として以下のようになります。
・計算条件:エポック数=50, データ数=100,000, ResNet18, パラメーター数=12,472,408
・ハードウェア: NVIDIA GeForce RTX 4060 Laptop, 3072コア, メモリー8GB(GDDR6)
・計算時間: 1180秒