Tensorflow基于CNN的AutoEncoder

Tensorflow基于CNN的AutoEncoder

完整代码:https://github.com/SongDark/cnn_autoencoder_mnist

一、概述

AutoEncoder属于无监督学习,由一个编码器Encoder和一个解码器Decoder组成,是一个Encoder-Decoder结构,它学习的目标是还原输入,不需要提供标签。

1.1 AutoEncoder和PCA的关系

AutoEncoder和PCA有点像,PCA是对标准化的输入,用SVD的方式计算一个矩阵 W W W,对输入进行线性变换,AutoEncoder是非线性的。理论上,AutoEncoder的Reconstruct loss会比PCA的更低,因为它非线性,信息丢失会更少。

1.2 AutoEncoder恢复的一定不模糊吗

不一定,根据我的经验,一般的AE恢复出来的图像很糊。De-Noising AutoEncoder能稍微缓解,它在输入加噪,要求Decoder恢复出加噪前的输入,强迫AE具有去噪功能。

1.3 AutoEncoder可以用来做什么

  1. 压缩。图像、词向量等高维流型,压缩成低维。
  2. 预训练。用不带标签的样本,对分类器逐层用AE做预训练,作为分类器的初始参数,然后再fine-tune。

二、数据源

使用Mnist作为训练数据,Mnist的获取可以参考这篇博客:
获取MNIST数据的几种方法


三、Encoder和Decoder结构

Encoder输入图片输出编码,Decoder输入编码输出图片,因此用多层卷积结构实现Encoder,用多层解卷积结构实现Decoder。下面代码实现的结构,支持任意指定编码维度(output_dim)。

class CNN_Encoder(BasicBlock):
    def __init__(self, output_dim, sn=False, name=None):
        super(CNN_Encoder, self).__init__(None, name or "CNN_Encoder")
        self.output_dim = output_dim
        self.sn = sn # spectral norm
    
    def __call__(self, x, sn=False, is_training=True, reuse=False):
        with tf.variable_scope(self.name, reuse=reuse):
            net = lrelu(conv2d(x, 64, 4, 4, 2, 2, sn=self.sn, padding="SAME", name="conv1"), name="l1")
            net = lrelu(bn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值