TensorFlow初学者系列:手把手教你实现自编码器(Autoencoder)

2019 年 7 月 30 日 专知

【导读】近期专知推出初学者系列,重点是介绍如何一步一步学习Tensorflow相关库的介绍,tensorflow.python.keras只是一个仅仅只有tensorflow一个后端的keras包。本文从一个初学者的角度使用tensorflow.python.keras实现一个自编码器(Autoencoder),并进行图片重构与图片分类。


作者:wjg

编辑:wjg


01

tensorflow.python.keras vs tensorflow.keras

tensorflow.python.keras只是一个仅仅只有tensorflow一个后端的keras包。

tensorflow.keras包包含完整的keras库,支持三个后端:tensorflow、theano和CNTK。如果希望在后端之间切换,那么应该选择keras包。这种方法也更加灵活,因为它允许独立于tensorflow安装更新keras (其中更新可能并不容易,因为下一个版本可能需要不同版本的CUDA驱动程序),反之亦然。

在API方面,目前没有区别,但是将来keras可能会更紧密地集成到tensorflow中。因此,keras中将来可能会只有tensorflow的特性,但即使如此,它也不会完全阻碍keras包的发展。


02

原理与结构

        自编码器作为一种无监督或者自监督算法,其本质上是一种数据压缩算法。

        

自编码器就是一种利用反向传播使得输出值等于输入值的神经网络。它包含两部分:编码器和解码器。编码器将输入压缩成潜在的空间表征,解码器又将这种空间表征重构输出。

结构图如下:

03

自编码器的特征

数据相关,自动编码器只能压缩那些与训练数据类似的数据。例如用数字图片训练出来的自编码器用来压缩人脸图片,效果肯定很差。

有损压缩,压缩时会有信息损失。

自动学习,自编码器可以从数据样本中自动学习。


04

数据集

        mnist手写数字数据集。

        数据集下载地址:https://pan.baidu.com/s/1YecpC_beJ3euEyYcoTRD4g

        提取码:df76


05

代码实现

5.1 首先导入需要的包

5.2 获取训练与测试数据

5.3 编码器模型

5.4 解码器模型

5.5 自编码器与训练

06

模型测试

6.1 图像重构测试

       从测试集中随机选取10张图片,将通过自编码器生成的图片与原图进行对比。

6.2 图像重构测试结果

6.3图像分类测试

       图像通过编码器将784个特征编码为2个特征,作为坐标,再结合图像的标签,以不同颜色在二维坐标上展示。

6.4图像分类测试结果

07

完整代码如下

import os
import numpy as np
from PIL import Image
from tensorflow.python import keras
from tensorflow.python.keras.layers import Dense
import matplotlib.pyplot as plt

mnist_train_data = "./mnist/mnist_train/"
def get_data(data_dir):
file_list = os.listdir(data_dir)
np.random.shuffle(file_list)
datas = []
labels = []
for file in file_list:
files = file.split(".")
if files[-1] == "jpg":
image = np.array(Image.open(data_dir + file))
image = image.flatten() # 将28x28的图片转为784为的向量
image = image / 255.
datas.append(image)
labels.append(int(files[0]))
datas = np.array(datas)
labels = np.array(labels)
return datas, labels

x_train, y_train = get_data(mnist_train_data)

# encoder
encoder = keras.Sequential([
Dense(256, activation='relu'),
Dense(64, activation='relu'),
Dense(16, activation='relu'),
Dense(2)
])

# decoder
decoder = keras.Sequential([
Dense(16, activation='relu'),
Dense(64, activation='relu'),
Dense(256, activation='relu'),
Dense(784, activation='sigmoid')
])

# autoencoder
autoencoder = keras.Sequential([
encoder,
decoder
])

# compile
autoencoder.compile(optimizer='adam', loss=keras.losses.binary_crossentropy)
autoencoder.fit(x_train, x_train, epochs=20, batch_size=256)

