将MNIST图片压缩成二维数据,这样也可以在直角坐标系上将其显示出来,让读者更加形象的了解自编码网络在特征提取方面的功能
实例描述
在自编码网络中使用线性解码器对MNIST数据特征进行再压缩,并将其映射到直角坐标系上。
这里使用4层逐渐压缩784维度分别压缩成256、64、16、2这4个特征向量。
如果想要得到更好的特征提取效果,可以将压缩的层数变得更多,但由于Sigmod函数“天生”缺陷,无法使用更深的层,可以使用栈式自编码器解决。
1.引入头文件,定义参数变量
建立4层网络,为每一层分配节点个数。
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
# 导入 MINST 数据集
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/data/", one_hot=True)
#参数设置
learning_rate = 0.01
# hidden layer settings
n_hidden_1 = 256
n_hidden_2 = 64
n_hidden_3 = 16
n_hidden_4 = 2
n_input = 784 # MNIST data 输入 (img shape: 28*28)
#tf Graph输入
x = tf.placeholder("float", [None,n_input])
y=x
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],)),
'encoder_h3': tf.Variable(tf.random_normal([n_hidden_2, n_hidden_3],)),
'encoder_h4': tf.Variable(tf.random_normal([n_hidden_3, n_hidden_4],)),
'decoder_h1': tf.Variable(tf.random_normal([n_hidden_4, n_hidden_3],)),
'decoder_h2': tf.Variable(tf.random_normal([n_hidden_3, n_hidden_2],

本文通过使用自编码网络,逐步将MNIST手写数字图像从784维度压缩至2维,展示特征提取过程。通过4层网络结构,先压缩后解压缩,保持数据主要特征。训练完成后,对比输入和输出图像,并将二维特征可视化,揭示数据在二维空间的分布,有助于进一步的分类任务。
最低0.47元/天 解锁文章
1248

被折叠的 条评论
为什么被折叠?



