壓縮去噪利器---自編碼器(AutoEncoder)

2021-03-06 阿力阿哩哩

input_size = 784hidden_size = 128code_size = 64x = Input(shape=(input_size,))h = Dense(hidden_size, activation='relu')(x)r = Dense(output_size, activation='sigmoid')(h)
autoencoder = Model(inputs=x, outputs=r)autoencoder.compile(optimizer='adam', loss='mse')

input_size = 784hidden_size = 128code_size = 64
x = Input(shape=(input_size,))hidden_1 = Dense(hidden_size, activation='relu')(x)h = Dense(code_size, activation='relu')(hidden_1)hidden_2 = Dense(hidden_size, activation='relu')(h)r = Dense(input_size, activation='sigmoid')(hidden_2)
autoencoder = Model(inputs=x, outputs=r)autoencoder.compile(optimizer='adam', loss='mse')


其中, fi是模型預測值,yi是實際值,通過計算兩者的均方誤差來衡量模型的有效性。

x = Input(shape=(28, 28,1))
conv1_1 = Conv2D(16, (3, 3), activation='relu', padding='same')(x)pool1 = MaxPooling2D((2, 2), padding='same')(conv1_1)conv1_2 = Conv2D(8, (3, 3), activation='relu', padding='same')(pool1)pool2 = MaxPooling2D((2, 2), padding='same')(conv1_2)conv1_3 = Conv2D(8, (3, 3), activation='relu', padding='same')(pool2)h = MaxPooling2D((2, 2), padding='same')(conv1_3)

conv2_1 = Conv2D(8, (3, 3), activation='relu', padding='same')(h)up1 = UpSampling2D((2, 2))(conv2_1)conv2_2 = Conv2D(8, (3, 3), activation='relu', padding='same')(up1)up2 = UpSampling2D((2, 2))(conv2_2)conv2_3 = Conv2D(16, (3, 3), activation='relu')(up2)up3 = UpSampling2D((2, 2))(conv2_3)r = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(up3)
autoencoder = Model(inputs=x, outputs=r)autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')

UpSampling2D:上採樣層,與MaxPooling2D相對應。


input_size = 784hidden_size = 32output_size = 784
x = Input(shape=(input_size,))h = Dense(hidden_size, activation='relu', activity_regularizer=regularizers.l1(10e-5))(x)r = Dense(output_size, activation='sigmoid')(h)
autoencoder = Model(inputs=x, outputs=r)autoencoder.compile(optimizer='adam', loss='mse')

x = Input(shape=(28, 28, 1))
conv1_1 = Conv2D(32, (3, 3), activation='relu', padding='same')(x)pool1 = MaxPooling2D((2, 2), padding='same')(conv1_1)conv1_2 = Conv2D(32, (3, 3), activation='relu', padding='same')(pool1)h = MaxPooling2D((2, 2), padding='same')(conv1_2)conv2_1 = Conv2D(32, (3, 3), activation='relu',padding='same')(h)up1 = UpSampling2D((2, 2))(conv2_1)conv2_2 = Conv2D(32, (3, 3), activation='relu', padding='same')(up1)up2 = UpSampling2D((2, 2))(conv2_2)
r = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(up2)
autoencoder = Model(inputs=x, outputs=r)autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
epochs = 3batch_size = 128
history = autoencoder.fit(X_train_noisy,                           X_train,  batch_size=batch_size, epochs=epochs, verbose=1,                     validation_data=(X_test_noisy, X_test))

參數

Dense: 全連接層。

CNN2D:2維卷積神經網絡,常用於處理圖像。

Dropout: 以一定概率放棄兩層之間的一些神經元連結,防止過擬合,可以加在網絡層與層之間。

optimizer: 優化器,梯度下降的優化方法

這些都在之前的推文中有所介紹,小夥伴們可以去翻閱一下。

碼前須知---TensorFlow超參數的設置

activation: 激勵函數,『linear』一般用在回歸任務的輸出層,而『softmax』一般用在分類任務的輸出層

        

        validation_split 切分一定比例的訓練集作為驗證集

