我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python神经网络使用tensorflow实现自编码Autoencoder

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python神经网络使用tensorflow实现自编码Autoencoder

学习前言

当你发现数据的维度太多怎么办!没关系,我们给它降维!
当你发现不会降维怎么办!没关系,来这里看看怎么autoencode

antoencoder简介

1、为什么要降维

随着社会的发展,可以利用人工智能解决的越来越多,人工智能所需要处理的问题也越来越复杂,作为神经网络的输入量,维度也越来越大,也就出现了当前所面临的“维度灾难”与“信息丰富、知识贫乏”的问题。

维度太多并不是一件优秀的事情,太多的维度同样会导致训练效率低,特征难以提取等问题,如果可以通过优秀的方法对特征进行提取,将会大大提高训练效率。

常见的降维方法有PCA(主成分分析)和LDA(线性判别分析,Fisher Linear Discriminant Analysis),二者的使用方法我会在今后的日子继续写BLOG进行阐明。

2、antoencoder的原理

如图是一个降维的神经网络的示意图,其可以将n维数据量降维2维数据量:

输入量与输出量都是数据原有的全部特征,我们利用tensorflow的optimizer对w1ij和w2ji进行优化。在优化的最后,w1ij就是我们将n维数据编码到2维的编码方式,w2ji就是我们将2维数据进行解码到n维数据的解码方式。

3、python中encode的实现

def encoder(x):
    layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x, weights['encoder_h1']),
                                   biases['encoder_b1']))
    layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, weights['encoder_h2']),
                                   biases['encoder_b2']))
    layer_3 = tf.nn.sigmoid(tf.add(tf.matmul(layer_2, weights['encoder_h3']),
                                   biases['encoder_b3']))
    layer_4 = tf.add(tf.matmul(layer_3, weights['encoder_h4']),
                                    biases['encoder_b4'])
    return layer_4
def decoder(x):
    layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x, weights['decoder_h1']),
                                   biases['decoder_b1']))
    layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, weights['decoder_h2']),
                                   biases['decoder_b2']))
    layer_3 = tf.nn.sigmoid(tf.add(tf.matmul(layer_2, weights['decoder_h3']),
                                biases['decoder_b3']))
    layer_4 = tf.nn.sigmoid(tf.add(tf.matmul(layer_3, weights['decoder_h4']),
                                biases['decoder_b4']))
    return layer_4
encoder_op = encoder(X)
decoder_op = decoder(encoder_op)

其中encode函数的输出就是编码后的结果。

全部代码

该例子为手写体识别例子,将784维缩小为2维,并且以图像的方式显示。

import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data",one_hot = "true")
learning_rate = 0.01    #学习率
training_epochs = 10	#训练十次
batch_size = 256
display_step = 1
examples_to_show = 10
n_input = 784
X = tf.placeholder(tf.float32,[None,n_input])
#encode的过程分为4次,分别是784->128、128->64、64->10、10->2
n_hidden_1 = 128
n_hidden_2 = 64
n_hidden_3 = 10
n_hidden_4 = 2
weights = {
    #这四个是用于encode的
    'encoder_h1': tf.Variable(tf.truncated_normal([n_input, n_hidden_1],)),
    'encoder_h2': tf.Variable(tf.truncated_normal([n_hidden_1, n_hidden_2],)),
    'encoder_h3': tf.Variable(tf.truncated_normal([n_hidden_2, n_hidden_3],)),
    'encoder_h4': tf.Variable(tf.truncated_normal([n_hidden_3, n_hidden_4],)),
    #这四个是用于decode的
    'decoder_h1': tf.Variable(tf.truncated_normal([n_hidden_4, n_hidden_3],)),
    'decoder_h2': tf.Variable(tf.truncated_normal([n_hidden_3, n_hidden_2],)),
    'decoder_h3': tf.Variable(tf.truncated_normal([n_hidden_2, n_hidden_1],)),
    'decoder_h4': tf.Variable(tf.truncated_normal([n_hidden_1, n_input],)),
}
biases = {
    #这四个是用于encode的
    'encoder_b1': tf.Variable(tf.random_normal([n_hidden_1])),
    'encoder_b2': tf.Variable(tf.random_normal([n_hidden_2])),
    'encoder_b3': tf.Variable(tf.random_normal([n_hidden_3])),
    'encoder_b4': tf.Variable(tf.random_normal([n_hidden_4])),
    #这四个是用于decode的
    'decoder_b1': tf.Variable(tf.random_normal([n_hidden_3])),
    'decoder_b2': tf.Variable(tf.random_normal([n_hidden_2])),
    'decoder_b3': tf.Variable(tf.random_normal([n_hidden_1])),
    'decoder_b4': tf.Variable(tf.random_normal([n_input])),
}
def encoder(x):
    #encode函数,分为四步,layer4为编码后的结果
    layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x, weights['encoder_h1']),
                                   biases['encoder_b1']))
    layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, weights['encoder_h2']),
                                   biases['encoder_b2']))
    layer_3 = tf.nn.sigmoid(tf.add(tf.matmul(layer_2, weights['encoder_h3']),
                                   biases['encoder_b3']))
    layer_4 = tf.add(tf.matmul(layer_3, weights['encoder_h4']),
                                    biases['encoder_b4'])
    return layer_4
