コンテンツにスキップ

音叉の逆問題を機械学習で解くための Advance/FrontSTR による教師データ作成#

機械学習をする上での大きな問題点#

Description List Example
機械学習を行う上での頭の痛い部分
  • 多数の教師データの作成をしなければならない。 (数千~数万ケース)
  • 実験で多くのサンプルを用意するのは予算・時間的に難しい。
  • 逆問題は、数理的に解くことが一般には難しい。

機械学習で逆問題を解く
  • MLP (多層パーセプトロン : Multi-layer Perceptron) は、汎用方程式フィッティングのための機械と言われている。

MLP (多層パーセプトロン) について#

多層パーセプトロンの仕組み

今回は、

入力
  • プロング長さ
  • プロング直径
  • プロング間距離
  • ハンドル長さ
  • ハンドル直径
出力
  • 一次固有値 (周波数)

として MLP を学習させました。

MLP を使い逆問題を解く#

  • 多層パーセプトロンを使い、逆問題を解く例として、音叉を取り上げた。
  • 音叉は、プロング部とハンドル部で構成される一定の音を響かせる器具
  • 知りたいのは 固有値 (発音周波数) → 音叉の各種寸法

FrontSTR でモデルを自動解析#

MLP で逆問題 (発音周波数→音叉の各種寸法) を求めるため、多数の教師データが必要となります。

  1. スクリプトでモデルを自動生成する。
  2. 境界条件を設定する。
  3. FrontSTR で固有値計算する。
  4. 計算結果を MLP に読み込ませ、学習させる。
  5. MLP を使い望む周波数を入力し、妥当な音叉の寸法を出力する。

モデルの自動生成#

今回は 1,000 ケースの音叉を作成しました。 (gmsh を用いて 1,000 個自動生成)

...(合計 1,000 ケース)

境界条件の設定#

FrontSTR の NGROUP の機能を用い、Python スクリプトでメッシュから平面を自動探索し、境界条件 (固定) の場所を特定しました。

FrontSTR で固有値計算#

  1. メッシュファイルを作成し、境界条件を設定した msh ファイル
  2. 固有値を求めるための cnt ファイル (固定)
  3. 各種ファイルを指定する全体制御ファイル (固定)


これらを 1,000 ケース用意出来たら、FrontSTR でシミュレーションをして固有値 (1次) を求めます。

  • 材質は S45C 機械構造用炭素鋼
    • ヤング率 :
    • ポアソン比 :
    • 密度 :
  • それを CSV データとして集約する。

参考 1,000ケース (メッシュ作成 2,485秒 固有値計算 3,083秒)

計算結果を MLP に読み込ませ、学習させる#

集約した CSV ファイルを rust の burn で作成したプログラムに読み込ませ、学習させます。

burn は rust 用の機械学習用フレームワークです。

学習時間:60 秒程度

MLP を使い望む周波数を入力 妥当な音叉の寸法を出力#

FrontSTR で検算#

前の推測で出力された寸法のモデルを作成し、Advance/FrontSTR で検算した結果を以下に示します。

※ 可視化は Advance/REVOCAP_PrePost

まとめ#

音叉を題材に MLP で逆問題を解いた
    MLP の学習時間 60 秒程度
    • 学習データ作成 2,400 + 3,000秒 = 1.5時間
    MLP の推論時間 1 秒程度

多数の教師データが必要
    Advance/FrontSTR で固有値解析シミュレーション (寸法 → 周波数) を行い、1,000 ケースのデータを用意することができ、MLP を学習させました。

MLP を用いて
    学習した MLP を使って逆問題 (周波数 → 寸法) を解きました。出力は概ね妥当なものでした。

関連ページ#