让我们来康康作为base_line的Auto_Encoder

import os
import tensorflow as tf
import numpy as np
from tensorflow import keras
from tensorflow.keras import Sequential, layers
from PIL import Image
from matplotlib import pyplot as plttf.random.set_seed(22)
np.random.seed(22)
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
assert tf.__version__.startswith('2.')def save_images(imgs, name):new_im = Image.new('L', (280, 280))index = 0for i in range(0, 280, 28):for j in range(0, 280, 28):im = imgs[index]im = Image.fromarray(im, mode = 'L')new_im.paste(im, (i,j))index += 1new_im.save(name)h_dim = 20
#颈层的纬度
batchsz = 512
lr = 1e-3(x_train, y_train),(x_test, y_test) = keras.datasets.fashion_mnist.load_data()
x_train, x_test = x_train.astype(np.float32) / 255., x_test.astype(np.float32) / 255.
# 去掉label
train_db = tf.data.Dataset.from_tensor_slices(x_train)
train_db = train_db.shuffle(batchsz * 5).batch(batchsz)
test_db = tf.data.Dataset.from_tensor_slices(x_test)
test_db = test_db.batch(batchsz)print(x_train.shape, y_train.shape)
print(x_test.shape, y_test.shape)class AE(keras.Model):def __init__(self):super(AE, self).__init__()#Encoderself.encoder = Sequential([layers.Dense(256, activation=tf.nn.relu),layers.Dense(128, activation=tf.nn.relu),layers.Dense(h_dim)])# Decoderself.decoder = Sequential([layers.Dense(128, activation=tf.nn.relu),layers.Dense(256, activation=tf.nn.relu),layers.Dense(784)])def call(self, inputs, training = None):# [b, 784] => [b, 10]h = self.encoder(inputs)# [b, 10] => [b, 784]x_hat = self.decoder(h)return x_hatmodel = AE()
model.build(input_shape=(None, 784))
model.summary()optimizer = tf.optimizers.Adam(lr = lr)for epoch in range(100):for step, x in enumerate(train_db):#[b, 28, 28] => [b, 784]x = tf.reshape(x, [-1, 784])with tf.GradientTape() as tape:x_rec_logits = model(x)rec_loss = tf.losses.binary_crossentropy(x, x_rec_logits, from_logits = True)rec_loss = tf.reduce_mean(rec_loss)grads = tape.gradient(rec_loss, model.trainable_variables)optimizer.apply_gradients(zip(grads, model.trainable_variables))if step % 100 == 0:print(epoch, step, float(rec_loss))# evaluationx = next(iter(test_db))logits = model(tf.reshape(x, [-1, 784]))x_hat = tf.sigmoid(logits)# [b, 784] => [b, 28, 28]x_hat = tf.reshape(x_hat, [-1, 28, 28])# [b, 28, 28] => [2b, 28, 28]x_concat = tf.concat([x, x_hat], axis = 0)x_concat = x_hatx_concat = x_concat.numpy() * 255x_concat = x_concat.astype(np.uint8)save_images(x_concat, 'ae_images/rec_epoch_%d.png'%epoch)

然后看下对应的结果:

这里截取了其中一张,其实效果一般般吧,然后我们再康康VAE,也就是在loss上面使用了KL散度得方法

