学习笔记:自编码神经网络 TensorFlow(代码)
来源:互联网 发布:java 替换特殊字符 编辑:程序博客网 时间:2024/06/06 19:44
自编码网络的作用是,将输入样本压缩到隐藏层(隐藏层神经元个数小于输入层),再在输出端重建样本。也就是说,自编码网络输出层与输入层存在如下关系:
注意:由于神经元的输出只在0和1之间,因此输入需要进行均值归一化
自编码网络可以看做将数据进行压缩(由原来的“n-维”压缩成“m维”(m=隐藏层神经元数目)),然后再在需要的时候用损失尽量小的方式将数据恢复出来。
这里有两层意思:
第一,自编码网络是要将经过压缩的数据还原
第二,还原数据应该使得损失尽量小
from __future__ import division, print_function, absolute_importimport tensorflow as tfimport numpy as npimport matplotlib.pyplot as plt# 下载并导入MNIST数据集from tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets("MNIST_data", one_hot=True)# 参数learning_rate = 0.01#学习率training_epochs = 20#训练的周期batch_size = 256#每一批次训练的大小display_step = 1examples_to_show = 10# 神经网络的参数n_hidden_1 = 256 # 隐层1的神经元个数n_hidden_2 = 128 # 隐层2神经元个数n_input = 784 # MNIST数据集的输出(img shape: 28*28)# tf Graph input (only pictures)X = tf.placeholder("float", [None, n_input])weights = { 'encoder_h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])), 'encoder_h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])), 'decoder_h1': tf.Variable(tf.random_normal([n_hidden_2, n_hidden_1])), 'decoder_h2': tf.Variable(tf.random_normal([n_hidden_1, n_input])),}biases = { 'encoder_b1': tf.Variable(tf.random_normal([n_hidden_1])), 'encoder_b2': tf.Variable(tf.random_normal([n_hidden_2])), 'decoder_b1': tf.Variable(tf.random_normal([n_hidden_1])), 'decoder_b2': tf.Variable(tf.random_normal([n_input])),}# Building the encoderdef encoder(x): # Encoder Hidden layer with sigmoid activation #1 layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x, weights['encoder_h1']), biases['encoder_b1'])) # Encoder Hidden layer with sigmoid activation #2 layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, weights['encoder_h2']), biases['encoder_b2'])) return layer_2# Building the decoderdef decoder(x): # Decoder Hidden layer with sigmoid activation #1 layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x, weights['decoder_h1']), biases['decoder_b1'])) # Decoder Hidden layer with sigmoid activation #2 layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, weights['decoder_h2']), biases['decoder_b2'])) return layer_2# Construct modelencoder_op = encoder(X)decoder_op = decoder(encoder_op)# Predictiony_pred = decoder_op# Targets (Labels) are the input data.y_true = X# Define loss and optimizer, minimize the squared errorcost = tf.reduce_mean(tf.pow(y_true - y_pred, 2))optimizer = tf.train.RMSPropOptimizer(learning_rate).minimize(cost)# Initializing the variablesinit = tf.global_variables_initializer()sess = tf.InteractiveSession()sess.run(init)total_batch = int(mnist.train.num_examples/batch_size)# Training cyclefor epoch in range(training_epochs): # Loop over all batches for i in range(total_batch): batch_xs, batch_ys = mnist.train.next_batch(batch_size) # Run optimization op (backprop) and cost op (to get loss value) _, c = sess.run([optimizer, cost], feed_dict={X: batch_xs}) # Display logs per epoch step if epoch % display_step == 0: print("Epoch:", '%04d' % (epoch+1), "cost=", "{:.9f}".format(c))print("Optimization Finished!")# Applying encode and decode over test setencode_decode = sess.run( y_pred, feed_dict={X: mnist.test.images[:examples_to_show]})# Compare original images with their reconstructionsf, a = plt.subplots(2, 10, figsize=(10, 2))for i in range(examples_to_show): a[0][i].imshow(np.reshape(mnist.test.images[i], (28, 28))) a[1][i].imshow(np.reshape(encode_decode[i], (28, 28)))f.show()plt.draw()
2 0
- 学习笔记:自编码神经网络 TensorFlow(代码)
- 学习笔记:自编码和稀疏自编码(TensorFlow代码)
- tensorflow学习笔记1(代码转自官网)
- TensorFlow学习笔记(二):实现神经网络
- TensorFlow学习笔记(三):深层神经网络
- 神经网络学习笔记(七) 自组织竞争神经网络
- Tensorflow学习: 自编码器Tensorflow代码
- Tensorflow深度学习笔记(九)--卷积神经网络(CNN)
- tensorflow学习笔记五:mnist实例--卷积神经网络(CNN)
- TensorFlow学习笔记(4)——深层神经网络
- TensorFlow学习笔记(九)tf搭建神经网络基本流程
- TensorFlow学习笔记(十)tf搭建神经网络可视化结果
- TensorFlow学习笔记6:神经网络搭建(layer,estimator等)
- UFLDL教程笔记及练习答案四(建立分类用深度学习---栈式自编码神经网络)
- 【机器学习】tensorflow: 稀疏自编码
- TensorFlow 深度学习笔记 卷积神经网络
- TensorFlow深度学习笔记 循环神经网络实践
- tensorflow卷积神经网络例子学习笔记
- hive更改表列的类型不生效
- 可更改(mutable)与不可更改(immutable)对象
- 在JavaScript中获取不重复的随机数
- CoffeeScript 简介
- 网络爬虫初探(初学阶段性总结&未来发展窥探)
- 学习笔记:自编码神经网络 TensorFlow(代码)
- MySQL学习系列二---MySQL函数
- Palindromes
- 大牛博客和各种学习资源
- CSS 文本效果
- Spark Streaming 1:入门程序windows或linux下监听端口或本地目录的wordcount
- 经典算法面试题及答案
- 阿里云虚拟机被尝试登陆多次,还好哥的密码不是一般般的
- 字母重排