作家
登录

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

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

  •         x = tf.layers.dense(x, units=28*28, activation=tf.nn.sigmoid) 
  •         img = tf.reshape(x, shape=[-1, 28, 28])        return img  
  • 如今,我们将两部分连在一路。

    1. sampled, mn, sd = encoder(X_in, keep_prob) 
    2.  
    3. dec = decoder(sampled, keep_prob)  

    为了计算图像重构的损掉函数,我们简单地应用了平方差(这有时刻会使图像变得有些模糊)。这个损掉函数还结合了 KL 散度,这确保了我们的隐蔽值将会年腋荷琐标准分布中采样。关于这个主题,如不雅想要懂得更多,可以看一下这篇文┞仿(https://jaan.io/what-is-variational-autoencoder-vae-tutorial/)。

    1. unreshaped = tf.reshape(dec, [-1, 28*28]) 
    2. img_loss = tf.reduce_sum(tf.squared_difference(unreshaped, Y_flat), 1) 
    3. latent_loss = -0.5 * tf.reduce_sum(1.0 + 2.0 * sd - tf.square(mn) - tf.exp(2.0 * sd), 1) 
    4. loss = tf.reduce_mean(img_loss + latent_loss) 
    5. optimizer = tf.train.AdamOptimizer(0.0005).minimize(loss) 
    6. sess = tf.Session() 
    7. sess.run(tf.global_variables_initializer())  

    如今我们终于可以练习我们的 VAE 了!

    每隔 200 步,我们会看一下当前的重建是什么样子的。大年夜约在处理了 2000 次迭代后,大年夜多半重建看上倒是挺合理的。

    1. for i in range(30000): 
    2.     batch = [np.reshape(b, [28, 28]) for b in mnist.train.next_batch(batch_size=batch_size)[0]] 
    3.     sess.run(optimizer, feed_dict = {X_in: batch, Y: batch, keep_prob: 0.8})         
    4.     if not i % 200: 
    5.         ls, d, i_ls, d_ls, mu, sigm = sess.run([loss, dec, img_loss, dst_loss, mn, sd], feed_dict = {X_in: batch, Y: batch, keep_prob: 1.0}) 
    6.         plt.imshow(np.reshape(batch[0], [28, 28]), cmap='gray'
    7.         plt.show() 
    8.         plt.imshow(d[0], cmap='gray'
    9.         plt.show() 
    10.         print(i, ls, np.mean(i_ls), np.mean(d_ls))  

    生成新数据

    最惊人的是我们如今可以生成新的字符了。最后,我们仅仅是年腋荷琐荡位觚态分布琅绫擎采集了一个值,输入到解码器。生成的大年夜多半字符都和仁攀类手写的是一样的。

    1. randoms = [np.random.normal(0, 1, n_latent) for _ in range(10)] 
    2. imgs = sess.run(dec, feed_dict = {sampled: randoms, keep_prob: 1.0}) 
    3. imgs = [np.reshape(imgs[i], [28, 28]) for i in range(len(imgs))]for img in imgs: 
    4.     plt.figure(figsize=(1,1)) 

        推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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