深度自編碼器:從特徵提取到異常檢測

深度學習在計算機視覺和自然語言處理等領域廣泛應用。而深度自編碼器(Deep Autoencoder,DAE)是深度學習中最常用的模型。它不僅可以提取數據中的高級特徵,還可以用於異常檢測、數據降維等場景。本文將從多個方面介紹深度自編碼器。

一、深度自編碼器異常檢測

異常檢測是一項重要任務,應用於金融、安全等領域。深度自編碼器作為一種無監督學習模型,在異常檢測領域得到了廣泛應用。

深度自編碼器異常檢測(Deep Autoencoder for Anomaly Detection, DAE-AD)的核心思想是使用重建誤差檢測異常。即將一個正常的數據集作為訓練數據,用深度自編碼器學習特徵。之後,在測試數據集上對重建誤差進行計算。如果重建誤差較大,就可以判定為異常。

下面是一個基於MNIST數據集的DAE-AD的代碼實例:


import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model

# 構建深度自編碼器模型
input_layer = Input(shape=(784,))
encoded = Dense(64, activation='relu')(input_layer)
decoded = Dense(784, activation='sigmoid')(encoded)
autoencoder = Model(input_layer, decoded)

# 編譯模型
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')

# 加載MNIST數據集
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
x_train = x_train.reshape(-1, 784)
x_test = x_test.reshape(-1, 784)
x_train = x_train / 255.0
x_test = x_test / 255.0

# 訓練模型
autoencoder.fit(x_train, x_train, epochs=10, batch_size=256, shuffle=True, validation_data=(x_test, x_test))

# 計算測試數據集上的重建誤差
decoded_imgs = autoencoder.predict(x_test)
mse = np.mean(np.power(x_test - decoded_imgs, 2), axis=1)

二、深度自動編碼器

深度自動編碼器是深度自編碼器的一種變形。它可以通過無監督學習的方式從無標籤數據中學習到更豐富的特徵表示,並且可以用於諸如圖像生成和轉換等任務。

深度自動編碼器(Deep Convolutional Autoencoder)是使用卷積層替代全連接層的深度自編碼器。使用卷積層可以大大減少參數數量,同時更好地處理圖像等數據。下面是一個基於CIFAR-10數據集的深度自動編碼器的代碼實例:


import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, UpSampling2D
from tensorflow.keras.models import Model

# 構建深度自動編碼器模型
input_layer = Input(shape=(32, 32, 3))
encoded = Conv2D(32, (3, 3), activation='relu', padding='same')(input_layer)
encoded = MaxPooling2D((2, 2), padding='same')(encoded)
encoded = Conv2D(16, (3, 3), activation='relu', padding='same')(encoded)
encoded = MaxPooling2D((2, 2), padding='same')(encoded)
encoded = Conv2D(8, (3, 3), activation='relu', padding='same')(encoded)
code_layer = MaxPooling2D((2, 2), padding='same')(encoded)
decoded = Conv2D(8, (3, 3), activation='relu', padding='same')(code_layer)
decoded = UpSampling2D((2, 2))(decoded)
decoded = Conv2D(16, (3, 3), activation='relu', padding='same')(decoded)
decoded = UpSampling2D((2, 2))(decoded)
decoded = Conv2D(32, (3, 3), activation='relu', padding='same')(decoded)
decoded = UpSampling2D((2, 2))(decoded)
decoded = Conv2D(3, (3, 3), activation='sigmoid', padding='same')(decoded)
autoencoder = Model(input_layer, decoded)

# 編譯模型
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')

# 加載CIFAR-10數據集
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.cifar10.load_data()
x_train = x_train / 255.0
x_test = x_test / 255.0

# 訓練模型
autoencoder.fit(x_train, x_train, epochs=50, batch_size=128, shuffle=True, validation_data=(x_test, x_test))

三、深度自編碼器DAE

深度自編碼器(Deep Autoencoder,DAE)是最常用的深度學習模型之一。它通過無監督學習的方式從無標籤數據中學習到更豐富的特徵表示。相比於其他深度學習模型,DAE能夠更好地提取噪聲和變形後的信息。