import os
import tensorflow as tf
import numpy as np
from tensorflow import keras
from tensorflow.keras import Sequential, layers
from PIL import Image
from matplotlib import pyplot as plttf.random.set_seed(22)
np.random.seed(22)
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
assert tf.__version__.startswith('2.')def save_images(imgs, name):new_im = Image.new('L', (280, 280))index = 0for i in range(0, 280, 28):for j in range(0, 280, 28):im = imgs[index]im = Image.fromarray(im, mode='L')new_im.paste(im, (i, j))index += 1new_im.save(name)h_dim = 20
batchsz = 512
lr = 1e-3(x_train, y_train), (x_test, y_test) = keras.datasets.fashion_mnist.load_data()
x_train, x_test = x_train.astype(np.float32) / 255., x_test.astype(np.float32) / 255.
# we do not need label
train_db = tf.data.Dataset.from_tensor_slices(x_train)
train_db = train_db.shuffle(batchsz * 5).batch(batchsz)
test_db = tf.data.Dataset.from_tensor_slices(x_test)
test_db = test_db.batch(batchsz)print(x_train.shape, y_train.shape)
print(x_test.shape, y_test.shape)z_dim = 10class VAE(keras.Model):def __init__(self):super(VAE, self).__init__()# Encoderself.fc1 = layers.Dense(128)self.fc2 = layers.Dense(z_dim)self.fc3 = layers.Dense(z_dim)# Decoderself.fc4 = layers.Dense(128)self.fc5 = layers.Dense(784)def encoder(self, x):h = tf.nn.relu(self.fc1(x))# get meanmu = self.fc2(h)# get variancelog_var = self.fc3(h)return mu, log_vardef decoder(self, z):out = tf.nn.relu(self.fc4(z))out = self.fc5(out)return outdef reparameterize(self, mu, log_var):eps = tf.random.normal(log_var.shape)std = tf.exp(log_var * 0.5)z = mu + std * epsreturn zdef call(self, inputs, training = None):# [b, 784] => [b, z_dim], [b, z_dim]mu, log_var = self.encoder(inputs)# reparameterization trickz = self.reparameterize(mu, log_var)x_hat = self.decoder(z)return x_hat, mu, log_varmodel = VAE()
model.build(input_shape = (4, 784))
optimizer = tf.optimizers.Adam(lr)for epoch in range(1000):for step, x in enumerate(train_db):x = tf.reshape(x, [-1, 784])with tf.GradientTape() as tape:x_rec_logits, mu, log_var = model(x)rec_loss = tf.nn.sigmoid_cross_entropy_with_logits(labels = x, logits = x_rec_logits)rec_loss = tf.reduce_sum(rec_loss) / x.shape[0]# compute kl divergence (mu, var) ~ N(0,1)kl_div = -0.5 * (log_var + 1 - mu ** 2 - tf.exp(log_var))kl_div = tf.reduce_sum(kl_div) / x.shape[0]loss = rec_loss + 1. * kl_divgrads = tape.gradient(loss, model.trainable_variables)optimizer.apply_gradients(zip(grads, model.trainable_variables))if step % 100 == 0:print(epoch, step, 'kl div:', float(kl_div), 'rec loss: ', float(rec_loss))#evaluationz = tf.random.normal((batchsz, z_dim))logits = model.decoder(z)x_hat = tf.sigmoid(logits)x_hat = tf.reshape(x_hat, [-1, 28, 28]).numpy() * 255.x_hat = x_hat.astype(np.uint8)save_images(x_hat, 'vae_images/sampled_epoch%d.png'%epoch)x = next(iter(test_db))x = tf.reshape(x, [-1, 784])x_hat_logits, _, _ = model(x)x_hat = tf.sigmoid(x_hat_logits)x_hat = tf.reshape(x_hat, [-1, 28, 28]).numpy() * 255.x_hat = x_hat.astype(np.uint8)save_images(x_hat, 'vae_images/rec_epoch%d.png'%epoch)

对minist_fashion的处理效果如下

