1. 程式人生 > 實用技巧 >TensorFlow人工智慧入門教程之十四 自動編碼機AutoEncoder 網路

TensorFlow人工智慧入門教程之十四 自動編碼機AutoEncoder 網路

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

好久沒有更新了,最近 想在空餘時間 之外 ,對以前創業人工智慧平臺進行封裝,想做一個人工智慧頂層框架,我是實戰派,不是理論派,什麼BP FF 什麼 SGD 等等 一大堆優化 optimation 知道偏微分 怎麼最後推導一個完整公式 用程式碼表示出來 過程 不怎麼看得懂很複雜。國外很多科學家真是了不起,所以使用 組合 能夠 理解思想才是最重要的,如果你想成為科學家 ,可以忽略這句話,當然成為科學家的 也不會在做程式設計師。隨意 大家 瞭解思想 怎麼訓練 怎麼使用 就足夠了 ,怎麼研發 一種新的網路 ,交給麻省理工 加州伯克利 斯坦福吧。每天aviar 有很多新的網路被提交,理解構造,就可以直接來初步實現了,但是內部原理 內部數學公式推導,這些 也很難看懂。 建議 讀研究生 或者 計算機博士的 可以去研究研究底層 的網路原理 為什麼可以做到這樣的實現。其實 我講的都是我知道的 怎麼訓練 怎麼做的網路,還有很多有名的網路,3DCNN 3DRCNN 空間感知的卷積神經網路,還有M2M 圖靈機 等等比LSTM BLSTM 好很多的網路 ,但是這些網路 至今 我還不知道怎麼訓練,也沒有資料 格式參考,論文裡面也沒有提到 資料生成 構造的過程。 很遺憾 ,這是非常強大的網路之一 。 我也無能為力。

這一章我來講一下 AutoEncoder 自動編碼機。本來想忽略的 但是不講的 感覺挺遺憾的,

AutoEncoder 的網路結構如下

在淺層 學習 到深度學習 中 ,由於深度學習 W 的 bp 偏微分 過程中,如果w 為0 或者 其他情況導致深度學習 多層網路 overfiting ,而不能很好地保證梯度下降,怎麼初始化多層網路 無數個w 是一個很重要的工作,2006年 深度學習 加拿大多倫多大學 科學家 提出了使用xavier方式 pre-training 預先訓練 方式 逐層初始化 ,但是怎麼保證 每一層 一層訓練中 能得到好的w呢 ,有很多種方式 ,autoEncoder 是其中一種方式,當然現在有很多種方式,麻省理工 還有 斯坦福 也每年發表了一些初始化w的方法,都是一大堆的數學原理 證明,這裡我來講一下 autoEncdoer 自動編碼機, 就是 如果 我們輸入的一大堆的X 如果經過一層w 網路訓練得到的特徵 ,作為輸入 可以 反推得到原來的資料的過程,說明這個 這個網路的w 是比較不錯的w

autoEncdoer 有一個叫做降噪AutoEncoder 常用 它 ,他就是如果 資料有一定的噪音 誤差 也能保證 得到一些好的w 能擬合 真實的資料,

所以 AutoEncoder 是一種很多的初始化w的方式, 所以 顧名思義 就是 編碼 解碼 過程,

也是一種形態特徵 轉換的過程 ,把資料特徵 變成 一種新的特徵 ,這種新的特徵 可以替代原來的特徵 ,所以AutoEncoder 可以用來降維 可以用來無監督演算法 降噪 過濾 特徵轉換,

如果把AutoEncoder 的 kercer函式 使用線性的話 ,其實等同於PCA 主程分析

PCA 如果 使用SVD 奇異值分解 的話 ,其實PCA 本質等同於 使用平面來進行投影 ,

最後剩上 矩陣 有可以轉換回來,所以 這叫做編碼 解碼,

AutoEncoder 用於 有監督裡面 可以用來 資料壓縮 資料降維 過濾 降噪

AutoEncoder用於 無監督演算法 裡面可以用來進行 資料的轉換 資料的自學習

自學習網路

可以通過 AutoEncoder 結合 FF層 來實現,對於通過少量有標籤的資料來 處理無標籤的資料。 當然深度學習 是多層 結合,可以來做到AutoEncoder 來無監督 結合 全連線其它層 來實現監督演算法 。可以自行google

本質就是 一個層wx+b 以及 相應的啟用函式

我表示 Oschina 這個換了個蛋疼的 編輯器 ,換成這樣 都不知道怎麼 貼上程式碼 高亮格式化。

其實 WX+B 然後 得到輸出 作為輸入 然後Wx+b

self.h = tf.nn.tanh(tf.add(tf.matmul(self.x_noisy, self.W), self.b_encode))

self.output = tf.nn.tanh(tf.add(tf.matmul(self.h, tf.transpose(self.W)),b_decode))

self.sess = tf.InteractiveSession()
self.network_architecture = network_architecture
self.learning_rate = learning_rate
self.batch_size = batch_size
# tf Graph input
self.x = tf.placeholder(tf.float32, [None, network_architecture["n_input"]])
self.x_noisy = tf.placeholder(tf.float32, [None, network_architecture["n_input"]])
#self.W = tf.Variable(tf.random_uniform((network_architecture["n_input"], network_architecture["n_hidden"])))
self.W = tf.Variable(xavier_init(network_architecture["n_input"], network_architecture["n_hidden"]))
self.b_encode = tf.Variable(tf.ones([network_architecture["n_hidden"]], dtype=tf.float32))
b_decode = tf.Variable(tf.ones([network_architecture["n_input"]], dtype=tf.float32))
#encode
#activation function - softmax, softplus, or tanh?
self.h = tf.nn.tanh(tf.add(tf.matmul(self.x_noisy, self.W), self.b_encode))
#decode
self.output = tf.nn.tanh(tf.add(tf.matmul(self.h, tf.transpose(self.W)),b_decode))

Oschian 這個編輯器 爛透了,下次 自己來做個部落格。轉移部落格來寫吧。這個怎麼高亮怎麼程式碼 格式化 ?

轉載於:https://my.oschina.net/yilian/blog/687364