稀疏自編碼器_自編碼(AutoEncoder)模型及幾種擴展之二

4. 稀疏自編碼

假設我們只有一個沒有類別標簽的訓練樣本集合{x(1),x(2)...},一個自編碼神經網絡就是一種非監督學習算法,它使用BP算法,并將目標值設為: y(i)=x(i)。

c803a56fa26aa81859d5bc2c4e1287d1.png

我們的目標是希望得到hW,b(X)≈x。用aj(2)(x)表示輸入向量x對隱藏層單元j的激活值。則j的平均激活值:

86296efc831c4000071cd39950784751.png

為了達到稀疏性,也即用最少(最稀疏)的隱藏單元來表示輸入層的特征(也即,對每一個輸入X, 其特征表示是稀疏的),我們希望所有隱藏層單元平均激活值接近于0.于是應用KL距離:

ae581b6910d8343cbc3e055fcf9715cd.png

其中為了方便書寫:

be8942a2231c12d2119814b3820b86fc.png

其中,

是稀疏參數,一般來說選一個很小的數,如0.05。

這樣,神經網絡整體代價函數就可以表示為:

158b1dfa41e2a6ea66991bffd7151828.png

,其中J(W,b)是BP自身的損失函數,預測損失+參數L2正則(減小權重的幅度,防止過度擬合)

25474d05e10e915ad91d35d5fd8c63e0.png

這樣,一個稀疏自編碼器就完成了。

代碼:

Sparse自編碼 Autoencoder, 基本按照標準公式實現##### 設置網絡參數 #####
p = 0.05  # 使大部分神經元的激活值(所有神經元的激活值的平均值)接近這個p值
beta = 3  # 控制KL散度所占的比重input_dim = 784
encoding_dim = 64
lambda_val = 0.001  # J(W,b)自帶的對W進行的L2正則,weight decayepochs = 50
batch_size = 1024# 自定義正則項函數, 計算KL散度
def sparse_reg(activity_matrix):activity_matrix = K.softmax(activity_matrix, axis=0)  # 把激活值先用softmax歸一化p_hat = K.mean(activity_matrix, axis=0)  # 將第j個神經元在batch_size個輸入下所有的輸出激活值取平均print('p_hat=', p_hat)KLD = p*(K.log(p/p_hat))+(1-p)*(K.log((1-p)/(1-p_hat)))  # 計算KL散度print('KLD=', KLD)return beta*K.sum(KLD)  # 所有神經元的KL散度相加并乘以betainput_img = Input(shape=(input_dim,))h = Dense(encoding_dim,activation='relu',kernel_regularizer=regularizers.l2(lambda_val/2),activity_regularizer=sparse_reg)(input_img)r = Dense(input_dim, activation='sigmoid',kernel_regularizer=regularizers.l2(lambda_val/2),activity_regularizer=sparse_reg)(h)# sparse AE模型
autoencoder = Model(inputs=input_img, outputs=r)
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
#輸出模型結構
print(autoencoder.summary())# 注意:輸出是干凈的X_train
history = autoencoder.fit(X_train, X_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(X_test, X_test))#編碼過程: 取出編碼部分
conv_encoder = Model(input_img, h)
#在測試集上進行編碼輸出,輸出圖形的編碼形式(64維度)
encoded_imgs = conv_encoder.predict(X_test)n = 10
plt.figure(figsize=(20, 8))
for i in range(n):ax = plt.subplot(1, n, i+1)plt.imshow(encoded_imgs[i].reshape(4, 16).T)plt.gray()ax.get_xaxis().set_visible(False)ax.get_yaxis().set_visible(False)
plt.show()#解碼過程:
#Predict on the test set
decoded_imgs = autoencoder.predict(X_test)

生成的編碼圖像(64維)

變稀疏了嗎?

94de04147b61f345a23a6948ce6c7bff.png

f5002215ebf07866ff7dd4744c8813e2.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534769.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534769.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534769.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux x86 關機 過程,linux在x86上的中斷處理過程(詳細)

Linux在x86上的中斷處理過程一:引言在Intel的文檔中,把中斷分為兩種。一種是異常,也叫同步同斷。一種稱之為中斷,也叫異常中斷。同步中斷指的是由CPU控制單元產生,之所以稱之為同步,是因為只有一條指令執行完畢后才會發出中斷。例如除法運算中,除數為零的時候,就會產…

thymealf 高級用法_Thymeleaf

JSP 已經存在很長時間了,很多公司還在用,它看起來像 HTML,但其實并不是,它有一些缺陷。比如,每個頁面頂部都需要有如下聲明與 Servlet 規范緊密耦合的,依賴 Servlet 容器(意味著無法直接瀏覽效果)。工作過的…

linux 顯卡轉碼,ffmpeg用GPU轉碼

8種機械鍵盤軸體對比本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?有些視頻編碼太屌,播放起來對CPU消耗巨大,而在電視上或者電視盒子上看視頻,編碼就需要合適,樓主用的FireTV Stick&a…

ant實例 jmeter_Jmeter+ant搭建環境

