GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 16.04 LTS desktop amd64
TensorFlow v1.2.1
cuDNN v5.1 for Linux
CUDA v8.0
Python 3.5.2
IPython 6.0.0 -- An enhanced Interactive Python.
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
学習コードv0.1 http://qiita.com/7of9/items/5819f36e78cc4290614e
http://qiita.com/7of9/items/bc2f8a09d8681702b066
の続き。
概要
This article is related to ADDA (light scattering simulator based on the discrete dipole approximation).
- TFRecordsを読込んで学習する
- input: 5 nodes
- output: 6 nodes
- サンプル数: 4,113,648
- 学習データ: ADDAにより計算した値
- #input
- x,y,z: dipole position
- refractive index: real and imaginary part
- #output
- initial values for linear equation solution for (x,y,z),(real,imaginary)
5次元関数の補間を学習させようとしている。
(5次元の回帰問題というのだろうか?)
補間の対象はADDAでの線形方程式の初期値としている。初期値が実際の解に近い値から線形方程式を解くと、iterationの回数をおさえられるという目論見。
確認事項
https://github.com/adda-team/adda/blob/master/doc/manual.pdf
p39においてADDAに用意されている様々なiterative solverが記載されている。
- Bi-CGStab(2)
- Bi-CG
- Bi-CGStab
- CGNR
- CSYM
- QMR
- QMR2
デフォルトはQMR。
TensorFlowでの学習(線形方程式の初期値)によるiteration回数の変化がiterative solverでどう異なるかチェックしてみた。
A:type | B:original[回] | C:TF学習[回] | D:C/B |
---|---|---|---|
Bi-CGStab(2) | 13 | 11 | 0.846 |
Bi-CG | 46 | 39 | 0.847 |
Bi-CGStab | 26 | 22 | 0.846 |
CGNR | 65 | 46 | 0.707 |
CSYM | 112 | 88 | 0.785 |
QMR | 47 | 39 | 0.829 |
QMR2 | 46 | 39 | 0.847 |
(originalの初期誤差:1.0, TF学習を用いた場合の初期誤差:0.0808)
D列の値が0.8程度にしかならない。
「TF学習結果から初期値を計算する時間」と「iterationを減らした時間」を比べて考えたら、計算効率改善には貢献していない。
2007年の計算
2007年にトルコで発表した結果。
- 計算コード: DDSCAT (v6.1)
- m=1.60 + 0.01i
- 形状: BCCA64, OMMT, GSP
- TM, TEモードの初期値を補間
- 入射光の方向に対する補間処理
- 結果(上図)として、0.2から0.8の範囲でのC/B値を得ていた
この結果をベースとしてトライをしているが、ADDAでは0.8程度にしかならないのはなぜだろうか。
実施した計算の異なる条件を合わせていくと何かわかるだろうか。