1. 程式人生 > >自動編碼器(Autoencoder)keras實現---轉載

自動編碼器(Autoencoder)keras實現---轉載

1. 單隱含層自編碼器

建立一個全連線的編碼器和解碼器。也可以單獨使用編碼器和解碼器,在此使用Keras的函式式模型API即Model可以靈活地構建自編碼器。

50個epoch後,看起來我們的自編碼器優化的不錯了,損失val_loss: 0.1037。

  1. from keras.layers import Input, Dense  
  2. from keras.models import Model  
  3. from keras.datasets import mnist  
  4. import numpy as np  
  5. import matplotlib.pyplot as plt  
  6. (x_train, _), (x_test, _) = mnist.load_data()  
  7. x_train = x_train.astype('float32') / 255.
  8. x_test = x_test.astype('float32') / 255.
  9. x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:])))  
  10. x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:])))  
  11. print(x_train.shape)  
  12. print
    (x_test.shape)  
  13. encoding_dim = 32
  14. input_img = Input(shape=(784,))  
  15. encoded = Dense(encoding_dim, activation='relu')(input_img)  
  16. decoded = Dense(784, activation='sigmoid')(encoded)  
  17. autoencoder = Model(inputs=input_img, outputs=decoded)  
  18. encoder = Model(inputs=input_img, outputs=encoded)  
  19. encoded_input = Input(shape=(encoding_dim,))  
  20. decoder_layer = autoencoder.layers[-1]  
  21. decoder = Model(inputs=encoded_input, outputs=decoder_layer(encoded_input))  
  22. autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')  
  23. autoencoder.fit(x_train, x_train, epochs=50, batch_size=256,   
  24.                 shuffle=True, validation_data=(x_test, x_test))  
  25. encoded_imgs = encoder.predict(x_test)  
  26. decoded_imgs = decoder.predict(encoded_imgs)  
  27. n = 10# how many digits we will display
  28. plt.figure(figsize=(204))  
  29. for i in range(n):  
  30.     ax = plt.subplot(2, n, i + 1)  
  31.     plt.imshow(x_test[i].reshape(2828))  
  32.     plt.gray()  
  33.     ax.get_xaxis().set_visible(False)  
  34.     ax.get_yaxis().set_visible(False)  
  35.     ax = plt.subplot(2, n, i + 1 + n)  
  36.     plt.imshow(decoded_imgs[i].reshape(2828))  
  37.     plt.gray()  
  38.     ax.get_xaxis().set_visible(False)  
  39.     ax.get_yaxis().set_visible(False)  
  40. plt.show()  


2. 稀疏自編碼器、深層自編碼器

為碼字加上稀疏性約束。如果我們對隱層單元施加稀疏性約束的話,會得到更為緊湊的表達,只有一小部分神經元會被啟用。在Keras中,我們可以通過新增一個activity_regularizer達到對某層啟用值進行約束的目的。

encoded = Dense(encoding_dim, activation='relu',activity_regularizer=regularizers.activity_l1(10e-5))(input_img)