is_reconstruct = False
if
is_reconstruct:
# 图像重构
examples_to_show = 10
rec = autoencoder.predict(x_train[:examples_to_show])
f, a = plt.subplots(2, 10, figsize=(10, 2))
for i in range(examples_to_show):
a[0][i].imshow(np.reshape(x_train[i], (28, 28)))
a[1][i].imshow(np.reshape(rec[i], (28, 28)))
plt.show()
else:
# classification
batch_x = x_train[:1000]
batch_y = y_train[:1000]
encoded = encoder.predict(batch_x)
plt.scatter(encoded[:, 0], encoded[:, 1], c=batch_y)
plt.show()


参考链接:

https://github.com/tensorflow

-END-

专 · 知

专知,专业可信的人工智能知识分发,让认知协作更快更好!欢迎登录www.zhuanzhi.ai,注册登录专知,获取更多AI知识资料!

欢迎微信扫一扫加入专知人工智能知识星球群,获取最新AI专业干货知识教程视频资料和与专家交流咨询



请加专知小助手微信(扫一扫如下二维码添加),加入专知人工智能主题群,咨询技术商务合作~

专知《深度学习:算法到实战》课程全部完成!560+位同学在学习,现在报名,限时优惠!网易云课堂人工智能畅销榜首位!

点击“阅读原文”,了解报名专知《深度学习:算法到实战》课程

登录查看更多
10

相关内容

自动编码器是一种人工神经网络,用于以无监督的方式学习有效的数据编码。自动编码器的目的是通过训练网络忽略信号“噪声”来学习一组数据的表示(编码),通常用于降维。与简化方面一起,学习了重构方面,在此,自动编码器尝试从简化编码中生成尽可能接近其原始输入的表示形式,从而得到其名称。基本模型存在几种变体,其目的是迫使学习的输入表示形式具有有用的属性。自动编码器可有效地解决许多应用问题,从面部识别到获取单词的语义。
一份简明有趣的Python学习教程,42页pdf
专知会员服务
76+阅读 · 2020年6月22日
《深度学习》圣经花书的数学推导、原理与Python代码实现
【模型泛化教程】标签平滑与Keras, TensorFlow,和深度学习
专知会员服务
20+阅读 · 2019年12月31日
《动手学深度学习》(Dive into Deep Learning)PyTorch实现
专知会员服务
119+阅读 · 2019年12月31日
【GitHub实战】Pytorch实现的小样本逼真的视频到视频转换
专知会员服务
35+阅读 · 2019年12月15日
初学者的 Keras:实现卷积神经网络
Python程序员
24+阅读 · 2019年9月8日
【干货】深入理解自编码器(附代码实现)
TensorFlow神经网络教程
Python程序员
4+阅读 · 2017年12月4日
TensorFlow实现神经网络入门篇
机器学习研究会
10+阅读 · 2017年11月19日
tensorflow系列笔记:流程,概念和代码解析
北京思腾合力科技有限公司
30+阅读 · 2017年11月11日
手把手教TensorFlow(附代码)
深度学习世界
15+阅读 · 2017年10月17日
q-Space Novelty Detection with Variational Autoencoders
Arxiv
6+阅读 · 2018年4月4日
Arxiv
10+阅读 · 2018年3月23日
Arxiv
6+阅读 · 2018年3月12日
Arxiv
9+阅读 · 2018年1月4日
Arxiv
3+阅读 · 2017年7月6日
VIP会员
相关资讯
初学者的 Keras:实现卷积神经网络
Python程序员
24+阅读 · 2019年9月8日
【干货】深入理解自编码器(附代码实现)
TensorFlow神经网络教程
Python程序员
4+阅读 · 2017年12月4日
TensorFlow实现神经网络入门篇
机器学习研究会
10+阅读 · 2017年11月19日
tensorflow系列笔记:流程,概念和代码解析
北京思腾合力科技有限公司
30+阅读 · 2017年11月11日
手把手教TensorFlow(附代码)
深度学习世界
15+阅读 · 2017年10月17日
相关论文
q-Space Novelty Detection with Variational Autoencoders
Arxiv
6+阅读 · 2018年4月4日
Arxiv
10+阅读 · 2018年3月23日
Arxiv
6+阅读 · 2018年3月12日
Arxiv
9+阅读 · 2018年1月4日
Arxiv
3+阅读 · 2017年7月6日
Top
微信扫码咨询专知VIP会员