逐层构建深度自编码器

本文介绍了自编码器的原理,它是一种无监督学习方法,用于数据降维和特征提取。通过 TensorFlow 构建了一个加性高斯噪声自编码器,并在 MNIST 数据集上进行训练,展示了随着训练迭代,重构误差逐渐降低的过程。训练得到的自编码器的隐层特征可用于后续的分类任务,或者作为深度神经网络的初始权重,加速收敛。
摘要由CSDN通过智能技术生成
自编码器是神经网络的一种基本结构,通过使神经网络的输出等于输入,迫使隐层学习到最能表征原数据的特征。自编码器属于一种无监督学习方法,也可称为自监督学习(网络的输入等于输出)。能对数据进行非线性降维。同时,可以作为一种特征提取工具,在训练自编码器的同时,提取出数据的特征,可以使用这些特征做后续的分类问题。也可以使用自编码器训练的到的权重,去初始化深度神经网络,使得深度神经网络更容易收敛到最小值。
class AdditiveGaussianNoiseAutoencoder(object):#定义一个自编码器的类

    def __init__(self, n_input, n_hidden, transfer_function = tf.nn.sigmoid, optimizer = tf.train.AdamOptimizer(),

                 scale = 0.1):

        self.n_input = n_input

        self.n_hidden = n_hidden

        self.transfer = transfer_function

        self.scale = tf.placeholder(tf.float32)

        self.training_scale = scale

        network_weights = self._initialize_weights()

        self.weights = network_weights



        # model

        self.x = tf.placeholder(tf.float32, [None, self.n_input])

        self.hidden = self.transfer(tf.add(tf.matmul(self.x + scale * tf.random_normal((n_input,)),

                self.weights['w1']),

                self.weights['b1']))

        self.reconstruction = self.transfer(tf.add(tf.matmul(self.hidden, self.weights['w2']), self.weights['b2']))



        # cost
        regularizer=tf.contrib.layers.l2_regularizer(0.05)
        self.cost = 0.5 * tf.reduce_sum(tf.pow(tf.subtract(self.reconstruction, self.x), 2.0))+regularizer(self.weights['w1'])

        self.optimizer = optimizer.minimize(self.cost)

        init = tf.global_variables_initializer()

        self.sess = tf.Session()

        self.sess.run(init)



    def _initialize_weights(self):

        all_weights = dict()
		
        all_weights['w1'] = tf.Vari
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值