はじめに
前回のデータ変換の記事の続きとなります。今回の記事では、実際に3次元物理シミュレーションのサロゲートモデルを作っていきます。
1. 利用するデータセット
今回はパブリックに公開されている3次元物理シミュレーションのデータを活用させてもらいます。ジェットエンジンのブラケットについてのシミュレーションとなっています。
SimJEB: Simulated Jet Engine Bracket Dataset
データ変換については前回の記事を参照ください。
3次元物理シミュレーションのサロゲートモデルを作りたい(データ変換編)
2. 機械学習の入出力
実際に機械学習の入出力となるのは以下の内容になります。
今回は所有しているGPU性能等の関係上、1出力にしています。
x [ノード数, 属性数(7)]: 機械学習の入力となる側
x axis: float,
y axis: flaot,
z axis: float,
condition of constraint: 0(off) or 1(on),
force magnitude x(vertical): float,
force magnitude y(vertical): float,
force magnitude z(vertical): float
y [ノード数, シミュレーション結果数(1)]: 機械学習の出力側、シミュレーションの結果
magnitude of displacement "sqrt(x^2+y^2+z^2)"(vertical): float
edge_index [2, エッジ数]: ノード間を接続するエッジ
3. GNNモデル
3.1. Message passing
今回、Message passingをベースの考え方に据えたモデルを利用しています。下の図のように、ノード間で情報がやり取りされ、とあるノードの値は周辺のノードの値と自身の値によって更新されます。
Message passingの詳細は下の記事を参照下さい。
【GNN】Message Passing Neural Network(MPNN)を解説する
3.2. 利用モデル
メッセージパッシングと全結合層を組み合わせた方式にしています。
とりあえず決め打ちで構築しただけとなっており、精度を狙うためのモデルの調整はしていません。
layer1: Message passing(in=7, out=64)
Leaky ReLU
layer2: Message passing(in=64, out=128)
Leaky ReLU
layer3: Message passing(in=128, out=256)
Leaky ReLU
layer4: Message passing(in=256, out=512)
Leaky ReLU
layer5: 全結合(in=512, out=256)
layer6: 全結合(in=256, out=128)
layer7: 全結合(in=128, out=1)
ノートブック(Kaggle上で実行するとメモリエラーになります・・・)
4. 結果
とりあえずで作ったモデルとなるため予測精度は高くありませんが、形状に応じて予測結果に変化があるように見受けられるため、目標としていた3次元形状の入力についてはできているように見えます。
まとめ
今回、3次元物理シミュレーションのサロゲートモデルを構築してみました。シミュレーションの生データを変換、機械学習モデルの構築、予測という一連の流れを実装することができました。また、形状に応じて出力に変化が見られたことから、3次元形状を取り扱うことができているものと考えています。ここから精度を上げるために何をするべきか、イメージがついていませんが、調べながら進めていきたいなと思います。