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 閱讀:128

基于DBN實現情緒檢測(詳解版)

本節首先介紹如何利用堆疊 RBM 創建 DBN,并利用 DBN 檢測情緒。

這里采用了兩種不同的學習模式:首先,使用無監督學習逐一預訓練 RBM,然后用監督學習訓練 MLP 層。

準備工作

使用上一節中創建的 RBM 類,唯一的改動就是訓練后不需要重建圖像。此處堆疊 RBM 將數據一直向前傳遞到 DBN 的最后一層——MLP 層。類中不再使用 reconstruct() 函數,并增加了 rbm_output() 函數:



數據使用 Kaggle 面部表情識別數據,可從地址 https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge 獲得,數據的描述如下:
  • 該數據集由 48×48 像素的面部灰度圖像組成,面部已經過自動調整,大致居中,并在每張圖像中占據大致相同的空間。任務是根據面部表情顯示的情緒將每個人臉分類成七個類別之一(0=生氣,1=厭惡,2=恐懼,3=快樂,4=悲傷,5=驚奇,6=平靜)。
  • train.csv 包含兩列:“情緒”和“像素”,“情緒”列包含從 0 到 6(包括 0 和 6)的數字代碼,代表圖像中的情緒,“像素”列是用引號括起來的字符串,字符串的內容是按行定序的用空格分隔的像素值。test.csv 則只包含“像素”列,任務就是預測情緒列。
  • 訓練集由 28709 個樣本組成,最后的測試集由 3589 個樣本組成,用來評比出比賽的冠軍。
  • 這個數據集由 Pierre-Luc Carrier 和 Aaron Courville 編寫,是一個正在進行的研究項目的一部分,他們慷慨地為研討會組織者提供了數據集的初步版本供本次比賽使用。

完整的數據在 fer2013.csv 文件中,從其中分離出訓練、驗證和測試數據:


 
需要對數據進行預處理,將像素和情緒標簽分開。為此,構建兩個函數,函數 dense_to_one_hot() 為標簽執行獨熱編碼,函數 preprocess_data() 將每個像素分隔成一個數組,利用這兩個函數生成訓練、驗證和測試數據集的輸入特征和標簽:



使用前面代碼中定義的函數獲得訓練所需格式的數據。情緒檢測 DBN 模型的構建原則基本與這篇關于 MNIST 的論文相似:https://www.cs.toronto.edu/~hinton/absps/fastnc.pdf

具體做法

  1. 導入依賴庫 TensorFlow、NumPy 和 Pandas 來讀取 .csv 文件,還需導入 Matplolib:


     
  2. 使用輔助函數 preprocess_data() 獲得訓練、驗證和測試數據:


     
  3. 大致查看一下數據,繪制均值圖像,并輸出訓練、驗證和測試數據集中的圖像數量:


     
    得到結果如下:
  4. 查看訓練樣本中的圖像及其標簽:


     
    效果圖如下:

     
  5. 定義堆疊 RBM 的結構,每層的 RBM 將前一個 RBM 的輸出作為其輸入:


     
    其中包含了三個 RBM:第一個 RBM 帶有 2304(48×48)個輸入和 1500 個隱藏單元,第二個 RBM 帶有 1500 個輸入和 700 個隱藏單元,第三個 RBM 帶有 700 個輸入和 400 個隱藏單元。
  6. 逐層訓練每個 RBM,訓練方法為貪婪訓練。在原論文中,對 MNIST 進行訓練時每個 RBM 的訓練次數是 30,此處增加訓練次數應該能提高網絡的性能:


     
  7. 定義 DBN 類,用三層 RBM 和兩個 MLP 層來構建 DBN,RBM 層的權重是從預訓練的 RBM 中加載的。同時也聲明了 DBN 訓練和預測的方法;網絡利用最小化均方損失函數的方法進行微調:


     
  8. 實例化 DBN 對象并進行訓練,預測測試數據的標簽:

解讀分析

RBM 使用無監督學習來學習出模型的隱藏特征,然后將預訓練的 RBM 與全連接層一起進行微調。

這里的準確度在很大程度上取決于圖像表示。在前面的章節中沒有進行圖像處理,只有縮放比例為 0 到 1 之間的灰度圖像,但是如果按照鏈接http://deeplearning.net/wp-content/uploads/2013/03/dlsvm.pdf中所陳述的增加圖像處理,則精確度會進一步提高。因此在 preprocess_data 函數中將圖像與 100.0/255.0 相乘,并添加如下幾行代碼:


精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

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

底部Logo