DAE是由多個編碼器和解碼器層組成的模型,其中編碼器將輸入數據轉換為低維的表示形式,而解碼器將這個低維表示重新轉換為輸入。下面是一個基於Fashion MNIST數據集的DAE的代碼實例:


import tensorflow as tf
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model

# 構建深度自編碼器模型
input_layer = Input(shape=(784,))
encoded = Dense(128, activation='relu')(input_layer)
encoded = Dense(64, activation='relu')(encoded)
code_layer = Dense(32, activation='relu')(encoded)
decoded = Dense(64, activation='relu')(code_layer)
decoded = Dense(128, activation='relu')(decoded)
decoded = Dense(784, activation='sigmoid')(decoded)
autoencoder = Model(input_layer, decoded)

# 編譯模型
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')

# 加載Fashion MNIST數據集
(x_train, _), (x_test, _) = tf.keras.datasets.fashion_mnist.load_data()
x_train = x_train.reshape(-1, 784)
x_test = x_test.reshape(-1, 784)
x_train = x_train / 255.0
x_test = x_test / 255.0

# 訓練模型
autoencoder.fit(x_train, x_train, epochs=20, batch_size=256, shuffle=True, validation_data=(x_test, x_test))

四、深度自編碼器的優點

深度自編碼器具有以下優點:

  1. 更好的特徵提取能力。使用深度自編碼器可以從原始數據中提取更加抽象化的特徵,這種特徵通常是傳統特徵提取方法無法獲取的。
  2. 更低的維度。深度自編碼器可以將高維數據降維,這使得數據存儲和處理變得更加高效。
  3. 無監督學習。深度自編碼器可以通過無監督學習的方式自動從數據中學習到特徵表示,這大大降低了模型訓練的成本。

五、深度自編碼器提取像素級特徵

深度自編碼器可以用於提取像素級特徵,這對於圖像分類,物體檢測等任務非常重要。下面是一個基於CIFAR-10數據集的DAE的代碼實例:


import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import Input, Dense, Conv2D, MaxPooling2D, UpSampling2D
from tensorflow.keras.models import Model

# 構建深度自編碼器模型
input_layer = Input(shape=(32, 32, 3))
encoded = Conv2D(32, (3, 3), activation='relu', padding='same')(input_layer)
encoded = MaxPooling2D((2, 2), padding='same')(encoded)
encoded = Conv2D(16, (3, 3), activation='relu', padding='same')(encoded)
code_layer = MaxPooling2D((2, 2), padding='same')(encoded)
decoded = Conv2D(16, (3, 3), activation='relu', padding='same')(code_layer)
decoded = UpSampling2D((2, 2))(decoded)
decoded = Conv2D(32, (3, 3), activation='relu', padding='same')(decoded)
decoded = UpSampling2D((2, 2))(decoded)
decoded = Conv2D(3, (3, 3), activation='sigmoid', padding='same')(decoded)
autoencoder = Model(input_layer, decoded)

# 編譯模型
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')

# 加載CIFAR-10數據集
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.cifar10.load_data()
x_train = x_train / 255.0
x_test = x_test / 255.0

# 訓練模型
autoencoder.fit(x_train, x_train, epochs=50, batch_size=128, shuffle=True, validation_data=(x_test, x_test))

# 提取圖像特徵
feature_extractor = Model(inputs=autoencoder.input, outputs=autoencoder.layers[3].output)
features = feature_extractor.predict(x_test)

六、基於深度自編碼器的異常心跳檢測

基於深度自編碼器的異常心跳檢測是利用深度自編碼器對正常心電圖信號進行編碼,然後再將異常心電圖信號輸入到已經訓練好的深度自編碼器中重建,並計算重建誤差。重建誤差越大,則說明該心電圖信號越異常。

下面是基於MIT-BIH Arrhythmia數據集的異常心跳檢測的代碼實例:


import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model

# 加載數據集
df = pd.read_csv('mitbih_train.csv', header=None)
X = df.values[:, :-1]
y = df.values[:, -1]

