iT邦幫忙

2024 iThome 鐵人賽

DAY 20
1
AI/ ML & Data

從0開始認識AI系列 第 20

Day20-自動編碼器

  • 分享至 

  • xImage
  •  

Day20-自動編碼器

自動編碼器(Autoencoder)是一種無監督學習的神經網絡模型,用於學習數據的有效編碼表示。它的核心思想是將輸入數據壓縮到低維的隱藏層,然後再從隱藏層重建輸出數據。這篇文章將介紹自動編碼器的基本概念、架構、訓練方法、範例和應用。

1. 自動編碼器的基本概念

自動編碼器由兩個主要部分組成:編碼器(Encoder)和解碼器(Decoder)。編碼器將輸入數據轉換為低維的隱藏表示,解碼器則從隱藏表示重建原始輸入數據。自動編碼器的目標是使重建的輸出與原始輸入盡可能相似。

2. 編碼器架構

自動編碼器的架構可以根據應用和需求有所不同,但典型的結構如下:

  • 輸入層:接受原始數據,如圖像、文本或其他形式的數據。
  • 編碼器:由若干層神經網絡組成,逐步將輸入數據壓縮到低維的隱藏層。每層通常包含線性變換和非線性激活函數。
  • 隱藏層(Bottle-neck Layer):最小維度的特徵表示,包含數據的主要信息。
  • 解碼器:結構與編碼器相似,但順序相反,逐步將隱藏層的表示恢復到與輸入層相同的維度。
  • 輸出層:重建的數據,應與輸入數據相似。

3. 如何進行訓練

自動編碼器的訓練過程涉及以下步驟:

  1. 數據準備:準備和標準化數據,以便輸入自動編碼器。
  2. 模型構建:定義編碼器和解碼器的結構,包括層數、神經元數量和激活函數。
  3. 損失函數:通常使用均方誤差(Mean Squared Error, MSE)作為損失函數,度量重建數據與原始輸入數據之間的差異。
  4. 優化器:選擇適當的優化算法,如隨機梯度下降(SGD)或Adam。
  5. 訓練:使用反向傳播算法最小化損失函數,調整模型參數。

以下是Python程式範例,使用Keras庫來構建和訓練一個簡單的自動編碼器:

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

# 載入和準備數據
from tensorflow.keras.datasets import mnist
(x_train, _), (x_test, _) = mnist.load_data()
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:])))
x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:])))

# 建立自動編碼器模型
input_img = Input(shape=(784,))
encoded = Dense(32, activation='relu')(input_img)
decoded = Dense(784, activation='sigmoid')(encoded)

autoencoder = Model(input_img, decoded)

# 編碼器模型
encoder = Model(input_img, encoded)

# 解碼器模型
encoded_input = Input(shape=(32,))
decoder_layer = autoencoder.layers[-1]
decoder = Model(encoded_input, decoder_layer(encoded_input))

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

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

# 測試編碼器
encoded_imgs = encoder.predict(x_test)
decoded_imgs = decoder.predict(encoded_imgs)

4. 自動編碼器的應用

自動編碼器在各種領域有廣泛的應用,包括:

  • 降維和特徵提取:自動編碼器可以將高維數據壓縮到低維表示,用於資料視覺化或作為後續機器學習模型的輸入。
  • 去噪自動編碼器:通過訓練自動編碼器去除數據中的噪音,實現圖像去噪或信號去噪。
  • 生成模型:變分自動編碼器(Variational Autoencoder, VAE)可以生成類似於訓練數據的新樣本,應用於圖像生成、文本生成等。
  • 圖像重建:在醫學影像中,自動編碼器可以用於重建不完整或低質量的影像。
  • 異常檢測:通過訓練自動編碼器學習正常數據的表示,然後在測試時檢測重建誤差較大的樣本,識別異常數據。

總結來說,自動編碼器是一種強大且靈活的工具,能夠在無監督學習中有效地提取和重建數據特徵,具有廣泛的應用前景。


上一篇
Day19-k-means演算法應用-影像壓縮
下一篇
Day21-生成對抗網路(GAN)的概念與應用
系列文
從0開始認識AI30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言