« RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/5/17-5/24 | トップページ | 高周波・RFニュース 2026年5月26日 iFixitがTrump Phoneは中身HTC U24 Proと推定、QorvoがIMS2026でRFソリューション出展、CyntecがPCIMでパワーインダクタ等を出展、RCRTechが防衛通信に関するレポート発行など »

2026年5月25日 (月)

高周波エンジニアのためのAI・機械学習入門(GPU編25)異常検知として、良品のみで学習して不良品を見つけるオートエンコーダー(Deep Autoencoder)をPythonとKerasでバンドパスフィルタを題材にやってみる。

Interface誌を読んでいると、オートエンコーダを使うと良品だけで学習して異常検知できることを知った。

さらにKerasブログで詳しく書いてくれている。

https://blog.keras.io/building-autoencoders-in-keras.html

そこでバンドパスフィルタを題材にしてみよう。

事例はこのとき使ったもの。

高周波エンジニアのためのAI・機械学習入門(GPU編12)教師あり学習でバンドパスフィルタ(BPF)の中心周波数ずれのG/NG判定をPythonとKeras 3.0を使って畳み込みニューラルネットワーク(CNN)で行う。

使うデータはこんな感じになる。

G_ngdnn01_20260504171401

ではオートエンコーダーを書いてみよう。

コードはこんな感じで。


import os
os.environ["KERAS_BACKEND"] = "jax"
import keras
import numpy as np
import matplotlib.pyplot as plt
from jax import config
config.update("jax_enable_x64", False)
plt.rcParams['font.family'] = 'Noto Sans CJK JP'

data_label = np.load("G_NG.npz")
data = data_label["data"]
label = data_label["label"]

# GとNGを分割
g_data = data[label[:, 0] == 1]
ng_data = data[label[:, 0] == 0]

# Deep Autoencoder
inputs = keras.Input(shape=(200, 5))
x = keras.layers.Flatten()(inputs)
encoded = keras.layers.Dense(256, activation='relu')(x)
encoded = keras.layers.Dense(128, activation='relu')(encoded)
encoded = keras.layers.Dense(64, activation='relu')(encoded)
encoded = keras.layers.Dense(32, activation='relu')(encoded)

decoded = keras.layers.Dense(64, activation='relu')(encoded)
decoded = keras.layers.Dense(128, activation='relu')(decoded)
decoded = keras.layers.Dense(256, activation='relu')(decoded)
decoded = keras.layers.Dense(200 * 5, activation='linear')(decoded)
outputs = keras.layers.Reshape((200, 5))(decoded)

model = keras.Model(inputs=inputs, outputs=outputs)
model.compile(loss = 'mean_squared_error' ,optimizer=keras.optimizers.Adam())

# 学習
epochs = 1000
keras.utils.set_random_seed(1)
history = model.fit(
    g_data, g_data,
    batch_size=128,
    epochs=epochs,
    validation_split=0.15,
    verbose=1
)

# 予測
g_pred = model.predict(g_data)
ng_pred = model.predict(ng_data)

# MSEの計算
loss = keras.losses.MeanSquaredError(reduction = "none")

# GとNGのMSEを計算
ng_accuracy = loss(ng_data, ng_pred).mean(axis=1)
g_accuracy = loss(g_data, g_pred).mean(axis=1)[:ng_accuracy.shape[0]]

# MSEの分布の可視化
plt.figure(figsize=(10, 6))
plt.hist(np.log10(ng_accuracy), bins=50, alpha=0.5, label="NG")
plt.hist(np.log10(g_accuracy), bins=50, alpha=0.5, label="G")
plt.legend()
plt.xlabel("log10(MSE)")
plt.ylabel("Frequency")
plt.title("Distribution of MSE for G and NG")
plt.show()

良品のみで学習して、不良品を予測した時の誤差を指標にする。ヒストグラムをプロットしたものがこちら。

Autoencoder1

ちょっと重なっている部分があるが、なるほど結構分離されている。使えるかもしれない。

次は畳み込みオートエンコーダをやってみよう。

 

« RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/5/17-5/24 | トップページ | 高周波・RFニュース 2026年5月26日 iFixitがTrump Phoneは中身HTC U24 Proと推定、QorvoがIMS2026でRFソリューション出展、CyntecがPCIMでパワーインダクタ等を出展、RCRTechが防衛通信に関するレポート発行など »

パソコン・インターネット」カテゴリの記事

学問・資格」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« RF Weekly Digest (Gemini 3.1 Pro・Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ)2026/5/17-5/24 | トップページ | 高周波・RFニュース 2026年5月26日 iFixitがTrump Phoneは中身HTC U24 Proと推定、QorvoがIMS2026でRFソリューション出展、CyntecがPCIMでパワーインダクタ等を出展、RCRTechが防衛通信に関するレポート発行など »

最近の記事

2026年6月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        

最近のコメント

無料ブログはココログ
フォト