# 简单易懂的自动编码器

，并且希望原始的输入

，可以对输入

，这称为绑定权重（tiedweights），本文所有的自动编码器都加上这个限制。有时候，我们还会给自动编码器加上更多的约束条件，去噪自动编码器以及稀疏自动编码器就属于这种情况，因为大部分时候单纯地重构原始输入并没有什么意义，我们希望自动编码器在近似重构原始输入的情况下能够捕捉到原始输入更有价值的信息。

（左右滑动，查看完整代码）

```n_inputs = 28*28
n_hidden1 = 300
n_hidden2 = 150

# 定义输入占位符：不需要y
X = tf.placeholder(tf.float32, [None, n_inputs])

# 定义训练参数
initializer = tf.contrib.layers.variance_scaling_initializer()
W1 = tf.Variable(initializer([n_inputs, n_hidden1]), name="W1")
b1 = tf.Variable(tf.zeros([n_hidden1,]), name="b1")
W2 = tf.Variable(initializer([n_hidden1, n_hidden2]), name="W2")
b2 = tf.Variable(tf.zeros([n_hidden2,]), name="b2")
W3 = tf.transpose(W2, name="W3")
b3 = tf.Variable(tf.zeros([n_hidden1,]), name="b3")
W4 = tf.transpose(W1, name="W4")
b4 = tf.Variable(tf.zeros([n_inputs,]), name="b4")

# 构建模型
h1 = tf.nn.sigmoid(tf.nn.xw_plus_b(X, W1, b1))
h2 = tf.nn.sigmoid(tf.nn.xw_plus_b(h1, W2, b2))
h3 = tf.nn.sigmoid(tf.nn.xw_plus_b(h2, W3, b3))
outputs = tf.nn.sigmoid(tf.nn.xw_plus_b(h3, W4, b4))

# 定义loss
loss = -tf.reduce_mean(tf.reduce_sum(X * tf.log(outputs) +
(1 - X) * tf.log(1 - outputs), axis=1))

（左右滑动，查看完整代码）

```# 构建模型
h1 = tf.nn.sigmoid(tf.nn.xw_plus_b(X, W1, b1))
h1_recon = tf.nn.sigmoid(tf.nn.xw_plus_b(h1, W4, b4))
h2 = tf.nn.sigmoid(tf.nn.xw_plus_b(h1, W2, b2))
h2_recon = tf.nn.sigmoid(tf.nn.xw_plus_b(h2, W3, b3))
outputs = tf.nn.sigmoid(tf.nn.xw_plus_b(h2_recon, W4, b4))

learning_rate = 1e-02
# X->h1
with tf.name_scope("layer1"):
layer1_loss = -tf.reduce_mean(tf.reduce_sum(X * tf.log(h1_recon) +
(1-X) * tf.log(1-h1_recon), axis=1))
var_list=[W1, b1, b4])

# h1->h2
with tf.name_scope("layer2"):
layer2_loss = -tf.reduce_mean(tf.reduce_sum(h1 * tf.log(h2_recon) +
(1 - h1) * tf.log(1 - h2_recon), axis=1))
var_list=[W2, b2, b3])```

1. Hands-On Machine Learning withScikit-Learn and TensorFlow, Aurélien Géron, 2017.

2. Deep Learning Tutorials：AutoEncoders, Denoising Autoencoders.

http://deeplearning.net/tutorial/dA.html#daa

3. Learning deep architectures for AI, Foundations and Trends inMachine Learning, Y. Bengio, 2009.

197 篇文章93 人订阅

0 条评论

## 相关文章

### 【干货】​深度学习中的线性代数

【导读】近日，机器学习专业学生 Niklas Donges 撰写了一篇关于深度学习需要的数学基础相关知识。线性代数对于理解机器学习和深度学习内部原理至关重要，这...

37210

2250

### word2vec原理(二) 基于Hierarchical Softmax的模型

word2vec原理(二) 基于Hierarchical Softmax的模型

2662

3379

### 使用NumPy介绍期望值，方差和协方差

AiTechYun 编辑：yuxiangyu 基础统计是应用机器学习中的有力工具，它可以更好地理解数据。而且，它也为更先进的线性代数运算和机器学习方法奠定了基础...

6698

1.2K3

58111

1312

3514

### 自编码器是什么？有什么用？这里有一份入门指南（附代码）

? 自编码器（Autoencoder，AE），是一种利用反向传播算法使得输出值等于输入值的神经网络，它先将输入压缩成潜在空间表征，然后通过这种表征来重构输出。...

3366