高周波エンジニアのためのAI・機械学習入門(18)パッチアンテナ設計モジュールをPythonで作ったので、電気的に測定できる入力インピーダンス、共振周波数を与えて指向性(Directivity)をKeras3.0を用いたディープラーニング(DNN)による回帰で予測する。
さて前回はパッチサイズ(W、L)、基板厚みh、共振周波数を与えて基板誘電率が予測できるかやってみた。
今回は電気的に測定できる入力インピーダンスRinと共振周波数f0のみを与えて指向性が予測できるかやってみる。
学習データはいつものようにモンテカルロシミュレーションで作る。
import numpy as np
import patchantenna as pa
#モンテカルロシミュレーションでは基板比誘電率、厚み、中心周波数を乱数で振るが、それの最大最小
ermin = 2.0
ermax = 10.0
hmin = 0.1
hmax = 1.0
f0min = 1
f0max = 10
#モンテカルロシミュレーションでデータ作成して保存する。
#周波数と入力インピーダンスを与えて指向性を予測する。
N = 10000
np.random.seed(1)
data = np.empty((0, 2))
label = np.empty((0, 1))
for i in range(N):
er = ermin + (ermax - ermin) * np.random.rand()
h = hmin + (hmax - hmin) * np.random.rand()
f0 = f0min + (f0max - f0min) * np.random.rand()
ant = pa.PatchAntenna(er, h, f0)
Rin = ant.input_impedance()
direc = ant.directivity()
data = np.vstack((data, np.array([Rin, f0])))
label = np.vstack((label, direc))
#保存
np.savez_compressed("directivity.npz", data=data, label=label)
|
そしてKeras3.0を用いたディープラーニング(DNN)で予測する。
まずデータを読み込み、訓練データとテストデータに分ける。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
import os
os.environ["KERAS_BACKEND"] = "tensorflow"
import keras
data_label = np.load("directivity.npz")
data = data_label["data"]
label = data_label["label"]
x_train, x_test, y_train, y_test = train_test_split(data, label, test_size=0.3, random_state=0)
|
次にモデルを作る。セル数64の3層のモデル。
#正規化
normalizer = keras.layers.Normalization()
normalizer.adapt(x_train)
# Functional APIでDense層を3層にしたDNNを設定
hidden_dim = 64
inputs = keras.Input(shape=(2,))
x = normalizer(inputs)
x = keras.layers.Dense(hidden_dim, activation="relu")(x)
x = keras.layers.Dense(hidden_dim, activation="relu")(x)
x = keras.layers.Dense(hidden_dim, activation="relu")(x)
outputs = keras.layers.Dense(1)(x)
# モデルの設定
model = keras.Model(inputs=inputs, outputs=outputs)
model.compile(loss = 'mean_squared_error' ,optimizer=keras.optimizers.Adam())
|
そして学習させる。
batch_size = 32
epochs = 100
keras.utils.set_random_seed(1)
history = model.fit(
x_train,
y_train,
batch_size=batch_size,
epochs=epochs,
validation_split=0.15,
)
y_pred = model.predict(x_test)
metric = keras.metrics.R2Score()
metric.update_state(y_test, y_pred)
result = metric.result()
print(result)
error = np.abs((y_test - y_pred)/y_test*100)
print(error.mean(axis=0))
|
R2score99.7%となかなかいい結果になった。
では図示して確認してみる。
legend = ["Directivity"]
fig, ax = plt.subplots(1, 2, figsize=(12,6))
maxvalue = y_pred.max()
ax[0].scatter(y_pred, y_test, c="r", s=5)
ax[0].plot([0,maxvalue], [0,maxvalue], "--", c="black")
ax[0].set_xlabel("推定した値", fontname='MS Gothic')
ax[0].set_ylabel("実際の値", fontname='MS Gothic')
ax[0].set_xlim(5, maxvalue)
ax[0].set_ylim(5, maxvalue)
ax[0].grid()
ax[0].legend([legend[0] + f" 平均誤差{error.mean():.2f}%"], prop={"family":"MS Gothic"})
ax[1].hist(error, bins = 100)
ax[1].set_xlabel("誤差[%]", fontname='MS Gothic')
ax[1].set_ylabel("頻度", fontname='MS Gothic')
ax[1].grid()
fig.tight_layout()
plt.show()
|
これだけ合っていれば使えそう。次の題材は伝送線路かな。
« 神座で麻婆麵をいただく。しっかり花椒が効いていて、辛さもありなかなか美味しかった。もちろん白菜もたっぷり。 | トップページ | Interface2025年1月号はMATLABで1ニューロンから手作り 数学&図解でディープ・ラーニング。初歩からAlexNetの転移学習、CNNまで話題が豊富で、なんとMatlab Onlineの半年ライセンスがついてくる。Simulinkや各種toolboxも使える。早速MATLAB入門オンラインコース修了した。 »
「パソコン・インターネット」カテゴリの記事
- ユニクロとAkamaiのコラボTシャツに書かれているコードを解読してみる。base64でデコードするとbashのシェルスクリプトが出てきて実行すると♥PEACE♥FOR♥ALL♥FOR♥ALL♥PEACE♥FOR♥ALL♥という文字が色付きで正弦波で流れた。(2025.05.01)
- Google Gemini 2.5 Pro experimentalに高周波で使われるSパラメータのTouchstoneファイルを読み込んでプロットするC#コードを書いてもらうと570行のコードができて動いた。ファイルの拡張子snpのnでポート数を判別するが人間を信じないのでデータ数えて確認するのに笑った。(2025.04.21)
- Google ColabのJulia言語で搭載されているGeminiを使って一行もコードを書かずに2次元拡散方程式を差分法で計算してGIFアニメにする。次に同じように2次元波動方程式もやってもらう。(2025.04.09)
- Google ColabのJulia言語で主成分分析(PCA)をやってみる。データはおなじみアヤメ(iris)で、標準で特異値分解(SVD)が入っているのですぐできた。(2025.04.08)
- Google ColabのJulia言語でマンデルブロ集合、仏様のようなブッダブロ、燃える船・バーニングシップフラクタルを描いてみる。どれも計算が速い。(2025.04.04)
「学問・資格」カテゴリの記事
- 「数学がゲームを動かす! ゲームデザインから人工知能まで」を読んだ。面白い!パックマンのアルゴリズムやドラクエの計算式、ドンキーコングはベルレ法でジャンプ、カルマンフィルタ、遺伝的アルゴリズム、セガの線形代数本を書かれた方は理論物理出身など話題が豊富。(2025.05.13)
- 高周波・RFニュース 2025年5月12日 IEEE Microwave Magazineでミリ波ガラス基板・超伝導・液晶などの記事、Pythonの高周波ライブラリscikit-rfがv1.7.0に、Megamagneticsの希土類を使わないミリ波サーキュレータ、CoilcraftのRFインダクタホワイトペーパー(2025.05.12)
- 高周波・RFニュース 2025年5月9日 QorvoがスマートファクトリーにUWB利用の解説、KYOCERA AVXがUHF,VHF向け高方向性カプラ発表、Wireless Broadband Allianceが企業向けWi-Fi 7トライアル結果報告、NXPが第三世代イメージングレーダプロセッサ発表(2025.05.09)
- 高周波・RFニュース 2025年5月8日 6Gにはテラヘルツどころか7-14GHzも向いてないという意見、フィンランド企業が6G推進コンソーシアムRF ECO3発表、Infineonが7P7T内蔵7ch-LNA発表、SpirentがOctoboxにWi-Fi 6/7自動テスト追加(2025.05.08)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2025年5月12日 IEEE Microwave Magazineでミリ波ガラス基板・超伝導・液晶などの記事、Pythonの高周波ライブラリscikit-rfがv1.7.0に、Megamagneticsの希土類を使わないミリ波サーキュレータ、CoilcraftのRFインダクタホワイトペーパー(2025.05.12)
- 高周波・RFニュース 2025年5月9日 QorvoがスマートファクトリーにUWB利用の解説、KYOCERA AVXがUHF,VHF向け高方向性カプラ発表、Wireless Broadband Allianceが企業向けWi-Fi 7トライアル結果報告、NXPが第三世代イメージングレーダプロセッサ発表(2025.05.09)
- 高周波・RFニュース 2025年5月8日 6Gにはテラヘルツどころか7-14GHzも向いてないという意見、フィンランド企業が6G推進コンソーシアムRF ECO3発表、Infineonが7P7T内蔵7ch-LNA発表、SpirentがOctoboxにWi-Fi 6/7自動テスト追加(2025.05.08)
- 高周波・RFニュース 2025年5月2日 everythingRFが6GのeBook発行、FCCが37GHz帯の共用規則策定、Spirentが5Gクラウドネイティブについてレポート、ローデ・シュワルツが高速差動伝送の測定について解説、Qualcommが2025Q2の決算発表(2025.05.02)
« 神座で麻婆麵をいただく。しっかり花椒が効いていて、辛さもありなかなか美味しかった。もちろん白菜もたっぷり。 | トップページ | Interface2025年1月号はMATLABで1ニューロンから手作り 数学&図解でディープ・ラーニング。初歩からAlexNetの転移学習、CNNまで話題が豊富で、なんとMatlab Onlineの半年ライセンスがついてくる。Simulinkや各種toolboxも使える。早速MATLAB入門オンラインコース修了した。 »
コメント