MATLAB图自编码器

通过MATLAB来实现图自编码器,用于高光谱图像特征的提取。


前言

算法输入数据:

  • 图节点属性矩阵;
  • 邻接矩阵;
  • 概率p;

W为自编码器的隐藏表示,即训练参数矩阵,Z为输入数据的重构表示。


算法伪代码:
在这里插入图片描述

一、MATLAB相关知识

1.1 创建单位矩阵

I N _N N = eye(5,5),主对角线元素为1;

I = eye(5,5)

1.2 计算图的度矩阵D
采用sum函数,可以按行求和也可以按列求和;

  • sum(A,1):对矩阵A按照列求和;
  • sum(A,2):对矩阵A按照行求和;
N = 5
% A为邻接矩阵
 A = [1,2,3,4,5;2,3,4,5,6;3,4,5,6,7;4,5,6,7,8;5,6,7,8,9]
 % 将A转化为对称矩阵,即邻接矩阵
 I = eye(N,N)
 A(I == 1) = 0
 D = zeros(N,N)
 % D为度矩阵
 D(I == 1) = sum(A)

1.3 对称归一化拉普拉斯矩阵 L = I - D − 1 / 2 ^{- 1 / 2} 1/2AD − 1 / 2 ^{- 1 / 2} 1/2

  • 点乘(.*):两矩阵对应位置的元素相乘;
  • 矩阵乘法(*) : 遵循矩阵运算法则;
  • 矩阵乘以一个数值时,两种乘法不区分,效果一样;

1.3 矩阵元素指数运算

% 对矩阵S的每个元素进行指数运算,即相同矩阵的点乘
S^2

1.4 计算矩阵的特征向量和特征值
采用eig()函数计算矩阵的特征向量和特征值;

[x,y] = eig(A)
  • x矩阵为特征向量矩阵,每一列为一个特征向量;
  • y矩阵主对角线元素为特征值;

采用diag()函数获取对角线元素。

diag(y)

1.5 MATLAB函数定义

定义一个函数,以下是简单的规则:

  • 函数代码块以 function关键词开头,后接输出变量函数标识符名称圆括号 ()
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以end结束

函数需要定义在脚本文件(*.m)中运行,不可以在命令窗口中临时创建。

有多个返回值时,默认返回第一个值,若想获取其他值,可以使用 ~过滤不需要的值;

function output = AddFunc(a,b)
	output = a + b;
end

二、编写算法

1.图自编码器搭建

使用MATLAB内置的函数搭建一个自编码器。

1.1 matlab 对数据集的默认按列存储,因此数据的存储方式为X∈R d × N ^{d×N} d×N ,其中d为特征向量的长度,x为样本数量;

1.2 可以采用 trainAutoencoder() 函数或者 train_autoencoder() 来搭建自编码器。

  • 通过trainAutoencoder()函数来搭建自编码器,通过predict()函数来预测,对于自编码器来说就是重构X;
ae = trainAutoencoder(X);
X_ = predict(ae, X);
% 损失函数
mse_loss = mse(X-X_);

1.3 对于高光谱图像,对数据进行预处理;

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函数相关参数设置

  • 第一个参数 X:训练数据;

  • 第二个参数 size:隐含层神经元数量;

  • 键值对参数

    • ”EncoderTransferFunction” :“logsig”,为编码器传递函数;
    • “MaxEpochs” : 100,最大训练次数;
    • “LossFunction” :“msesparse”,为均方差损失函数 (默认)
    • “ShowProgressWindow” : false, 显示训练窗口,默认为显示;
  • 输出为一个编码器模型;

参数设置:https://www.mathworks.com/help/deeplearning/ref/trainautoencoder.html

1.5 采用drtoolbox工具箱中的函数train_autoencoder来训练一个简单的自编码器,用于数据降维。drtoolbox是一个用于数据降维的工具箱,包含很多数据降维的方法。
drtoolbox:https://blog.csdn.net/uncle_ll/article/details/60465797

train_autoencoder函数介绍:
[network, mappedX, reconX] = train_autoencoder(X, layers, noise, max_iter)

  • X:输入数据,每行为一个样本,每列为一个特征;
  • layers:降维后特征数;
  • noise:噪声,默认为0;
  • mat_iter:迭代次数;

输出参数:

  • network:包含降维的权重矩阵和重构的矩阵;
  • mappedX:降维后的数据;
  • reconX:重构的X;

2.可视化相关参数

2.1 可视化矩阵可以使用 imagesc() 函数;


总结

搭建的自编码都是一层隐藏层的简单神经网络,主要是学习使用相关函数的用法以及涉及到的相关的知识。
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秘境之眼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值