« 高周波・RFニュース 2026年5月29日 Qorvoが5G向け広帯域高アイソレーションスイッチ発表、BroadcomとSamsungが協業で5GとWi-Fi 8のFWAプラットホーム発表、アンリツが4ch対応のパワーメータ発表、u-bloxがNordicと協業でEdge ML対応モジュール発表など | トップページ | 特別展 北野天神@京都国立博物館を観てきた。国宝の北野天神縁起絵巻(承久本)がすごかった。その他の複数バージョンも展示で話を覚える(耳から蛇、口から柘榴で火とか)。菅原道真が怨霊から学問の神様になった経緯もわかる。源氏の重刀(髭切、膝丸)は写真OKでした。 »

2026年5月29日 (金)

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

前回はDNN系のオートエンコーダをやってみた。今回はCNN系のをやってみよう。

コードはこちら。


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"].reshape(-1,200,5,1)
label = data_label["label"]

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

# Convolutional Autoencoder
inputs = keras.Input(shape=(200, 5, 1))
x = keras.layers.Conv2D(64, kernel_size=(10, 2), activation="relu", padding="same")(inputs)
x = keras.layers.Conv2D(32, kernel_size=(10, 2), activation="relu", padding="same")(x)
x = keras.layers.Conv2D(16, kernel_size=(10, 2), activation="relu", padding="same")(x)
x = keras.layers.Conv2D(32, kernel_size=(10, 2), activation="relu", padding="same")(x)
x = keras.layers.Conv2D(64, kernel_size=(10, 2), activation="relu", padding="same")(x)
outputs = keras.layers.Conv2D(1, kernel_size=(10, 2), activation="linear", padding="same")(x)
model = keras.Model(inputs=inputs, outputs=outputs)
model.compile(loss = 'mean_squared_error' ,optimizer=keras.optimizers.Adam())
model.summary()
# 学習
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).mean(axis = 1)
g_accuracy = loss(g_data, g_pred).mean(axis=1).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()

良品で予測したときの誤差と、不良品で予測した時の誤差をヒストグラムにしたものが出てくる。

Cnnautoencoder1

重なっている部分はあるものの、閾値を-6.42とかにすると不良品が検知できそうだ。なるほど。

 

« 高周波・RFニュース 2026年5月29日 Qorvoが5G向け広帯域高アイソレーションスイッチ発表、BroadcomとSamsungが協業で5GとWi-Fi 8のFWAプラットホーム発表、アンリツが4ch対応のパワーメータ発表、u-bloxがNordicと協業でEdge ML対応モジュール発表など | トップページ | 特別展 北野天神@京都国立博物館を観てきた。国宝の北野天神縁起絵巻(承久本)がすごかった。その他の複数バージョンも展示で話を覚える(耳から蛇、口から柘榴で火とか)。菅原道真が怨霊から学問の神様になった経緯もわかる。源氏の重刀(髭切、膝丸)は写真OKでした。 »

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

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

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

コメント

コメントを書く

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

« 高周波・RFニュース 2026年5月29日 Qorvoが5G向け広帯域高アイソレーションスイッチ発表、BroadcomとSamsungが協業で5GとWi-Fi 8のFWAプラットホーム発表、アンリツが4ch対応のパワーメータ発表、u-bloxがNordicと協業でEdge ML対応モジュール発表など | トップページ | 特別展 北野天神@京都国立博物館を観てきた。国宝の北野天神縁起絵巻(承久本)がすごかった。その他の複数バージョンも展示で話を覚える(耳から蛇、口から柘榴で火とか)。菅原道真が怨霊から学問の神様になった経緯もわかる。源氏の重刀(髭切、膝丸)は写真OKでした。 »

最近の記事

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        

最近のコメント

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