epochs 與 batch_size:前者是迭代次數,後者是用來更新梯度的批數據的大小,iteration = epochs / batch_size, 也就是完成一個epoch需要跑多少個batch。這這兩個參數可以用控制變量法來調參,控制一個參數,調另外一個,看損失曲線的變化。

小夥伴們可以去keras官網查看更多的參數含義與用途,博主也會在後續的課程中通過實驗的方法將這些參數涉及進來,讓大家的知識點串聯起來。

        

https://github.com/ChileWang0228/DeepLearningTutorial/blob/master/AutoEncoder/AutoEncoder.ipynb

相關焦點

  • 深度學習第51講:自編碼器(AutoEncoder)及其keras實現
    自編碼器     所謂自編碼器(Autoencoder,AE),就是一種利用反向傳播算法使得輸出值等於輸入值的神經網絡,它現將輸入壓縮成潛在空間表徵,然後將這種表徵重構為輸出。所以,從本質上來講,自編碼器是一種數據壓縮算法,其壓縮和解壓縮算法都是通過神經網絡來實現的。自編碼器有如下三個特點:數據相關性。
  • 深度學習筆記 | 第17講:深度生成模型之自編碼器(AutoEncoder)
    從現有情況來看,無監督學習很有可能是一把決定深度學習未來發展方向的鑰匙,在缺乏高質量打標數據的監督機器學習時代,若是能在無監督學習方向上有所突破對於未來深度學習的發展意義重大。從自編碼器到生成對抗網絡,小編將和大家一起來探索深度學習中的無監督學習。
  • 【周末AI課堂】簡單的自編碼器(代碼篇)| 機器學習你會遇到的「坑」
    • 對輸入圖像添加噪聲或者使用梯度正則項的自編碼器,整體作為一個去噪聲的模型。在熟練掌握理論的前提下,自編碼器的具體實踐就會變得非常簡單,去噪自編碼器可以看作收縮自編碼器(CAE)的一種,同時在實踐中會涉及到deconvolution和unpooling等技術,所以在這篇文章中,我們著重解決以下兩個對初學者更為友好的問題:• 如何在keras中構建自編碼器?
  • 跟著李宏毅老師學習 Autoencoder 的各類變體及應用
    Hinton 提出的論文,左上角的圖示想要搜索的圖,而其他的皆為被 autoencoder 認為很像的圖,的確 autoencoder 似乎能夠看到 input data 的精髓,但也有些抓出來的圖片怪怪的 XDD
  • 神經網絡中的幾個重要思想之AutoEncoder
    例如它可以把784像素(28*28)的圖像壓縮成200像素,然後又還原成784像素而不損失圖像的信息。其實不只是圖像,它能壓縮任何類型的數據。 圖1有人可能會問,壓縮了又還原,有什麼用處呢?直接的應用場景有圖像壓縮、圖像降噪、數據降維,還有圖像生成和特徵提取等。
  • 「無監督」Autoencoder系列模型梳理
    此外,Rifai等人通過在Autoencoder目標函數中引入對encoder的輸出關於權值的Jacobian矩陣來約束encoder學到具有抗擾動的抽象特徵,從而提出了Contractive Autoencoder。
  • 極端時序預測LSTM+AutoEncoder
    首先使用這些數據去訓練LSTM Encoder,之後刪除Encoder模塊,並利用它製作特徵生成器,最後再去訓練forecaster模塊中的LSTM 模型做預測任務。基於真實/存在的回歸值和人造向量就可以獲得的未來時刻車輛需求值。Uber的科研人員強調時序數據結構非常重要,因為它可以讓模型發現其中重要的隱藏關係。
  • 春節充電系列:李宏毅2017機器學習課程學習筆記16之無監督學習:自編碼器(autoencoder)
    本文內容涉及機器學習中半監督學習auto-encoder的若干主要問題:Auto-encoder原理,deep auto-encoder,text retrieval,similar image search,auto-encoder for CNN以及Pre-train DNN。
  • 基於TensorFlow理解三大降維技術:PCA、t-SNE 和自編碼器
    你有必要將數據的維度壓縮到儘可能最低,你的限制是要保留大約 80% 的數據,你會怎麼做?3. 你有一個資料庫,其中的數據是耗費了大量時間收集的,而且還時不時有新的(相似類型的)數據加入。你需要降低你已有數據的維度,並且還要給到來的新數據降維,你會選擇什麼方法?這篇文章的目的是希望能幫助你更好地了解降維,以便你能輕鬆應對類似這樣的問題。
  • 教程 | 如何使用TensorFlow和自編碼器模型生成手寫數字
    然後,網絡會使用被編碼的低維數據去嘗試重建輸入,這部分網絡稱之為解碼器。我們可以使用編碼器將數據壓縮為神經網絡可以理解的類型。然而自編碼器很少用做這個目的,因為通常存在比它更為有效的手工編寫的算法(例如 jpg 壓縮)。此外,自編碼器還被經常用來執行降噪任務,它能夠學會如何重建原始圖像。什麼是變分自編碼器?
  • 受壓縮感知啟發,斯坦福 AI 研究院提出新的無監督表示學習框架!
    我們在 AISTATS 2019發表的一篇論文(https://arxiv.org/pdf/1812.10539)中提出了非確定性自編碼器(UAE),把低維投影作為自編碼器的帶噪聲的潛在表示,並通過一個可跟蹤的變分信息最大化目標直接對信號採樣(即編碼)和逐步恢復(即解碼)的過程進行學習。實驗表明,我們在高維數據的統計壓縮感知任務中相較於其他方法的性能平均提高了 32% 。
  • 利用深度學習實現圖像壓縮
    本質上,壓縮就是要找出文件內容的概率分布,將出現概率高的部分用更簡單的形式代替,就可以實現一個壓縮,那麼重複越多的文件,自然可以壓縮地越小,而極端的隨機分布的信息自然很難壓縮。模型框架模型框架的示意圖如下:主要成分包括autoencoder(自編碼器)和概率模型。
  • 小波去噪方法及步驟_小波去噪方法的比較
    由於該信號中含有若干不連續點和奇異點,因此用以下幾種方法對圖1b中疊加了高斯白噪聲的Blocks信號(信噪比為7)進行去噪處理,能夠很清楚地比較出這幾種方法的去噪性能。 雖然用閾值法能取得很好的去噪效果,但在有些情況下,如在信號的不連續鄰域,閾值法去噪會表現出視覺上的非自然信號,如偽吉布斯現象,即不連續點附近的信號會在一個特定的目標水平上下跳變。利用平移不變量法去噪,則可有效地抑制這種現象。其方法是:對含噪聲信號進行n次循環平移,對平移後的信號進行的閾值法去噪處理,然後再對去噪的結果進行平均,這就是所謂的「平移-去噪-平均」的平移不變量小波去噪法。
  • 《有趣君推薦》002—圖片壓縮利器TinyPNG
    圖片壓縮利器TinyPNG今天推薦的工具是「TinyPNG」,這是一款圖片壓縮神器,無需下載軟體,在網頁即可操作。TinyPNG是一個非常不錯的圖片壓縮工具,在保持alpha通道的情況下對PNG的壓縮可以達到1/3之內,而且用肉眼基本上分辨不出壓縮的損失。你的肉眼能發現什麼不同嗎?
  • CMU大學76頁深度學習課程:變分自編碼器(VAE, Variational Autoencoder)
    【導讀】近幾年來,變分自編碼器(VAE,Variational Autoencoder)變得同GAN以銀行,成為生成模型種最流行的方法。
  • 基於深度學習的去噪方法簡介|貝葉斯|高斯|光譜|神經網絡_網易訂閱
    對於普通的自然圖像而言,基於深度學習的方法在降噪方面的效果要比基於數學模型的去噪方法更好,同時也為高光譜遙感影像的去噪問題帶來了啟發。相比於傳統的人工神經網絡(Artificial Neural Network,ANN),深度神經網絡(Deep Neural Networks,DNN)隱藏層至少在2層以上,使其有了更強的抽象特徵提取能力。