文章目录

  • 1.前言
  • 2.用Keras搭建自编码神经网络
    • 2.1.导入必要模块
    • 2.2.数据预处理
    • 2.3.搭建模型
    • 2.4.实例化并激活模型
    • 2.5.训练
    • 2.6.可视化

1.前言

自编码,简单来说就是把输入数据进行一个压缩和解压缩的过程。 原来有很多 Feature,压缩成几个来代表原来的数据,解压之后恢复成原来的维度,再和原数据进行比较。

它是一种非监督算法,只需要输入数据,解压缩之后的结果与原数据本身进行比较。

今天要做的事情是把 datasets.mnist 数据的 28×28=784 维的数据,压缩成 2 维的数据,然后在一个二维空间中可视化出分类的效果

2.用Keras搭建自编码神经网络

2.1.导入必要模块

import numpy as np
from keras.datasets import mnist
from keras.models import Model
from keras.layers import Dense, Input
import matplotlib.pyplot as plt
np.random.seed(42)

2.2.数据预处理

x_train = x_train.astype('float')/255. - 0.5         #归一化
x_test = x_test.astype('float')/255. - 0.5
x_train = x_train.reshape((x_train.shape[0],-1))
x_test = x_test.reshape((x_test.shape[0]),-1)
print(x_train.shape)
print(x_test.shape)

2.3.搭建模型

encoding_dim,要压缩成的维度。

接下来是建立 encoded 和 decoded ,再用 autoencoder 把二者组建在一起。训练时用 autoencoder。

encoded 用4层 Dense 全联接层,激活函数用 relu,输入的维度就是前一步定义的 input_img。

接下来定义下一层,它的输出维度是64,输入是上一层的输出结果。
在最后一层,我们定义它的输出维度就是想要的 encoding_dim=2。

解压的环节,它的过程和压缩的过程是正好相反的。相对应层的激活函数也是一样的,不过在解压的最后一层用到的激活函数是 tanh。 因为输入值是由 -0.5 到 0.5 这个范围,在最后一层用这个激活函数的时候,它的输出是 -1 到 1,可以是作为一个很好的对应。

encoding_dim = 2#自编码器
input_img = Input(shape=(784,))    #返回一个张量encoded = Dense(128,activation='relu')(input_img)
encoded = Dense(64,activation='relu')(encoded)
encoded = Dense(10,activation='relu')(encoded)
encoder_output = Dense(encoding_dim)(encoded)decoded = Dense(10,activation='relu')(encoder_output)
decoded = Dense(64,activation='relu')(decoded)
decoded = Dense(128,activation='relu')(decoded)
decoded = Dense(784,activation='tanh')(decoded)

2.4.实例化并激活模型

接下来直接用 Model 这个模块来组建模型,输入就是图片,输出是解压的最后的结果。

当我们想要看由 784 压缩到 2维后,这个结果是什么样的时候,也可以只单独组建压缩的板块,此时它的输入是图片,输出是压缩环节的最后结果。

接下来是编译自编码这个模型,优化器用的是 adam,损失函数用的是 mse。

autoencoder = Model(input = input_img, output=decoded)    #实例化
encoder = Model(input=input_img, output=encoder_output)autoencoder.compile(optimizer = 'adam',loss = 'mse'
)

2.5.训练

接下来训练自编码模型,注意它的输入和输出是一样的,都是训练集的 X。

autoencoder.fit(x_train,x_train,epochs = 20,batch_size = 256,shuffle = True)

2.6.可视化

最后看到可视化的结果,自编码模型可以把这几个数字给区分开来,我们可以用自编码这个过程来作为一个特征压缩的方法,和PCA的功能一样,效果要比它好一些,因为它是非线性的结构。

encoded_imgs = encoder.predict(x_test)
plt.scatter(encoded_imgs[:,0],encoded_imgs[:,1],c=y_test)
plt.colorbar()
plt.show()

