目录

* Outline <https://www.cnblogs.com/nickchen121/p/11073620.html#outline>
* Auto-Encoder
<https://www.cnblogs.com/nickchen121/p/11073620.html#auto-encoder>
* 创建编解码器 <https://www.cnblogs.com/nickchen121/p/11073620.html#创建编解码器>
* 训练 <https://www.cnblogs.com/nickchen121/p/11073620.html#训练>
Outline

*
Auto-Encoder

*
Variational Auto-Encoders

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 plt tf.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 = 0 for
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 += 1
new_im.save(name) h_dim = 20 # 784降维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) class
AE(keras.Model): def __init__(self): super(AE, self).__init__() # Encoders
self.encoder = Sequential([ layers.Dense(256, activation=tf.nn.relu),
layers.Dense(128, activation=tf.nn.relu), layers.Dense(h_dim) ]) # Decoders
self.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,19] h = self.encoder(inputs) # [b,10]
==> [b,784] x_hat = self.decoder(h) return x_hat model = AE()
model.build(input_shape=(None, 784)) # tensorflow尽量用元组 model.summary() (60000,
28, 28) (60000,) (10000, 28, 28) (10000,) Model: "ae"
_________________________________________________________________ Layer (type)
Output Shape Param #
================================================================= sequential
(Sequential) multiple 236436
_________________________________________________________________ sequential_1
(Sequential) multiple 237200
================================================================= Total params:
473,636 Trainable params: 473,636 Non-trainable params: 0
_________________________________________________________________
训练
optimizer = tf.optimizers.Adam(lr=lr) for epoch in range(10): 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_min(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)) # evaluation x = 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 # 原始图片
x_concat = x_hat x_concat = x_concat.numpy() * 255. x_concat =
x_concat.astype(np.uint8) # 保存为整型 if not os.path.exists('ae_images'):
os.mkdir('ae_images') save_images(x_concat, 'ae_images/rec_epoch_%d.png' %
epoch) 0 0 0.09717604517936707 0 100 0.12493347376585007 1 0
0.09747321903705597 1 100 0.12291513383388519 2 0 0.10048121958971024 2 100
0.12292417883872986 3 0 0.10093794018030167 3 100 0.12260882556438446 4 0
0.10006923228502274 4 100 0.12275046110153198 5 0 0.0993042066693306 5 100
0.12257824838161469 6 0 0.0967678651213646 6 100 0.12443818897008896 7 0
0.0965462476015091 7 100 0.12179268896579742 8 0 0.09197664260864258 8 100
0.12110235542058945 9 0 0.0913471132516861 9 100 0.12342415750026703

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信