一、异常检测问题背景
工业传感器故障会导致错误的控制决策,造成产品质量问题或设备损坏。Autoencoder能自动学习正常模式,检测异常数据。
二、Autoencoder原理
输入 → Encoder(压缩) → 潜在空间 → Decoder(重建) → 输出训练目标:重建误差最小化正常数据 → 低误差异常数据 → 高误差
三、数据收集
# 正常工况数据采集from opcua import Clientimport pandas as pdclient = Client('opc.tcp://192.168.1.100:4840')client.connect()# 采集温度、压力、振动等正常数据
四、模型构建
import tensorflow as tfclass Autoencoder(tf.keras.Model): def __init__(self): super().__init__() self.encoder = tf.keras.Sequential([ tf.keras.layers.Dense(32, activation='relu'), tf.keras.layers.Dense(16, activation='relu'), tf.keras.layers.Dense(8), # 潜在空间 ]) self.decoder = tf.keras.Sequential([ tf.keras.layers.Dense(16, activation='relu'), tf.keras.layers.Dense(32, activation='relu'), tf.keras.layers.Dense(3), ]) def call(self, x): encoded = self.encoder(x) decoded = self.decoder(encoded) return decodedmodel = Autoencoder()
五、训练与阈值设置
# 只用正常数据训练model.compile(optimizer='adam', loss='mse')model.fit(normal_data, normal_data, epochs=100)# 计算正常数据的重建误差阈值threshold = np.percentile(errors, 99)
六、在线检测
# 实时异常检测def detect_anomaly(new_data): reconstruction = model.predict(new_data) error = np.mean((new_data - reconstruction)**2) return error > threshold, error
关注【一路福利】,获取Autoencoder异常检测完整代码!