Keras(六)Autoencoder 自编码 原理及实例 Save&reload 模型的保存和提取-程序员宅基地

技术标签: 人工智能  

Autoencoder 自编码

  • 压缩与解压
    1205669-20190711170826653-1083383433.png
    原来有时神经网络要接受大量的输入信息, 比如输入信息是高清图片时, 输入信息量可能达到上千万, 让神经网络直接从上千万个信息源中学习是一件很吃力的工作. 所以, 何不压缩一下, 提取出原图片中的最具代表性的信息, 缩减输入信息量, 再把缩减过后的信息放进神经网络学习. 这样学习起来就简单轻松了. 所以, 自编码就能在这时发挥作用. 通过将原数据白色的X 压缩, 解压 成黑色的X, 然后通过对比黑白 X ,求出预测误差, 进行反向传递, 逐步提升自编码的准确性. 训练好的自编码中间这一部分就是能总结原数据的精髓. 可以看出, 从头到尾, 我们只用到了输入数据 X, 并没有用到 X 对应的数据标签, 所以也可以说自编码是一种非监督学习. 到了真正使用自编码的时候. 通常只会用到自编码前半部分
  • Encoder 编码器
    1205669-20190711170837715-2049032251.png
    编码器能得到原数据的精髓, 然后我们只需要再创建一个小的神经网络学习这个精髓的数据,不仅减少了神经网络的负担, 而且同样能达到很好的效果
    自编码能从原数据中总结出每种类型数据的特征, 如果把这些特征类型都放在一张二维的图片上, 每种类型都已经被很好的用原数据的精髓区分开来. 如果你了解 PCA 主成分分析, 再提取主要特征时, 自编码和它一样,甚至超越了 PCA. 换句话说, 自编码 可以像 PCA 一样 给特征属性降维
  • Decoder 解码器
    将精髓信息解压成原始信息
  • 实例
    把 datasets.mnist 数据的 28×28=784 维的数据,压缩成 2 维的数据,然后在一个二维空间中可视化出分类的效果
import numpy as np
np.random.seed(1)
from keras.datasets import mnist
from keras.models import Model
from keras.layers import Dense, Input
import matplotlib.pyplot as plt

# 获取数据 非监督学习 不用y
(x_train, _), (x_test, y_test) = mnist.load_data()

# 预处理
x_train = x_train.astype('float32') / 255. - 0.5 # 标准化 -0.5~0.5
x_test = x_test.astype('float32') / 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)

# 要压成的维度
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)
# 构建自动编码模型
autoencoder = Model(input=input_img, output=decoded)

# 激活模型
autoencoder.compile(optimizer='adam', loss='mse')

# 训练 非监督学习 经历压缩和解压的自己跟原来的自己比较
autoencoder.fit(x_train, x_train,epochs=20,batch_size=256,shuffle=True)

# 可视化结果
encoded_imgs = autoencoder.predict(x_test)
plt.scatter(encoded_imgs[:, 0], encoded_imgs[:, 1], c=y_test)
plt.colorbar()
plt.show()

输出:

Epoch 1/20

  256/60000 [..............................] - ETA: 1:41 - loss: 0.2318
 1280/60000 [..............................] - ETA: 22s - loss: 0.2211 
。。。
59648/60000 [============================>.] - ETA: 0s - loss: 0.0393
60000/60000 [==============================] - 2s 41us/step - loss: 0.0393

