C語言中文網 目錄
TensorFlow
1 TensorFlow是什么
2 TensorFlow安裝和下載
3 第一個TensorFlow程序
4 TensorFlow程序結構
5 TensorFlow常量、變量和占位符
6 TensorFlow矩陣基本操作
7 TensorFlow TensorBoard數據流圖可視化
8 TensorFlow代碼自動升級為1.0版本
9 TensorFlow XLA
10 TensorFlow指定CPU和GPU設備
11 TensorFlow與深度學習
12 TensorFlow常用Python擴展包
13 回歸算法有哪些
14 TensorFlow損失函數
15 TensorFlow優化器
16 TensorFlow csv文件讀取數據
17 TensorFlow實現簡單線性回歸
18 TensorFlow實現多元線性回歸
19 TensorFlow邏輯回歸處理MNIST數據集
20 感知機與神經網絡
21 TensorFlow常用激活函數(6種)
22 TensorFlow實現單層感知機
23 TensorFlow實現反向傳播算法
24 TensorFlow多層感知機實現MINIST分類
25 TensorFlow多層感知機函數逼近
26 TensorFlow超參數
27 TensorFlow Keras
28 CNN卷積神經網絡
29 三維卷積神經網絡預測MNIST數字
30 卷積神經網絡分類圖片
31 遷移學習
32 DeepDream網絡
33 TensorFlow實現文本情感分析
34 VGG網絡濾波器
35 VGGNet、ResNet、Inception和Xception
36 預建深度學習提取特征及實現
37 TensorFlow實現InceptionV3
38 TensorFlow WaveNet聲音合成
39 TensorFlow視頻分類(6種方法)
40 RNN循環神經網絡
41 神經機器翻譯(seq2seq RNN)
42 注意力機制(基于seq2seq RNN)
43 RNN訓練模型并生成文本
44 RNN循環神經網絡實現預測比特幣價格
45 主成分分析法(PCA)
46 k均值聚類算法
47 SOM自組織映射法
48 受限玻爾茲曼機訓練
49 推薦系統的實現(基于RBM)
50 基于DBN實現情緒檢測
51 自編碼器
52 標準自編碼器
53 稀疏自編碼器
54 去燥自編碼器
55 卷積自編碼器
56 堆疊自編碼器
57 強化學習
58 OpenAI Gym安裝和使用
59 全連接神經網絡實現玩Pac-Man游戲
60 Q learning實現Cart-Pole平衡游戲
61 DQN算法(深度Q網絡)
62 David Silver策略梯度算法
63 深度學習在移動端的應用
64 Android移動端部署TensorFlow mobile
65 iPhone移動端部署TensorFlow mobile
66 移動端優化TensorFlow代碼
67 GAN生成式對抗網絡
68 GAN生成式對抗網絡虛構MNIST圖像
69 DCGAN虛構MNIST圖像
70 DCGAN虛構名人面孔和其他數據集
71 VAE變分自編碼器
72 CapsNet膠囊網絡
73 TensorFlow分布式
74 TensorFlow GPU的安裝和使用
75 TensorFlow分布式
76 TensorFlow分布式訓練MNIST分類器
77 TensorFlow Serving運行Docker容器
78 TensorFlow分布式在谷歌云平臺運行
79 TensorFlow分布式在谷歌CloudML運行
80 TensorFlow分布式在Microsoft Azure上運行
81 TensorFlow分布式在Amazon AWS上運行
首頁 > TensorFlow 閱讀:98

標準自編碼器(TensorFlow實現)詳解

< 上一頁自編碼器 稀疏自編碼器下一頁 >

由 Hinton 提出的標準自動編碼機(標準自編碼器)只有一個隱藏層,隱藏層中神經元的數量少于輸入(和輸出)層中神經元的數量,這會壓縮網絡中的信息,因此可以將隱藏層看作是一個壓縮層,限定保留的信息。

自動編碼機的學習包括在隱藏層上對輸入信號進行壓縮表示,然后在輸出層盡可能地復現原始輸入:


圖 1 單隱藏層的自動編碼機

本節利用自動編碼機進行圖像重構,將利用 MNIST 數據訓練自動編碼機,并使用它來重構測試圖像。

具體做法

  1. 導入所有必要的模塊:


     
  2. TensorFlow 中獲取 MNIST 數據,這里要注意的一點是,標簽并沒有進行獨熱編碼,因為并沒有使用標簽來訓練網絡。自動編碼機是通過無監督學習進行訓練的:


     
  3. 聲明 AutoEncoder 類,使用 init 方法初始化自動編碼機的權重、偏置和占位符,也可以在 init 方法中構建全部的計算圖。還需要定義編碼器、解碼器,set_session(會話建立)和 fit 方法。此處構建的自動編碼機使用簡單的均方誤差作為損失函數,使用 AdamOptimizer 進行優化:


     
    為便于使用,此處還定義了兩個輔助函數,reduced_dimension 給出編碼器網絡的輸出,reconstruct 給出重構的測試圖像的輸出。
  4. 訓練時將輸入數據轉換為 float 型,初始化所有變量并運行會話。在計算時,目前只是測試自動編碼機的重構能力:


     
  5. 繪制誤差在訓練周期中的變化圖,驗證網絡的均方誤差在訓練時是否得到優化,對于一個好的訓練,誤差應該隨著訓練周期的增加而減少:


     
    圖示如下:

     
    可以看到,隨著網絡的學習,損失/成本是下降的,當訓練周期達到 5000 時,幾乎是在一條線上振蕩,這意味著進一步增加訓練周期將不再有用。如果現在還想要改進模型,應該調整學習率、批量大小和優化器等超參數。
  6. 觀察重構的圖像,對比原始圖像和自動編碼機生成的重構圖像:


     
    得到以下結果:

解讀分析

有意思的是,在前面的代碼中,維數從輸入的 784 降到了 256,但是網絡仍然可以重構原始圖像。將自動編碼機性能與 RBM 進行對比,其中隱藏層維數相等:


可以看到,由自動編碼機重構的圖像比 RBM 重構的圖像要清晰得多。原因在于自動編碼機中有更多的權重(從隱藏層到解碼器輸出層的權重)被訓練。自動編碼機學到的細節更多,即使兩者都將信息壓縮到相同的尺寸,其性能也優于 RBM。

知識擴展

像 PCA 一樣,自動編碼機也可以用于降維,但 PCA 只能進行線性變換,而自動編碼機可以使用非線性激活函數,從而在其中引入非線性變換。

下圖是 Hinton 的論文“Reducing the dimensionality of data with Neural Networks”復現的結果,圖 A 顯示 PCA 的結果,圖 B 是由 RBM 堆疊的自動編碼機(每層節點為 784-1000-500-250-2)的結果:


 
正如稍后會看到的,使用堆疊自動編碼機時,每個自動編碼機最初會獨立進行預訓練,然后會對整個網絡進行微調以獲得更好的性能。
< 上一頁自編碼器 稀疏自編碼器下一頁 >

精美而實用的網站,提供C語言、C++、STL、Linux、Shell、Java、Go語言等教程,以及socket、GCC、vi、Swing、設計模式、JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo