MATLAB图自编码器
通過MATLAB來實(shí)現(xiàn)圖自編碼器,用于高光譜圖像特征的提取。
文章目錄
- 前言
- 一、MATLAB相關(guān)知識(shí)
- 二、編寫算法
- 1.圖自編碼器搭建
- 2.可視化相關(guān)參數(shù)
- 總結(jié)
前言
算法輸入數(shù)據(jù):
- 圖節(jié)點(diǎn)屬性矩陣;
- 鄰接矩陣;
- 概率p;
W為自編碼器的隱藏表示,即訓(xùn)練參數(shù)矩陣,Z為輸入數(shù)據(jù)的重構(gòu)表示。
算法偽代碼:
一、MATLAB相關(guān)知識(shí)
1.1 創(chuàng)建單位矩陣IN_NN? = eye(5,5),主對(duì)角線元素為1;
I = eye(5,5)1.2 計(jì)算圖的度矩陣D
采用sum函數(shù),可以按行求和也可以按列求和;
- sum(A,1):對(duì)矩陣A按照列求和;
- sum(A,2):對(duì)矩陣A按照行求和;
1.3 對(duì)稱歸一化拉普拉斯矩陣 L = I - D?1/2^{- 1 / 2}?1/2AD?1/2^{- 1 / 2}?1/2
- 點(diǎn)乘(.*):兩矩陣對(duì)應(yīng)位置的元素相乘;
- 矩陣乘法(*) : 遵循矩陣運(yùn)算法則;
- 矩陣乘以一個(gè)數(shù)值時(shí),兩種乘法不區(qū)分,效果一樣;
1.3 矩陣元素指數(shù)運(yùn)算
% 對(duì)矩陣S的每個(gè)元素進(jìn)行指數(shù)運(yùn)算,即相同矩陣的點(diǎn)乘 S^21.4 計(jì)算矩陣的特征向量和特征值
采用eig()函數(shù)計(jì)算矩陣的特征向量和特征值;
- x矩陣為特征向量矩陣,每一列為一個(gè)特征向量;
- y矩陣主對(duì)角線元素為特征值;
采用diag()函數(shù)獲取對(duì)角線元素。
diag(y)1.5 MATLAB函數(shù)定義
定義一個(gè)函數(shù),以下是簡(jiǎn)單的規(guī)則:
- 函數(shù)代碼塊以 function關(guān)鍵詞開頭,后接輸出變量和函數(shù)標(biāo)識(shí)符名稱和圓括號(hào) ()。
- 任何傳入?yún)?shù)和自變量必須放在圓括號(hào)中間,圓括號(hào)之間可以用于定義參數(shù)。
- 函數(shù)的第一行語句可以選擇性地使用文檔字符串—用于存放函數(shù)說明。
- 函數(shù)內(nèi)容以end結(jié)束。
函數(shù)需要定義在腳本文件(*.m)中運(yùn)行,不可以在命令窗口中臨時(shí)創(chuàng)建。
有多個(gè)返回值時(shí),默認(rèn)返回第一個(gè)值,若想獲取其他值,可以使用 ~過濾不需要的值;
function output = AddFunc(a,b)output = a + b; end二、編寫算法
1.圖自編碼器搭建
使用MATLAB內(nèi)置的函數(shù)搭建一個(gè)自編碼器。
1.1 matlab 對(duì)數(shù)據(jù)集的默認(rèn)按列存儲(chǔ),因此數(shù)據(jù)的存儲(chǔ)方式為X∈Rd×N^{d×N}d×N ,其中d為特征向量的長(zhǎng)度,x為樣本數(shù)量;
1.2 可以采用 trainAutoencoder() 函數(shù)或者 train_autoencoder() 來搭建自編碼器。
- 通過trainAutoencoder()函數(shù)來搭建自編碼器,通過predict()函數(shù)來預(yù)測(cè),對(duì)于自編碼器來說就是重構(gòu)X;
1.3 對(duì)于高光譜圖像,對(duì)數(shù)據(jù)進(jìn)行預(yù)處理;
load('SalinasA_gt.mat') load('SalinasA_corrected.mat') [width,height,band] = size(salinasA_corrected); X = reshape(salinasA_corrected,width * height ,band); X_ = X'; plot(X(1,:)); hold on; plot(X_(:,1)); hold off;1.4 trainAutoencoder函數(shù)相關(guān)參數(shù)設(shè)置
-
第一個(gè)參數(shù) X:訓(xùn)練數(shù)據(jù);
-
第二個(gè)參數(shù) size:隱含層神經(jīng)元數(shù)量;
-
鍵值對(duì)參數(shù)
- ”EncoderTransferFunction” :“l(fā)ogsig”,為編碼器傳遞函數(shù);
- “MaxEpochs” : 100,最大訓(xùn)練次數(shù);
- “LossFunction” :“msesparse”,為均方差損失函數(shù) (默認(rèn))
- “ShowProgressWindow” : false, 顯示訓(xùn)練窗口,默認(rèn)為顯示;
-
輸出為一個(gè)編碼器模型;
參數(shù)設(shè)置:https://www.mathworks.com/help/deeplearning/ref/trainautoencoder.html
1.5 采用drtoolbox工具箱中的函數(shù)train_autoencoder來訓(xùn)練一個(gè)簡(jiǎn)單的自編碼器,用于數(shù)據(jù)降維。drtoolbox是一個(gè)用于數(shù)據(jù)降維的工具箱,包含很多數(shù)據(jù)降維的方法。
drtoolbox:https://blog.csdn.net/uncle_ll/article/details/60465797
train_autoencoder函數(shù)介紹:
[network, mappedX, reconX] = train_autoencoder(X, layers, noise, max_iter)
- X:輸入數(shù)據(jù),每行為一個(gè)樣本,每列為一個(gè)特征;
- layers:降維后特征數(shù);
- noise:噪聲,默認(rèn)為0;
- mat_iter:迭代次數(shù);
輸出參數(shù):
- network:包含降維的權(quán)重矩陣和重構(gòu)的矩陣;
- mappedX:降維后的數(shù)據(jù);
- reconX:重構(gòu)的X;
2.可視化相關(guān)參數(shù)
2.1 可視化矩陣可以使用 imagesc() 函數(shù);
總結(jié)
搭建的自編碼都是一層隱藏層的簡(jiǎn)單神經(jīng)網(wǎng)絡(luò),主要是學(xué)習(xí)使用相關(guān)函數(shù)的用法以及涉及到的相關(guān)的知識(shí)。總結(jié)
以上是生活随笔為你收集整理的MATLAB图自编码器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库高级知识——mysql架构介绍(一
- 下一篇: linux的系统移植——uboot常用命