def decoder(x):
    #decode函数,分为四步,layer4为解码后的结果
    layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x, weights['decoder_h1']),
                                   biases['decoder_b1']))
    layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, weights['decoder_h2']),
                                   biases['decoder_b2']))
    layer_3 = tf.nn.sigmoid(tf.add(tf.matmul(layer_2, weights['decoder_h3']),
                                biases['decoder_b3']))
    layer_4 = tf.nn.sigmoid(tf.add(tf.matmul(layer_3, weights['decoder_h4']),
                                biases['decoder_b4']))
    return layer_4
encoder_op = encoder(X)
decoder_op = decoder(encoder_op)
#将编码再解码的结果与原始码对比,查看区别
y_pred = decoder_op
y_label = X
#比较特征损失情况
cost = tf.reduce_mean(tf.square(y_pred-y_label))
train = tf.train.AdamOptimizer(learning_rate).minimize(cost)
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    #每个世代进行total_batch次训练
    total_batch = int(mnist.train.num_examples/batch_size)
    for epoch in range(training_epochs):
        for i in range(total_batch):
            batch_xs,batch_ys = mnist.train.next_batch(batch_size)
            _,c = sess.run([train,cost],feed_dict={X:batch_xs})
        if epoch % display_step == 0:
            print("Epoch :","%02d"%epoch,"cost =","%.4f"%c)
    #利用test测试机进行测试
    encoder_result = sess.run(encoder_op,feed_dict={X:mnist.test.images})
    plt.scatter(encoder_result[:,0],encoder_result[:,1],c=np.argmax(mnist.test.labels,1),s=1)
    plt.show()

实现结果为:

可以看到实验结果分为很多个区域块,基本可以识别。

以上就是python神经网络使用tensorflow实现自编码Autoencoder的详细内容,更多关于tensorflow自编码Autoencoder的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python神经网络使用tensorflow实现自编码Autoencoder

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么用TensorFlow实现卷积神经网络

这篇文章主要介绍“怎么用TensorFlow实现卷积神经网络”,在日常操作中,相信很多人在怎么用TensorFlow实现卷积神经网络问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用TensorFlow实现
2023-06-25

python 使用Tensorflow训练BP神经网络实现鸢尾花分类

Hello,兄弟们,开始搞深度学习了,今天出第一篇博客,小白一枚,如果发现错误请及时指正,万分感谢。 使用软件Python 3.8,Tensorflow2.0 问题描述鸢尾花主要分为狗尾草鸢尾(0)、杂色鸢尾(1)、弗吉尼亚鸢尾(2)。 人
2022-06-02

如何在python中使用Tensorflow训练BP神经网络

如何在python中使用Tensorflow训练BP神经网络?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。使用软件Python 3.8,Tensorflow2.0问题描述鸢
2023-06-15

Python基于TensorFlow接口实现深度学习神经网络回归

这篇文章主要为大家详细介绍了如何基于Python语言中TensorFlow的tf.estimator接口,实现深度学习神经网络回归的具体方法,感兴趣的可以了解一下
2023-02-17

在gpu神经网络中使用tensorflow-cpu时出现报错如何解决

在gpu神经网络中使用tensorflow-cpu时出现报错如何解决?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。错误如下:大概意思是没找到一些节点。后来发现原因,用gpu
2023-06-06

Python利用keras接口实现深度神经网络回归

这篇文章主要为大家详细介绍了基于Python语言中TensorFlow的Keras接口,实现深度神经网络回归的方法。文中的示例代码讲解详细,感兴趣的可以了解一下
2023-02-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录