神经网络学习小记载4——使用tensorflow进行自编码(Autoencoder) A8站源码交易平台

摘要:python中encode的完成 A8站源码交易平台 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'])

A8站源码交易平台

学习前语

当你发现数据的维度太多怎样办!不要紧,咱们给它降维!

当你发现不会降维怎样办!不要紧,来这儿看看怎样autoencode!



1.jpg



antoencoder简介

1、为什么要降维

跟着社会的开展,能够使用人工智能处理的越来越多,人工智能所需求处理的问题也越来越杂乱,作为神经网络的输入量,维度也越来越大,--也就呈现了当前所面对的“维度灾祸”与“信息丰厚、常识匮乏”的问题。

维度太多并不是一件优异的工作,太多的维度同样会导致练习功率低,特征难以提取等问题,假如能够经过优异的办法对特征进行提取,将会大大提高练习功率。

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

本文首要叙述怎么使用tensorflow对数据进行自编码(Autoencoder)。

2、antoencoder的原理

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

2.png


输入量与输出量都是数据原有的悉数特征,咱们使用tensorflow的optimizer对w1ij和w2ji进行优化。在优化的最终,w1ij便是咱们将n维数据编码到2维的编码方法,w2ji便是咱们将2维数据进行解码到n维数据的解码方法。


A8站源码交易平台


3、python中encode的完成 A8站源码交易平台

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函数的输出便是编码后的成果。A8站源码交易平台

悉数代码

该比如为手写体辨认比如,将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<span font-size:12px;"=""> 

#练习十次

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()




完成成果为:


3.png

能够看到试验成果分为很多个区域块,根本能够辨认。


A8站源码交易平台


  • 全部评论(0)
最新发布的资讯信息
【A8站-免费源码分享|直播源码】直播系统源码开发:关于安卓开发工具和obs直播推流(2020-10-30 09:41)
【计算机/互联网|】【独家修复】用户定制版短视频点赞系统,支持抖音+快手+刷宝+微视等所有主流短视频评论系统源码(2020-10-26 16:34)
【技术宅-为技术而疯|网站架设教程】【独家首发】最新更新已对接短信2020全新抖音快手点赞任务系统霸屏天下小红书头条威客兼职完整搭建架设视频教程(2020-10-25 13:56)
【技术宅-为技术而疯|网站架设教程】最新可用个人发卡网系统源码完整搭建架设视频教程(2020-10-25 10:53)
【技术宅-为技术而疯|网站架设教程】独家更新全新V10抢单系统唯品会京东淘宝自动抢单区块系统源码全开源抢单收单接单返利+搭建架设完整视频教程(2020-10-25 10:52)
【计算机/互联网|】柔丫纸尿裤云仓系统源码部署(2020-10-15 18:13)
【计算机/互联网|】侏罗纪软件模式定制开发(2020-10-14 15:33)
【计算机/互联网|】S2b2C供应商系统 营销闭环(2020-10-10 17:46)
【计算机/互联网|程序设计开发】盛都汇系统奖励机制(2020-10-10 17:20)
【A8站-免费源码分享|网站源码】积分商城系统APP开发(2020-09-23 14:56)
联系我们
Q Q:3101359898 点击直接对话
电话:18580901894
邮箱:admin#a8zhan.com
时间:09:00 - 24:00
手机二维码 访问手机版
返回顶部