Save&reload 保存提取

  • 保存模型
    训练完模型之后
    from keras.models import save_model
    model.save('my_model.h5)
  • 导入模型
    导入保存好的模型
    from keras.models import load_model
    model = load_model(my_model.h5)
    还可以只保存权重,不保存模型结构
    model.save_weights('my_model_weights.h5')
    model.load_weights('my_model_weights.h5')
    还可以用model.to_json 保存完结构之后,然后再去加载这个json_string,只保存结构,没保存权重
    from keras.models import model_from_json
    json_string = model.to_json()
    model = model_from_json(json_string)

转载于:https://www.cnblogs.com/peng8098/p/keras_6.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30561425/article/details/97954569

智能推荐

使用Dev-C++调试,变量的值 not found in current context,下一步是灰色无法点击-程序员宅基地

文章浏览阅读1w次,点赞10次,收藏13次。在学习使用Dev-C++进行调试时,设断点之后遇到了变量的值 not found in current context,下一步等是灰色无法点击这样的问题,如图。(1)在百度后了解到,应把工具->编译选项->代码生成/优化->连接器中的产生调试信息项改成YES,如图。这样就应该解决了问题。(2)但我还无法成功调试,后来发现是自己粗心,保存时将C语言的代码保存成.cpp为后缀而不是.c。.c代表C的源程序,.cpp代表c++源程序。重新保存成后缀为.c,就可以正常调试了。.._not found in current context

JS获取中文拼音首字母,并通过拼音首字母快速查找页面内的中文内容-程序员宅基地

文章浏览阅读5k次。实现效果:图一:图二:此例中输入的中文字符串“万万保重”,有三个字是多音字,所以alert对话框中显示的是多种读音的组合;如何实现?如何实现通过拼音首字母快速查找页面内的中文内容呢?过程原理是这样的:例如要对一些人名进行快速查找,当页面加载完成后,对所有人名建立一个索引,生成拼音首字母与姓名的对应关系;然后监听键盘事件,当用户按下键盘时,根据键值得到按下的是哪个字母,然后遍历索引中..._kjmypxjynwmjjm

Field类详解-程序员宅基地

文章浏览阅读4.1k次。//AccessibleObject 类是 Field、Method 和 Constructor 对象的基类。 public class AccessibleObject implements AnnotatedElement { /* * 1、实现了AnnotatedElement对注解支持的相关方法 * 2、提供访问控制 /_field类

数据可视化_数据可视化博客-程序员宅基地

文章浏览阅读1.4k次。数据可视化ECharts_数据可视化博客

初遇C#之HelloWorld程序_.net framework helloworld c#-程序员宅基地

文章浏览阅读4.8k次。一、开发环境 C#是一种面向对象的、运行于.NETFramework之上的高级程序设计语言。由于C#非常依赖于.NETFramework所以Win7就自带了.NETFramework3.5,Win8自带了.NETFramework 4.0。因此我可以先不使用VS IDE, 因为刚开始还是徒手建立自己的天下比较有好处,等到对基本的框架有了解之后,再来使用VS才能做到的心应手。否则_.net framework helloworld c#

vuecli3代码压缩混淆使用uglifyjs压缩JS_使用uglifyjs混淆vue3代码-程序员宅基地

文章浏览阅读4k次,点赞2次,收藏4次。、安装 “uglifyjs-webpack-plugin”cnpm i --save uglifyjs-webpack-plugin没有安装cnpm的同学可以用npm2、在项目根目录下创建一个名为 vue.config.js的文件3、在vue.config.js中引入uglifyjs-webpack-pluginconst UglifyPlugin = require('uglifyjs-webpack-plugin')4、在vue.config.js中配置uglifyjs-we_使用uglifyjs混淆vue3代码

随便推点

nodeJS之流stream_nodejs stream-json-程序员宅基地

文章浏览阅读1k次。概述  流(stream)在Nodejs中是处理流数据的抽象接口。stream模块提供了基础的API 。使用这些API可以很容易地来构建实现流接口的对象。Nodejs提供了多种流对象。 例如,HTTP请求和process.stdout都是流的实例  流可以是可读的、可写的,或是可读写的。所有的流都是 EventEmitter 的实例。  尽管所有的 Node.js 用户_nodejs stream-json

Elasticsearch(9) --- 聚合查询(Bucket聚合)_elasticsearch nest bucket聚合-程序员宅基地

文章浏览阅读457次。Elasticsearch(9) --- 聚合查询(Bucket聚合)系统小说 www.kuwx.net上一篇讲了Elasticsearch聚合查询中的Metric聚合:Elasticsearch(8) --- 聚合查询(Metric聚合)说明 本文主要参考于Elasticsearch 官方文档 7.3版本。 Bucket Aggregations概念:Bucket 可以理解为一..._elasticsearch nest bucket聚合

【大数据】三、相似项发现(Jaccard、Shingling、MinHashing)_shingling的作用-程序员宅基地

文章浏览阅读943次,点赞2次,收藏8次。文章目录1. Jaccard1.1 例题2. shingling2.1 k-shingle2.2 k 值大小的选择2.3 例题3. MinHashing3.1 minhashing 作用:压缩3.2 算法步骤、例题4. LSH 行条化策略的分析5. 距离测度1. Jaccard定义 Jaccard 相似度计算公式:定义 Jaccard 距离:1.1 例题不重复重复 (bag),最大值为 1 / 22. shingling将文档用短字符集合来表示2.1 k-shinglech_shingling的作用

EditText电话号码格式_edittext中的电话格式-程序员宅基地

文章浏览阅读514次。看了网上一些文章,自己改了改,小白/** * * @author Damon * 电话格式EditText */public class PhoneNumberEditText extends EditText implements TextWatcher { public PhoneNumberEditText(Context context, AttributeSet at_edittext中的电话格式

Windows7/10电脑怎么设置自动关机?实测有效!_windows10如何设置关机时间-程序员宅基地

文章浏览阅读248次。目录1. 桌面 — 右键点击此电脑(计算机)— 管理2. 计算机管理 — 任务计划程序 — 创建基本任务3. 创建基本任务向导3.1 名称:自动关机3.2 触发器:每天3.3 每日:设置每天在几点关机3.4 操作:启动程序3.5 启动程序:3.6 完成在网上搜索,发现很多设置自动关机的教程,要么是利用了电脑自动关机软件,要么有一些小问题。其实利用电脑的“定时任务”就可以轻松搞定电脑自动关机。这里图文记录一下操作的全部过程,小白照着做也能搞定Windows自动关机!1. 桌面 — 右键点击此电脑(计算机)_windows10如何设置关机时间

MATLAB算法实战应用案例精讲-【神经网络】激活函数:Swish(附python代码实现)_matlab bp 激活函数swich-程序员宅基地

文章浏览阅读1.5k次。Swish是谷歌在17年提出的一个激活函数,形式非常简单,几乎就是 sigmoid 和 ReLU 的拼凑,具备无上界有下界、平滑、非单调的特性,Swish 在深层模型上的效果优于 ReLU。例如,仅仅使用 Swish 单元替换 ReLU 就能把 Mobile NASNetA 在 ImageNet 上的 top-1 分类准确率提高 0.9%,Inception-ResNet-v 的分类准确率提高 0.6%。多种激活函数对比生物神经网络是人工神经网络的起源。_matlab bp 激活函数swich