Keras——用Keras搭建自编码神经网络(AutoEncoder)相关推荐

  1. 从环境搭建到回归神经网络案例,带你掌握Keras

    摘要:Keras作为神经网络的高级包,能够快速搭建神经网络,它的兼容性非常广,兼容了TensorFlow和Theano. 本文分享自华为云社区<[Python人工智能] 十六.Keras环境搭建 ...

  2. Keras——用Keras搭建RNN分类循环神经网络

    文章目录 1.前言 2.用Keras搭建RNN循环神经网络 2.1.导入必要模块 2.2.超参数设置 2.3.数据预处理 2.4.搭建模型 2.5.激活模型 2.6.训练+测试 1.前言 这次我们用循 ...

  3. tf.keras CNN网络搭建笔记

    tf.keras CNN网络搭建笔记 这里写目录标题 tf.keras CNN网络搭建笔记 基本流程,以LeNet为例 创建Sequential模型 配置模型的学习流程 数据预处理 模型训练与验证 相 ...

  4. Keras + Ubuntu环境搭建

    安装Theano (环境参数:Ubuntu 16.04.2  Python 2.7) 安装 numpy 和 scipy 1.sudo apt-get install python-numpy pyth ...

  5. 稀疏学习、稀疏表示、稀疏自编码神经网络、字典学习、主成分分析PCA、奇异值分解SVD 等概念的梳理,以及常用的特征降维方法

    稀疏学习.稀疏表示.稀疏自编码神经网络.字典学习.主成分分析PCA.奇异值分解SVD 等概念的梳理,以及常用的特征降维方法 关于稀疏 稀疏编码 Sparse Coding 与字典学习 神经网络的正则化 ...

  6. TensorFlow 2.0中的tf.keras和Keras有何区别?为什么以后一定要用tf.keras?

    选自pyimagesearch 作者:Adrian Rosebrock 参与:王子嘉.张倩 本文经机器之心授权转载,禁止二次转载 随着 TensorFlow 2.0 的发布,不少开发者产生了一些疑惑: ...

  7. keras系列︱keras是如何指定显卡且限制显存用量

    keras系列︱keras是如何指定显卡且限制显存用量 原创 2017年07月21日 10:59:24 标签: keras / gpu / 显卡 / 指定 / 限制 6630 keras在使用GPU的 ...

  8. DL之Keras:keras保存网络结构、网络拓扑图、网络模型(json、yaml、h5等)注意事项及代码实现

    DL之Keras:keras保存网络结构.网络拓扑图.网络模型(json.yaml.h5等)注意事项及代码实现 目录 keras保存网络结构.网络拓扑图.网络模型(json.yaml.h5等)注意事项 ...

  9. DL之Keras: Keras深度学习框架的注意事项(默认下载存放路径等)、使用方法之详细攻略

    DL之Keras: Keras深度学习框架的注意事项(自动下载存放路径等).使用方法之详细攻略 目录 Keras深度学习框架的注意事项 1.Keras自动下载默认数据集/模型存放位置 Windows系 ...

最新文章

  1. zoj 1010 (线段相交判断+多边形求面积)
  2. Java 锁粗化与循环
  3. 中psr_典型电路—电容10UF 和0.1UF并联使用的技巧常见于电源电路中,你知道其中的原理吗?...
  4. ORA-29861: 域索引标记为 LOADING/FAILED/UNUSABLE
  5. 漫游Kafka入门篇之简单介绍
  6. Visual Studio Code: 利用 MSSQL 插件创建数据库 IDE
  7. fernflower idea内置的反编译工具
  8. 正则 null_正则表达式exec、match、test的区别
  9. matlab qtdecomp,Opencv图像识别从零到精通(25)------区域分裂与合并
  10. python之路--小数据池,再谈编码,is和 == 的区别
  11. phpstudy快速搭建网站_小白快速上手搭建属于自己的网站
  12. java输入方法有哪些内容_java中输入一个字符的方法有哪些
  13. DirectAdmin面板在线解压缩的.tar.gz文件
  14. C#程序之快速切换IP地址
  15. IT大咖总结的面试真经
  16. TKG 1.5.1 的 BYOH 集群部署
  17. 飞鱼星流控王VF12路由器使用体验
  18. 【历史上的今天】11 月 8 日:计算机先驱诞生日;卷积神经网络 LeNet-5 问世;特斯拉发明遥控器
  19. 2021-2027全球与中国环卫云平台市场现状及未来发展趋势
  20. Google推出移动搜索 80亿网页、8亿图片尽在掌中

热门文章

  1. 什么叫位?什么叫字节?什么叫字长?字长表示了计算机的什么特点?,计算机应用基础...
  2. 【Netty】Netty之Bootstrapping
  3. 【操作系统/OS笔记16】进程间通信(IPC),直接/间接通信与阻塞/非阻塞通信,信号,管道,消息队列,共享内存
  4. oracle10g 安装手册 linux,oracle10g在x86linux上的安装步骤
  5. python describe include_Python describe包_程序模块 - PyPI - Python中文网
  6. SQL Server 2000中的完整备份、差异备份操作
  7. cmock学习笔记20190821
  8. **角点检测(Harris)基于Opencv2.4.9版本+VS2012开发平台进行编**
  9. WebAPI——cookie与session遇到的问题
  10. AIRSDK 3.7 加载远程的含有代码的swf文件