# 構建深度自編碼器模型
input_layer = Input(shape=(X.shape[1],))
encoded = Dense(64, activation='relu')(input_layer)
code_layer = Dense(32, activation='relu')(encoded)
decoded = Dense(64, activation='relu')(code_layer)
decoded = Dense(X.shape[1], activation='sigmoid')(decoded)
autoencoder = Model(input_layer, decoded)

# 編譯模型
autoencoder.compile(optimizer='adam', loss='mse')

# 訓練模型
autoencoder.fit(X, X, epochs=50, batch_size=256)

# 計算測試數據集上的重建誤差
df = pd.read_csv('mitbih_test.csv', header=None)
X_test = df.values[:, :-1]
y_test = df.values[:, -1]
y_pred = autoencoder.predict(X_test)
mse = np.mean(np.power(X_test - y_pred, 2), axis=1)

# 統計異常心跳個數
threshold = np.mean(mse) + np.std(mse)
y_pred = [1 if e > threshold else 0 for e in mse]
sum([1 for i, j in zip(y_test, y_pred) if i != j])

七、深度學習編碼器

深度學習編碼器(Deep Neural Network Encoder)是一種無監督的學習算法。它使用深度神經網絡來將輸入數據壓縮為低維的潛在空間向量。深度學習編碼器可以用於降維,圖像檢

原創文章,作者:YXQF,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/141986.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YXQF的頭像YXQF
上一篇 2024-10-10 08:46
下一篇 2024-10-10 08:46

相關推薦

  • Python如何判斷質數和異常處理

    本文主要介紹Python如何判斷質數和異常處理,其中包括多個方面的內容。 一、判斷質數 1、定義:質數是指除了1和它本身兩個因數外,沒有其他的因數。 2、判斷方法: (1)從2到n…

    編程 2025-04-29
  • 光模塊異常,SFP未認證(entityphysicalindex=6743835)——解決方案和

    如果您遇到類似optical module exception, sfp is not certified. (entityphysicalindex=6743835)的問題,那麼…

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • 深度查詢宴會的文化起源

    深度查詢宴會,是指通過對一種文化或主題的深度挖掘和探究,為參與者提供一次全方位的、深度體驗式的文化品嘗和交流活動。本文將從多個方面探討深度查詢宴會的文化起源。 一、宴會文化的起源 …

    編程 2025-04-29
  • ROS線程發佈消息異常解決方法

    針對ROS線程發佈消息異常問題,我們可以從以下幾個方面進行分析和解決。 一、檢查ROS代碼是否正確 首先,我們需要檢查ROS代碼是否正確。可能會出現的問題包括: 是否正確初始化RO…

    編程 2025-04-28
  • Python下載深度解析

    Python作為一種強大的編程語言,在各種應用場景中都得到了廣泛的應用。Python的安裝和下載是使用Python的第一步,對這個過程的深入了解和掌握能夠為使用Python提供更加…

    編程 2025-04-28
  • 加菲貓是什麼品種?解析加菲貓的品種特徵

    如果你對貓咪很感興趣,一定會聽說過加菲貓這個名字。那麼,加菲貓是什麼品種呢?加菲貓的特徵又有哪些呢?下面我們就來一一解答。 一、加菲貓的品種歷史 加菲貓是由艾爾達·埃爾斯曼女士於1…

    編程 2025-04-27
  • Python遞歸深度用法介紹

    Python中的遞歸函數是一個函數調用自身的過程。在進行遞歸調用時,程序需要為每個函數調用開闢一定的內存空間,這就是遞歸深度的概念。本文將從多個方面對Python遞歸深度進行詳細闡…

    編程 2025-04-27
  • Python捕獲異常後重新執行的方法

    本文將從捕獲異常的基本概念入手,介紹Python中如何捕獲異常後重新執行代碼的方法,旨在幫助讀者更好地理解Python異常處理機制。 一、異常處理機制基礎 在Python中,異常處…

    編程 2025-04-27
  • Python OOM異常的原因和解決方法

    Out of Memory(OOM)異常是 Python 程序在內存不足或不足以分配新的對象時,拋出的異常之一。Python 應用程序通常會因為內存瓶頸而崩潰或降低性能,但這並不是…

    編程 2025-04-27

發表回復

登錄後才能評論