Tensorflow Auto-encoder + VAE 实战相关推荐

  1. 【人工智能概论】 变分自编码器(Variational Auto Encoder , VAE)

    [人工智能概论] 变分自编码器(Variational Auto Encoder , VAE) 文章目录 [人工智能概论] 变分自编码器(Variational Auto Encoder , VAE) ...

  2. Auto Encoder(AE),Denoising Auto Encoder(DAE), Variational Auto Encoder(VAE) 区别

    文章主要内容参考李宏毅老师的机器学习课程:https://www.bilibili.com/video/BV1Wv411h7kN?p=70 Auto Encoder: 是什么?有什么用? Auto E ...

  3. 【深度学习】李宏毅2021/2022春深度学习课程笔记 - Auto Encoder 自编码器 + PyTorch实战

    文章目录 一.Basic Idea of Auto Encoder 1.1 Auto Encoder 结构 1.2 Auto Encoder 降维 1.3 Why Auto Encoder 1.4 D ...

  4. Auto Encoder用于异常检测

    对基于深度神经网络的Auto Encoder用于异常检测的一些思考 from:https://my.oschina.net/u/1778239/blog/1861724 一.前言 现实中,大部分数据都 ...

  5. 自编码器(Auto Encoder)原理及其python实现

    目录 一.原理 二.为什么要使用自编码器 三.代码实现 1.原始自编码器 2.多层(堆叠)自编码器 3.卷积自编码器 4.正则自编码器 4.1稀疏自编码器 四.降噪自编码器 五. 逐层贪婪训练堆叠自编 ...

  6. 2021李宏毅机器学习课程笔记——Auto Encoder

    注:这个是笔者用于期末复习的一个简单笔记,因此难以做到全面详细,有疑问欢迎大家在评论区讨论 https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-d ...

  7. 《TensorFlow技术解析与实战》——第3章 可视化TensorFlow 3.1PlayGround

    本节书摘来自异步社区<TensorFlow技术解析与实战>一书中的第3章,第3.1节,作者李嘉璇,更多章节内容可以访问云栖社区"异步社区"公众号查看 第3章 可视化Te ...

  8. 《TensorFlow技术解析与实战》——第3章 可视化TensorFlow

    本节书摘来异步社区<TensorFlow技术解析与实战>一书中的第3章,作者:李嘉璇,更多章节内容可以访问云栖社区"异步社区"公众号查看. 第3章 可视化TensorF ...

  9. 《TensorFlow技术解析与实战》——1.2 什么是深度学习

    本节书摘来异步社区<TensorFlow技术解析与实战>一书中的第1章,第1.2节,作者:李嘉璇,更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.2 什么是深 ...

  10. 堆叠降噪自动编码器 Stacked Denoising Auto Encoder(SDAE)

    原文链接 自动编码器(Auto-Encoder,AE) 自动编码器(Auto-Encoder,AE)自编码器(autoencoder)是神经网络的一种,经过训练后能尝试将输入复制到输出.自编码器内部有 ...

最新文章

  1. c+语言+null,C/C++语言中NULL、'\0’和0的区别
  2. ES6中定义的类和对象
  3. leetcode算法题--二叉树的镜像
  4. LeetCode算法题-Minimum Depth of Binary Tree(Java实现)
  5. 从安全视角来看LXD容器管理程序
  6. NYOJ 7 街区最短路径问题
  7. 文件上传服务器经常超时,解决Tomcat文件上传超时问题.
  8. 系列(四)—Http协议
  9. linux 系统配额管理功能,Linux磁盘配额管理
  10. modsecurity(尚不完善)
  11. Content-Disposition的使用和注意事项
  12. Shiro - Shiro简介;Shiro与Spring Security区别;Spring Boot集成Shiro
  13. (Windbg调试一)minidump崩溃捕捉
  14. xml大于等于转移_Mybatis.xml文件中大于小于等于
  15. java、.net、IOS、Android自学编程学习视频与资料
  16. 强制修改.ko文件中的内核版本号与内核对应
  17. 做百度竞价推广的好处与坏处?
  18. 机器学习之Naive Bayes算法:日撸Java三百行day58-59
  19. ITPUB网站的知识索引汇总
  20. CRC32 Python C 文件计算

热门文章

  1. [Swift实际操作]七、常见概念-(12)使用DispatchGroup(调度组)管理线程数组
  2. 修改Typora的快捷键【markdown软件】
  3. TCP详解——连接建立与断开
  4. 【u107】数字游戏(bds)
  5. asp.net 二级域名表单认证情况下共享Cookie
  6. [置顶] java除0问题探究
  7. LightOj_1030 Discovering Gold
  8. PAT 00-自测1. 打印沙漏(20)
  9. AJAX,JSON与MVC
  10. [导入]全国哀悼日 网站变灰装(附代码)[转]