MATLAB实现自编码器(一)——Autoencoder类和训练设置

自编码器基本原理

自编码器(Autoencoder,AE)是一类在半监督学习和非监督学习中使用的人工神经网络,其功能是通过将输入信息作为学习目标,对输入信息进行表征学习(representation learning)。本文主要对MATLAB2020实现堆栈自编码器的相关知识进行整理。

Autoencoder类

MATLAB提供了Autoencoder class,对2020版网页的简要翻译如下:
Description描述
一个自动编码器对象包含一个自动编码器网络,该网络由一个编码器和一个解码器组成。 编码器将输入映射到隐藏的表示形式。 解码器尝试将此表示映射回原始输入。
Construction结构
autoenc = trainAutoencoder(X) 返回使用X中的训练数据进行训练的自动编码器。
autoenc = trainAutoencoder(X,hiddenSize) 返回一个自动编码器,其隐藏表示大小为hiddenSize。
autoenc = trainAutoencoder(___,Name,Value) 返回上述任何输入参数的自动编码器,并带有一个或多个名称-值对参数指定的附加选项。比如可以指定稀疏比例或训练迭代的最大次数。
Input Arguments输入参数
X — 训练数据,数据类型:matrix | cell array of image data,数据类型:single | double | cell
训练数据,指定为训练样本矩阵或图像数据的单元格数组。 如果X是矩阵,则每一列都包含一个样本。 如果X是图像数据的单元格数组,则每个单元格中的数据必须具有相同的维数。 图像数据可以是用于灰度图像的像素强度数据,在这种情况下,每个单元都包含一个m×n矩阵。 替代地,图像数据可以是RGB数据,在这种情况下,每个单元包含一个m×n×3矩阵。

hiddenSize —自动编码器的隐藏表示形式的大小,要求为正整数值,默认为10。数据类型:single | double
自动编码器的隐藏表示形式的大小,指定为正整数值,表示隐藏层中神经元的数量。

More About中还介绍了相关的计算公式和原理,

Name-Value Pair Arguments名称-值对参数

trainAutoencoder网页中还介绍了自编码器训练设置的名称-值对参数,具体情况如下:

'EncoderTransferFunction' — Transfer function for the encoder
'logsig' (default) | 'satlin'

以上表示编码器的传递函数,指定为以逗号分隔的一对,由“ EncoderTransferFunction”和以下项之一组成,分别是logistic函数(默认)和正饱和线性传递函数,见下图。
图1

'DecoderTransferFunction' — Transfer function for the decoder
'logsig' (default) | 'satlin' | 'purelin'

以上表示解码器的传递函数,指定为以逗号分隔的一对,由“ DecoderTransferFunction”和以下项之一组成,分别是logistic函数(默认)、正饱和线性传递函数以及线性传递函数,见下图。
图2

'MaxEpochs' — Maximum number of training epochs
1000 (default) | positive integer value

MaxEpochs表示训练轮次或迭代的最大数量,指定为以逗号分隔的一对,其中包括“MaxEpochs”和一个正整数,默认为1000,具体数值需要自己摸索。

'LossFunction' — Loss function to use for training
'msesparse' (default)

LossFunction表示训练过程中的损失函数,指定为由“LossFunction”和“msesparse”组成的逗号分隔对。 它对应于为训练稀疏自动编码器而调整的均方误差函数,如下图所示:
图3
其中λ是L2正则项的系数,β是稀疏正则项的系数。分别使用L2WeightRegularization和SparsityRegularization名称-值对参数来指定λ和β的值。

'L2WeightRegularization' — The coefficient for the L2 weight regularizer
0.001 (default) | a positive scalar value

损失函数中L2权重调整器的系数λ,指定为以逗号分隔的对,由“L2WeightRegularization”和正标量值组成,默认为0.001。

'SparsityRegularization' — Coefficient that controls the impact of the sparsity regularizer
1 (default) | a positive scalar value

控制稀疏正则器对成本函数的影响的系数β,指定为由“ SparsityRegularization”和正标量值组成的逗号分隔对。

'SparsityProportion' — Desired proportion of training examples a neuron reacts to
0.05 (default) | positive scalar value in the range from 0 to 1

期望比例的神经元反应的训练示例,指定为由“ SparsityProportion”和正标量值组成的逗号分隔对。 稀疏比例是稀疏正则化器的参数。 它控制隐藏层输出的稀疏性。 较低的SparsityProportion值通常会为少量训练示例提供高输出,从而导致隐藏层中的每个神经元“专业化”。 因此,稀疏比例低会鼓励较高的稀疏度。 请参阅稀疏自动编码器。
默认为0.05,相当于说,在训练过程中,隐藏层中的每个神经元的平均输出应为0.1。

'ShowProgressWindow' — Indicator to show the training window
true (default) | false

显示训练窗口的指示器,指定为以逗号分隔的一对,由“ ShowProgressWindow”和true或false组成。

'TrainingAlgorithm' — The algorithm to use for training the autoencoder
'trainscg' (default)

