Keras上實現AutoEncoder自編碼器
一、自編碼器簡介
無監督特徵學習(Unsupervised Feature Learning)是一種仿人腦的對特徵逐層抽象提取的過程,學習過程中有兩點:一是無監督學習,即對訓練資料不需要進行標籤化標註,這種學習是對資料內容的組織形式的學習,提取的是頻繁出現的特徵;二是逐層抽象,特徵是需要不斷抽象的。
自編碼器(AutoEncoder),即可以使用自身的高階特徵自我編碼,自編碼器其實也是一種神經網路,其輸入和輸出是一致的,藉助了稀疏編碼的思想,目標是使用稀疏的高階特徵重新組合來重構自己。
二、完整程式碼
import numpy as np
np.random.seed(1337) # for reproducibility
from keras.datasets import mnist
from keras.models import Model #泛型模型
from keras.layers import Dense, Input
import matplotlib.pyplot as plt
# X shape (60,000 28x28), y shape (10,000, )
(x_train, _), (x_test, y_test) = mnist.load_data()
# 資料預處理
x_train = x_train.astype('float32') / 255. - 0.5 # minmax_normalized
x_test = x_test.astype('float32') / 255. - 0.5 # minmax_normalized
x_train = x_train.reshape((x_train.shape[0], -1))
x_test = x_test.reshape((x_test.shape[0], -1))
print(x_train.shape)
print(x_test.shape)
# 壓縮特徵維度至2維
encoding_dim = 2
# this is our input placeholder
input_img = Input(shape=(784,))
# 編碼層
encoded = Dense(128, activation='relu')(input_img)
encoded = Dense(64, activation='relu')(encoded)
encoded = Dense(10, activation='relu')(encoded)
encoder_output = Dense(encoding_dim)(encoded)
# 解碼層
decoded = Dense(10, activation='relu')(encoder_output)
decoded = Dense(64, activation='relu')(decoded)
decoded = Dense(128, activation='relu')(decoded)
decoded = Dense(784, activation='tanh')(decoded)
# 構建自編碼模型
autoencoder = Model(inputs=input_img, outputs=decoded)
# 構建編碼模型
encoder = Model(inputs=input_img, outputs=encoder_output)
# compile autoencoder
autoencoder.compile(optimizer='adam', loss='mse')
# training
autoencoder.fit(x_train, x_train, epochs=20, batch_size=256, shuffle=True)
# plotting
encoded_imgs = encoder.predict(x_test)
plt.scatter(encoded_imgs[:, 0], encoded_imgs[:, 1], c=y_test, s=3)
plt.colorbar()
plt.show()
三、程式解讀
自編碼,簡單來說就是把輸入資料進行一個壓縮和解壓縮的過程。原來有很多特徵,壓縮成幾個來代表原來的資料,解壓之後恢復成原來的維度,再和原資料進行比較。它是一種非監督演算法,只需要輸入資料,解壓縮之後的結果與原資料本身進行比較。程式的主要功能是把 datasets.mnist 資料的 28*28=784 維的資料,壓縮成 2 維的資料,然後在一個二維空間中視覺化出分類的效果。
首先,匯入資料並進行資料預處理,本例使用Model模組的Keras的泛化模型來進行模型搭建,便於我們從模型中間匯出資料並進行視覺化。進行模型搭建的時候,注意要進行逐層特徵提取,最終壓縮至2維,解碼的過程要跟編碼過程一致相反。隨後對Autoencoder和encoder分別建模,編譯、訓練。將編碼模型的預測結果通過Matplotlib視覺化出來,就可以看到原資料的二維編碼結果在二維平面上的聚類效果,還是很明顯的。
最後看到視覺化的結果,自編碼模型可以把這幾個數字給區分開來,我們可以用自編碼這個過程來作為一個特徵壓縮的方法,和PCA的功能一樣,效果要比它好一些,因為它是非線性的結構。
相關文章
- TensorFlow上實現AutoEncoder自編碼器
- 利用 TensorFlow 實現卷積自編碼器卷積
- Keras上實現Softmax迴歸模型Keras模型
- 深度學習讀書筆記之AE(自動編碼AutoEncoder)深度學習筆記
- 實操講解:使用Keras中的自動編碼器進行極端罕見事件分類Keras事件
- xheditor編輯器上傳功能實現
- Keras上實現卷積神經網路CNNKeras卷積神經網路CNN
- keras實現MobileNetKeras
- Conditional AutoEncoder的Pytorch完全實現PyTorch
- ant指令碼實現的Android自動編譯指令碼Android編譯
- 預測電影偏好?如何利用自編碼器實現協同過濾方法
- 程式碼線上編譯器(上)- 編輯及編譯編譯
- 自編碼器及其相關模型模型
- 使阿里oss實現前端程式碼自動上傳阿里前端
- 如何在jsp上實現報表編輯器功能?JS
- Gitee Webhook 實現自動拉取程式碼並編譯程式碼GiteeWebHook編譯
- seq2seq通俗理解----編碼器和解碼器(TensorFlow實現)
- .net web core 如何編碼實現檔案上傳功能Web
- seq2seq 的 keras 實現Keras
- 理解深度學習:神經網路的雙胞胎兄弟-自編碼器(上)深度學習神經網路
- 基於Netty實現Redis協議的編碼解碼器NettyRedis協議
- java實現編輯器(一)Java
- 影像壓縮編碼碼matlab實現——行程編碼Matlab行程
- 影像壓縮編碼碼matlab實現——DM編碼Matlab
- tf.keras實現線性迴歸和多層感知器Keras
- 實時程式碼編輯器
- 編輯cron實現自動執行
- 圖自編碼器的起源和應用
- 快速瞭解 變分自編碼器 VAE
- 【Keras篇】---Keras初始,兩種模型構造方法,利用keras實現手寫數字體識別Keras模型構造方法
- 使用 git hook 實現伺服器程式碼自動部署GitHook伺服器
- 影像壓縮編碼碼matlab實現——變換編碼Matlab
- 影像壓縮編碼碼matlab實現——算術編碼Matlab
- 硬解碼播放器上如何實現截GIF功能?播放器
- JS實現檔案自動上傳JS
- Vue(27)vue-codemirror實現線上程式碼編譯器Vue編譯
- Asp.Net Core 使用Monaco Editor 實現程式碼編輯器ASP.NET
- Quill編輯器實現原理初探UI