Stacked Denoising Autoencode(堆叠降噪自编码) ----学习笔记

  1. Autoencode 自编码
    自编码是一种把输入数据通过编码层和解码层,尽量复制原数据信息的神经网络。编码层主要目的是压缩图片以及提取图片特征,方便用作分类等处理;解码层则是将特征通过与编码层相反的网络结构还原为与原图相近的图片。通过将输入与输出尽可能的相似(不是相等),可以保证提取的图片特征能很好的表示原数据。
    在这里插入图片描述
    如图,数据x通过函数编码层提取特征y,再通过解码层获取还原数据z,通过误差函数不断优化x和z的相似度完成训练。
    在这里插入图片描述
  2. DAE(降噪自编码)
    降噪自编码主要为了防止过拟合,对图片加入噪声处理。加入了噪声后的自编码网络会有更高的鲁棒性。(论文:Extracting and composing robust features with denoising autoencoders)
    如下图,DAE和dropout其实很像,dropout是随机挑选一定比例的神经元使其权重变为0,也就是这个神经元不参与训练,使得网络有更好的鲁棒性。而DAE则是把输入数据x以一定概率把输入点设置为0(也就是黑色),你会发现图片中多出黑点(噪音),得到噪声模型x‘。
    这个数据的优势在于更接近测试数据,鲁棒性更好,用mnist手写数据来举例,黑点多了意味着数字内容(白色)少了。
    在这里插入图片描述
  3. SDAE(堆叠降噪自编码)
    在这里插入图片描述
    最后就是这次学习的堆叠降噪自编码网络,论文:Stacked Denoising Autoencoders: Learning Useful Representations in
    a Deep Network with a Local Denoising Criterion。
    这个网络就是把多个DAE组合在一起的结果,在训练时对输入加入噪音,训练完成就不需要了。
    逐层贪婪训练:每一层的自编码都进行非监督训练,也就是训练第k层,用第k-1层作为输入,再连接一个k-1层的隐藏层作为解码器,最小化输入和重构输出的误差,训练好k层再训练k+1层。
        for i in range(len(self.layers) - 1):
            encoder = Sequential()
            if i == len(self.layers) - 2:
                Dropout(0.5, input_shape=(self.layers[i + 1],))
                encoder.add(Dense(units=self.layers[i + 1], activation='relu', init='glorot_uniform'))
            else:
                Dropout(0.5, input_shape=(self.layers[i + 1],))
                encoder.add(Dense(units=self.layers[i + 1], activation='relu', init='glorot_uniform'))
            decoder = Sequential()
            Dropout(0.2, input_shape=(self.layers[i],))
            decoder.add(Dense(units=self.layers[i], activation='relu', init='glorot_uniform'))
            encoder_input = Input(shape=(self.layers[i],))
            code = encoder(encoder_input)
            reconstruct_code = decoder(code)
            combined = Model(encoder_input, reconstruct_code)
            optimizer = SGD(0.01, 0.9)
            combined.compile(loss='mse', optimizer=optimizer, metrics=['accuracy'])

通常训练后编码层组合在一起都会对结果有很大影响,所以还要再做fine-funting(微调),用带label的数据进行训练。这个等详细学习再做记录。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
堆叠降噪自编码器(Stacked Denoising Autoencoder,SDAE)是一种用于特征学习和降维的神经网络模型。它是在自动编码器的基础上进行改进的,通过在输入层的输入数据中引入噪音来提高模型的鲁棒性和泛化能力[^2]。 以下是一个使用Matlab实现堆叠降噪自编码器的示例代码[^1]: ```matlab % 设置参数 inputSize = 784; % 输入层大小 hiddenSize = 100; % 隐藏层大小 sparsityParam = 0.01; % 稀疏性参数 lambda = 0.0001; % 正则化参数 beta = 3; % 稀疏性惩罚参数 numPatches = 10000; % 训练样本数量 patchSize = 8; % 图像块大小 % 加载训练数据 load('trainData.mat'); % 预处理数据 patches = sampleIMAGES(trainData, patchSize, numPatches); patches = normalizeData(patches); % 初始化模型参数 theta = initializeParameters(hiddenSize, inputSize); % 使用L-BFGS算法进行优化 options.Method = 'lbfgs'; options.maxIter = 400; options.display = 'on'; % 定义优化函数 [optTheta, cost] = minFunc(@(p) sparseAutoencoderCost(p, inputSize, hiddenSize, ... lambda, sparsityParam, beta, patches), theta, options); % 可视化学习到的特征 W1 = reshape(optTheta(1:hiddenSize*inputSize), hiddenSize, inputSize); displayNetwork(W1'); ``` 这段代码实现了一个基于堆叠降噪自编码器的特征学习过程。它首先加载训练数据,然后对数据进行预处理。接下来,初始化模型参数并使用L-BFGS算法进行优化,最后可视化学习到的特征。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值