TrainingAlgorithm表示用于训练自编码器的算法,指定为由“TrainingAlgorithm”和“trainscg”组成的逗号分隔对,代表比例共轭梯度下降[1]。

'ScaleData' — Indicator to rescale the input data
true (default) | false

ScaleData用于重新缩放输入数据的指示器,指定为以逗号分隔的对,由“ ScaleData”和true或false组成。自编码器尝试在其输出处复制其输入。为了使其成为可能,输入数据的范围必须与解码器的传递函数的范围匹配。trainAutoencoder在训练自编码器时会自动将训练数据缩放到此范围。如果在训练自编码器时缩放数据,则预测方法,编码方法和解码方法也会缩放数据。

'UseGPU' — Indicator to use GPU for training
false (default) | true

经过训练的自编码器,作为自编码器对象返回。有关此对象的属性和方法的信息,请参见Autoencoder class页面。

参考文献

[1].Moller, M. F. “A Scaled Conjugate Gradient Algorithm for Fast Supervised Learning”, Neural Networks, Vol. 6, 1993, pp. 525–533.

笔者的其他博客,欢迎大家阅读学习,共同进步
傻瓜攻略(一)——MATLAB主成分分析代码及结果分析实例

MATLAB中plotconfusion函数的应用

傻瓜攻略(二)——MATLAB数据挖掘之Apriori算法实现

win10系统中通过conda命令安装tensorflow(cpu版本,不用pip)

  • 10
    点赞
  • 130
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
卷积码是在信息序列通过有限状态移位寄存器的过程中产生的。通常,移存器包含N级(每级A比特),并对应有基于生成多项式的m个线性代数方程,输入数据每次以A位(比特)移入移位寄存器,在此同时有n位(比特)数据作为己编码序列输出,编码效率为A/n。参数N被称作约束长度,它指明了当前的输出数据与多少输入数据有关。它决定了编码的复杂度。 译码器的功能就是,运用一种可以将错误的发生减小到最低程度的规则或方法,从已编码的码字中解出原始信息。在信息序列和码序列之间有一对一的关系。此外,任何信息序列和码序列将与网格图中的唯一一条路径相联系。因而,卷积译码器的工作就是找到网格图中的这一条路径。 Viterbi算法可被描述如下; 把在时刻i,状态 所对应的网格图节点记作 ,每个网相节点被分配一个值 。节点值按如下方式计算: (1)设 , 。 (2)在时刻i,对于进入每个节点的所有路径计算其不完全路径的长度。 (3)令 为在i时刻,到达与状态 。相对应的节点 的最小不完全路径长度。通过在前一节点随机选择一条路径就可产生新的结果。非存留支胳将从网格图中删除。以这种方式,可以从 。处生成一组最小路径。 (4)当L表示输入编码段的数目,其中每段为k比特,m为编码器中的最大穆存器的长度,如果 ,那么令 ,返回第二步。 一旦计算出所有节点值,则从 时刻,状态 。开始,沿网格图中的存留支路反向追寻即可。这样被定义的支路与解码输出将是一一对应的。关于不完全路径长度,硬判决解码将采用Hamming距离,而软判决解码将采用Euclidean距离。
自解编码器(Autoencoder)是一种神经网络模型,它可以用于无监督学习和特征提取。在自解编码器中,我们会将输入数据编码成一个低维向量,然后再将这个低维向量解码成原始的输入数据。通过这样的方式,我们可以学习到数据的压缩表示,并且可以用这个压缩表示来进行特征提取和降维处理。 下面我们来介绍如何在MATLAB实现自解编码器。首先,我们需要准备数据集。这里我们使用MNIST手写数字数据集作为例子。 ```matlab % 加载MNIST数据集 [XTrain,~,~,YTrain] = digitTrain4DArrayData; XTrain = reshape(XTrain,28*28,[]); ``` 接下来,我们可以定义自解编码器的网络结构。这里我们使用一个全连接的神经网络作为编码器和解码器,其中编码器的输出层是一个低维的向量,解码器的输入层是编码器的输出层。具体代码如下: ```matlab % 定义自解编码器的网络结构 hiddenSize = 64; autoenc = trainAutoencoder(XTrain,hiddenSize,'MaxEpochs',200); ``` 在定义好网络结构后,我们可以使用trainAutoencoder函数来训练自解编码器。这里我们使用200个epoch来训练模型。 训练完成后,我们可以使用encode函数来获取编码器的输出。具体代码如下: ```matlab % 获取编码器的输出 XEncoded = encode(autoenc,XTrain); ``` 我们还可以使用decode函数来获取解码器的输出。具体代码如下: ```matlab % 获取解码器的输出 XDecoded = decode(autoenc,XEncoded); ``` 最后,我们可以将编码器和解码器组合成一个完整的自解编码器,并且使用reconstruct函数来重构输入数据。具体代码如下: ```matlab % 组合自解编码器 autoencFull = stack(autoenc,decoder); % 重构输入数据 XReconstructed = reconstruct(autoencFull,XTrain); ``` 这样,我们就成功地实现了一个自解编码器,并且可以使用它来进行数据的压缩和特征提取。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值