把多個自編碼器疊起來即加深自編碼器的深度,50個epoch後,損失val_loss:0.0926,比1個隱含層的自編碼器要好一些。

  1. import numpy as np    
  2. np.random.seed(1337)  # for reproducibility  
  3. from keras.datasets import mnist    
  4. from keras.models import Model #泛型模型  
  5. from keras.layers import Dense, Input    
  6. import matplotlib.pyplot as plt    
  7. # X shape (60,000 28x28), y shape (10,000, )  
  8. (x_train, _), (x_test, y_test) = mnist.load_data()    
  9. # 資料預處理  
  10. x_train = x_train.astype('float32') / 255.# minmax_normalized  
  11. x_test = x_test.astype('float32') / 255.# minmax_normalized  
  12. x_train = x_train.reshape((x_train.shape[0], -1))    
  13. x_test = x_test.reshape((x_test.shape[0], -1))    
  14. print(x_train.shape)    
  15. print(x_test.shape)    
  16. # 壓縮特徵維度至2維  
  17. encoding_dim = 2
  18. # this is our input placeholder  
  19. input_img = Input(shape=(784,))    
  20. # 編碼層  
  21. encoded = Dense(128, activation='relu')(input_img)    
  22. encoded = Dense(64, activation='relu')(encoded)    
  23. encoded = Dense(10, activation='relu')(encoded)    
  24. encoder_output = Dense(encoding_dim)(encoded)    
  25. # 解碼層  
  26. decoded = Dense(10, activation='relu')(encoder_output)    
  27. decoded = Dense(64, activation='relu')(decoded)    
  28. decoded = Dense(128, activation='relu')(decoded)    
  29. decoded = Dense(784, activation='tanh')(decoded)    
  30. # 構建自編碼模型  
  31. autoencoder = Model(inputs=input_img, outputs=decoded)    
  32. # 構建編碼模型  
  33. encoder = Model(inputs=input_img, outputs=encoder_output)    
  34. # compile autoencoder  
  35. autoencoder.compile(optimizer='adam', loss='mse')    
  36. autoencoder.summary()  
  37. encoder.summary()  
  38. # training  
  39. autoencoder.fit(x_train, x_train, epochs=10, batch_size=256, shuffle=True)    
  40. # plotting  
  41. encoded_imgs = encoder.predict(x_test)    
  42. plt.scatter(encoded_imgs[:, 0], encoded_imgs[:, 1], c=y_test,s=3)    
  43. plt.colorbar()    
  44. plt.show()    
  45. decoded_imgs = autoencoder.predict(x_test)  
  46. # use Matplotlib (don't ask)
  47. import matplotlib.pyplot as plt  
  48. n = 10# how many digits we will display
  49. plt.figure(figsize=(204))  
  50. for i in range(n):  
  51. 相關推薦

    自動編碼Autoencoderkeras實現---轉載

    1. 單隱含層自編碼器 建立一個全連線的編碼器和解碼器。也可以單獨使用編碼器和解碼器,在此使用Keras的函式式模型API即Model可以靈活地構建自編碼器。 50個epoch後,看起來我們的自編碼器優化的不錯了,損失val_loss: 0.1037。 from ke

    編碼AutoEncoder入門及TensorFlow實現

    自編碼器(Autoencoder,AE),是一種利用反向傳播演算法使得輸出值等於輸入值的神經網路,它先將輸入壓縮成潛在空間表徵,然後通過這種表徵來重構輸出。自編碼器由兩部分組成:編碼器(encoder):這部分能將輸入壓縮成潛在空間表徵,可以用編碼函式h=f(x)表示。解碼器

    深度學習:什麼是自編碼Autoencoder

    Autoencoderautoencoder是一種無監督的學習演算法,主要用於資料的降維或者特徵的抽取,在深度學習中,autoencoder可用於在訓練階段開始前,確定權重矩陣WW的初始值。神經網路中的權重矩陣WW可看作是對輸入的資料進行特徵轉換,即先將資料編碼為另一種形式,

    自動編碼(Autoencoder)、降噪自動編碼Denoising Autoencoder詳解

    在瞭解降噪自動編碼器之前,我們先了解一下自動編碼器。 自動編碼器(Autoencoder): 自動編碼器和PCA等方法都屬於降維方法。PCA降維方法有著一定侷限性,主要是隻對線性可分的資料降維效果較好。這種情況下,人們希望提出一種新的簡單的、自動的、可以對非線性可分資料進行的特徵提取方法

    降噪自動編碼Denoising Autoencoder)

    起源:PCA、特徵提取.... 隨著一些奇怪的高維資料出現,比如影象、語音,傳統的統計學-機器學習方法遇到了前所未有的挑戰。 資料維度過高,資料單調,噪聲分佈廣,傳統方法的“數值遊戲”很難奏效。資料探勘?已然挖不出有用的東西。 為了解決高維度的問題,出現的線性學習的PCA降維方法,PCA的數學理論確實無

    自動編碼Auto Encoder

    1.初識Auto Encoder 1986 年Rumelhart 提出自動編碼器的概念,並將其用於高維複雜資料處理,促進了神經網路的發展。自編碼神經網路是一種無監督學習演算法,它使用了反向傳播演算法,

    Android視音頻編碼2——cameraYUV、AudioRecordPCM分別編碼後muxer成mp4

    效率 androi mar 視音頻 pop 采集 con 文章 cpu 參考下面這篇文章: http://blog.csdn.net/a992036795/article/details/54286654 一、前言 上一篇文章我講到,我用libx264對視頻

    從零上手變分自編碼VAE

    閱讀更多,歡迎關注公眾號:論文收割機(paper_reader) Kingma D P, Welling M. Auto-encoding variational bayes[J]. arXiv preprint arXiv:1312.6114, 2013. Rez

    深度學習筆記:稀疏自編碼1——神經元與神經網路

      筆者在很久以前就已經學習過UFLDL深度學習教程中的稀疏自編碼器,近期需要用到的時候發現有些遺忘,溫習了一遍之後決定在這裡做一下筆記,本文不是對神經元與神經網路的介紹,而是筆者學習之後做的歸納和整理,打算分為幾篇記錄。詳細教程請見UFLDL教程,看完教程之後

    棧式自動編碼(Stacked AutoEncoder)

    起源:自動編碼器 單自動編碼器,充其量也就是個強化補丁版PCA,只用一次好不過癮。 仿照stacked RBM構成的DBN,提出Stacked AutoEncoder,為非監督學習在深度網路的應用又添了猛將。 這裡就不得不提  “逐層初始化”(Layer-wise Pre-training),目的是

    基於stm32 Systick 的簡單定時裸機-- 陣列實現

    前言   在嵌入式的開發中,經常需要執行定時的操作。 聰明的同學肯定會想到, 我可以配置硬體定時器, 然後利用定時器中斷來執行需要定時執行的程式碼。然而硬體定時器的數量總是有限,不一定可以滿足我們定時的需求。因此我們常常需要用到軟體定時的方法。   事實上,

    Deep Learning深度學習學習筆記整理系列之AutoEncoder自動編碼

    轉處:http://blog.csdn.net/zouxy09/article/details/8775524 Deep Learning(深度學習)學習筆記整理系列 作者:Zouxy version 1.0 2013-04-08 宣告: 1)該Deep

    Recursive Autoencoders遞迴自動編碼

    1. 前言 今天主要介紹用在NLP中比較常見的AutoEncoder的模型,Recursive Autoencoders(遞迴自動編碼模型)。這篇文章主要討論RAE在序列化的資料中,如何把資料降維並且用向量表示。 2. 矩陣表示 假設我們有一個矩陣\(L\)的表示向量,一個有序的有\(m\)個元素的序列

    DenoisingAutoencoder影象去噪自動編碼

    本文主要介紹使用TensorFlow實現DenoisingAutoencoder(影象去噪自動編碼器)。 下面是示例程式碼: # 匯入相關模組 import numpy as np import sys import tensorflow as tf import matplotlib.

    keras自動編碼實現系列之卷積自動編碼

    圖片的自動編碼很容易就想到用卷積神經網路做為編碼-解碼器。在實際的操作中, 也經常使用卷積自動編碼器去解決影象編碼問題,而且非常有效。 下面通過**keras**完成簡單的卷積自動編碼。 編碼器有堆疊的卷積層和池化層 (max pooling用於

    基於深度神經網路的高光譜影響分類方法研究---MNF+自動編碼+Softmax 準確率比較低,17年的論文

    論文地址基於深度神經網路的高光譜影響分類方法研究裝備學院學報遙感影像分類的問題:預處理複雜,高維特徵提取困難,分類不夠精確等缺陷首先採用最大噪聲分數來降低特徵空間維度,然後將自動編碼器與softmax多

    16、【李巨集毅機器學習2017】Unsupervised Learning: Deep Auto-encoder無監督學習:深度自動編碼

    本篇部落格將介紹無監督學習演算法中的 Deep Auto-encoder。 目錄 Deep Auto-encoder 輸入28*28維度的影象畫素,由NN encoder輸出code,code的維度往往小於784,但我們並不知道code的

    Android實現音樂播放

    simple ani call ket 打開文件 界面 方式 .cn 點擊 Graphical User Interface 本篇文章記錄了我實現Android簡單音樂播放器的過程,(一)中介紹了怎麽構建音樂播放器的前端頁面。首先大家看一下,界面最後是這樣的(界面有

    Linux時間子系統之六:高精度定時HRTIMER的原理和實現

    3.4 size 屬於 running return repr 而是 復雜度 ctu 上一篇文章,我介紹了傳統的低分辨率定時器的實現原理。而隨著內核的不斷演進,大牛們已經對這種低分辨率定時器的精度不再滿足,而且,硬件也在不斷地發展,系統中的定時器硬件的精度也越來越高,這也給

    echarts中視覺映射visualMap與時間軸timeline混用的實現方法

    images mon label axis poi max 時間軸 asc clas 1、簡述  echarts中的 timeline 組件,提供了在多個 ECharts option 間進行切換、播放等操作的功能。  與其他組件些不同,它需要操作『多個option』。 所