1.將jmeter3.3和ant1.9.6放在一個文件夾下2.配置環境a、安裝jdk,配置環境變量變量名: JAVA_HOME變量值: C:\Program Files\Java\jdk1.8.0_91 (即jdk安裝的位置)變量名: Path (這個變量名已在系統變量中存在,現只需在這…

c語言課程設計作業五子棋,C語言課程設計報告五子棋游戲課程設計

C語言課程設計報告五子棋游戲課程設計 C語言課程設計報告_五子棋游戲-課程設計C語言課程設計報告_五子棋游戲|c語言程序代碼編程小程序設計|c語言課程設計報告課程案例**********************************************************//* 本程序在Turbo C或Borland C下編譯通過 */…

sqlmap圖形化_Web安全:SQL注入工具

原標題:Web安全:SQL注入工具SQL注入工具主要是針對Web服務器后臺數據庫的注入,其主要目的是獲取數據庫中的數據。以前常用的SQL注入工具有啊D注入工具及Domain(明小子注入工具),現在常用的SQL注入工具有HackBar、SQLMap、Pangolin…

在c語言程序中 對文件進行操作首先要,《C語言程序設計》試題八及答案

版權聲明:以上文章中所選用的圖片及文字來源于網絡以及用戶投稿,由于未聯系到知識產權人或未發現有關知識產權的登記,如有知識產權人并不愿意我們使用,如果有侵權請立即聯系:55525090qq.com,我們立即下架或…

vue中多行文本標簽_vue控制多行文字展開收起的實現示例

這里講一下,如何使用vue控制多行文字展開收起(也叫控制文字展開隱藏)。效果:這里設置了控制三行,如果超過三行會展示,“顯示更多” 超出文字顯示省略號。點擊“顯示更多”會展開所有文案,按鈕變成“收起”(未超出三行的…

c語言什么時候需要加分號,歸納一下html中什么時候需要分號什么時候需要冒

公告: 為響應國家凈網行動,部分內容已經刪除,感謝讀者理解。話題:歸納一下html中什么時候需要分號什么時候需要冒號什么時候問題詳情:最近初學html和php,弄暈了回答:一般情況下,HTML…

python wheel使用_【轉載】Python,使用Wheel打包

轉載自: http://blog.sina.com.cn/s/blog_1318255b00102wbtz.htmlPython的第一個主流打包格式是.egg文件,現在大家庭中又有了一個叫做Wheel(*.whl)的新成員。wheel“被設計成包含PEP 376兼容安裝(一種非常接近于磁盤上的格式)的所有文件”。在本文中&…

c語言提取七位數講解,C語言-體育彩票7位數,感受身中500萬的fell

//體育彩票7位數,感受身中500萬的fell#include #include #include #include //用到隨機數函數#include int main(){int iUser[7]; //保存我們購買彩票的號碼int iSys[7];//保存開獎的號碼int i, j;int count 0;//保存我們中獎號碼的個數//srand((unsigned)time(0…

cuda linux編譯器_linux下如何編譯CUDA+QT(qtcreator下)

具體操作,修改qt項目配置文件pro,在配置后面加入如下代碼,我們就實現了qtcuda的交叉編譯。# 讓你的項目可以看到后綴cu的cuda代碼文件OTHER_FILES ./Bll/ImageReconstruction/Cuda/CudaFDK.cu \./Bll/ImageReconstruction/Cuda/CudaFDK_ker…

linux的sonar安裝,Linux安裝sonar

前置依賴? mysql 5.6 or 5.7? jdk 1.81.下載2.安裝unzip并解壓sonarqube并移動到/usr/localyum install unzipunzip sonarqube-6.7.4.zipmv sonarqube-6.7.4 /usr/local/3.mysql里新增數據庫CREATE DATABASE sonar DEFAULT CHARACTER SET utf8;4.修改sonarqube相應的配置vim …

redis內存淘汰和持久化_redis 持久化

一、RDB持久化(一)、RDB介紹可以在指定的時間間隔內生成數據集的 時間點快照(point-in-time snapshot),新快照會覆蓋老快照(二)、優點壓縮格式,恢復速度快,適合于用做備份…

android實現后臺靜默安裝,Android 靜默安裝實現方法

Android靜默安裝的方法,靜默安裝就是繞過安裝程序時的提示窗口,直接在后臺安裝。注意:靜默安裝的前提是設備有ROOT權限。代碼如下:/*** 靜默安裝* param file* return*/public boolean slientInstall(File file) {boolean result …

pythonwrite連續寫入_python文件寫入write()的操作

本文實例為大家分享了python文件寫入write()的操作的具體代碼,供大家參考,具體內容如下filename pragramming.txtwith open(filename,w) as fileobject: #使用‘w來提醒python用寫入的方式打開fileobject.write(i love your name!\ni love your cloth!\…

最新變態傳奇android,新開變態傳奇單職業

新開變態傳奇單職業這款傳奇手游中擁有這極為豐富的游戲玩法,玩家既可以進入各種副本中,挑戰那些強大的副本boss,也可以和自己的兄弟好友們一起組隊,前往各種跨服戰場,和全服的高手玩家們一起進行最激烈的戰斗。游戲中…

spark sql讀取hive底層_[大數據]spark sql讀寫Hive數據不一致

在大數據公司中,任何一家公司都不會只使用一個框架吧?!skr,skr~~那我們今天就來聊一段 Hive 與 Spark的愛恨情仇就像在一些場景中,需要將外部的數據導入到Hive表中,然后再對這些數據進行額外的處理&#xf…

android手機微信收藏功能實現,Android模仿微信收藏文件的標簽處理功能

最近需要用到微信的標簽功能(如下圖所示)。該功能可以添加已有標簽,也可以自定義標簽。也可以刪除已編輯菜單。研究了一番。發現還是挺有意思的,模擬實現相關功能。該功能使用類似FlowLayout的功能。Flowlayout為一個開源軟件(https://github.com/ApmeM/…

strocli64 源碼_storcli 簡易使用介紹

MegaCli 是LSI公司官方提供的SCSI卡管理工具,由于LSI被收購變成了現在的Broadcom,所以現在想下載MegaCli,需要去Broadcom官網查找Legacy產品支持,搜索MegaRAID即可。關于MegaCli 的使用可以看我的另一篇博文,這里就不再…