作家
登录

如何使用TensorFlow和自编码器模型生成手写数字

作者: 来源: 2017-11-10 14:41:23 阅读 我要评论

Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践

若何应用TensorFlow和自编码器模型生成手写数字

自编码器是一种可以或许用来进修对输入数据高效编码的神经收集。若给定一些输入,神经收集起首会应用一系列的变换来将数据映射到低维空间,这部分神经收集就被称为编码器。

然后,收集会应用被编码的低维数据去测验测验重建输入,这部分收集称之为解码器。我们可以应用编码器将数据紧缩为神经收集可以懂得的类型。然而自编码器很罕用做这个目标,因为平日存在比它更为有效的手工编写的算法(例如 jpg 紧缩)。

此外,自编码器还被经常用来履行降袈潆义务,它可以或许学会若何重建原始图像。

什么是变分自编码器?

有很多与自编码器相干的有趣应用。

个中之一被称为变分自编码器(variational autoencoder)。应用变分自编码器不仅可以紧缩数据–还能生成自编码器曾经碰到过的新对象。

应用通用自编码器的时刻,我们根本不知道收集所生成的编码具体是什么。固然我们可以比较不合的编码对象,然则要懂得它内部编码的方法几乎是弗成能的。这也就意味着我们不克不及应用编码器来生成新的对象。我们甚至连输入应当是什么样子的都不知道。

而我们用相反的办法应用变分自编码器。我们不会测验测验着去存眷隐含向量所服大年夜的分布,只须要告诉收集我们想让这个分布转换为什么样子就行了。

平日情况,我们会限制收集来生成具有荡位觚态分布性质的隐含向量。然后,在测验测验生成数据的时刻,我们只须要大年夜这种分布中进行采样,然后榜样本喂给解码器就行,解码器会返回新的对象,看上去就和我们用来练习收集的对象一样。

下面我们将介绍若何应用 Python 和 TensorFlow 实现这一过程,我们要教会我们的收集来画 MNIST 字符。

第一步加载练习数据

起首我们来履行一些根本的导入操作。TensorFlow 具有异常便利的函数来让我们可以或许很轻易地拜访 MNIST 数据集。

  1. import tensorflow as tfimport numpy as npimport matplotlib.pyplot as plt 
  2.  
  3. %matplotlib inlinefrom tensorflow.examples.tutorials.mnist import input_data 
  4.  
  5. mnist = input_data.read_data_sets('MNIST_data' 

定义编码器

定义输入数据和输出数据


计算损掉函数,并实施一个高斯隐蔽分布

MNIST 图像的维度是 28*28 像素,只有单色通道。我们的输入数据 X_in 是一批一批的 MNIST 字符,收集会进修若何重建它们。然后在一个占位符 Y 中输出它们,输出和输入具有雷同的维度。

Y_flat 将会在后面计算损掉函数的时刻用到,keep_prob 将会在应用 dropout 的时刻用到(作为一种正则化的办法)。在练习的过程中,它的值会设为 0.8,当生成新数据的时刻,我们不应用 dropout,所以它的值会变成 1。

lrelu 函数须要自及定义,因为 TensorFlow 中并没有预定义一个 Leaky ReLU 函数。

  1. tf.reset_default_graph() 
  2.  
  3. batch_size = 64X_in = tf.placeholder(dtype=tf.float32, shape=[None, 28, 28], name='X'
  4. Y    = tf.placeholder(dtype=tf.float32, shape=[None, 28, 28], name='Y'
  5. Y_flat = tf.reshape(Y, shape=[-1, 28 * 28]) 
  6. keep_prob = tf.placeholder(dtype=tf.float32, shape=(), name='keep_prob'
  7.  
  8. dec_in_channels = 1n_latent = 8reshaped_dim = [-1, 7, 7, dec_in_channels] 
  9. inputs_decoder = 49 * dec_in_channels / 2def lrelu(x, alpha=0.3):    return tf.maximum(x, tf.multiply(x, alpha))  

因为我们的输入是图像,所以应用一些卷积变换会加倍合理。最值得留意的是我们在编码器中创建了两个向量,因为编码器应当创建服大年夜高斯分布的对象。

  • 一个是均值向量
  • 一个是标准差向量

在后面你会看到,我们是若何「强迫」编码器来包管它确切生成 了服大年夜正态分布的数据点,我们可以把将会被输入到解码器中的编码值表示为 z。在计算损掉函数的时刻,我们会须要我们所选分布的均值和标准差。

 1/4    1 2 3 4 下一页 尾页

  推荐阅读

  优秀程序员眼中的整洁代码

Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践 有若干法度榜样员,就有若干定义。所以我只询问了一些异常有名且经验丰富的法度榜样员。 优良法度榜样员>>>详细阅读


本文标题:如何使用TensorFlow和自编码器模型生成手写数字

地址:http://www.17bianji.com/lsqh/38737.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)