美文网首页
keras_Autoencoder 自编码

keras_Autoencoder 自编码

作者: Ledestin | 来源:发表于2017-05-19 12:18 被阅读264次

自编码,简单来说就是把输入数据进行一个压缩和解压缩的过程。 原来有很多 Feature,压缩成几个来代表原来的数据,解压之后恢复成原来的维度,再和原数据进行比较。
它是一种非监督算法,只需要输入数据,解压缩之后的结果与原数据本身进行比较。
今天要做的事情是把 datasets.mnist 数据的 28×28=784 维的数据,压缩成 2 维的数据,然后在一个二维空间中可视化出分类的效果。
用keras构建自编码器的步骤:
1.导入模块并创建数据
2.建立模型
3.激活模型
4.训练模型
5.可视化结果


Demo.py

import numpy as np
np.random.seed(1337)  # for reproducibility
from keras.datasets import mnist
from keras.models import Model
from keras.layers import Dense, Input
import matplotlib.pyplot as plt
from keras.optimizers import Adam
#创建数据
# download the mnist to the path '~/.keras/datasets/' if it is the first time to be called
# X shape (60,000 28x28), y shape (10,000, )
(x_train, _), (x_test, y_test) = mnist.load_data()

# data pre-processing
x_train = x_train.astype('float32') / 255. - 0.5       # minmax_normalized
x_test = x_test.astype('float32') / 255. - 0.5         # minmax_normalized
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)

#建立模型
# in order to plot in a 2D figure
encoding_dim = 2   #encoding_dim,要压缩成的维度。

# this is our input placeholder
input_img = Input(shape=(784,))

# encoder layers
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)

# decoder layers
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)

#接下来直接用 Model 这个模块来组建模型,输入就是图片,输出是解压的最后的结果。
# construct the autoencoder model
autoencoder = Model(input=input_img, output=decoded)
#当我们想要看由 784 压缩到 2维后,这个结果是什么样的时候,也可以只单独组建压缩的板块,
#此时它的输入是图片,输出是压缩环节的最后结果。
# construct the encoder model for plotting
encoder = Model(input=input_img, output=encoder_output)

#激活模型
#接下来是编译自编码这个模型,优化器用的是 adam,损失函数用的是 mse。
# compile autoencoder
adam = Adam(lr = 1e-4)
autoencoder.compile(optimizer='adam', loss='mse')
#训练模型
# training
autoencoder.fit(x_train, x_train,
                nb_epoch=20,
                batch_size=256,
                shuffle=True)
#可视化结果
#最后看到可视化的结果,自编码模型可以把这几个数字给区分开来,
#我们可以用自编码这个过程来作为一个特征压缩的方法,
#和PCA的功能一样,效果要比它好一些,因为它是非线性的结构
# plotting
encoded_imgs = encoder.predict(x_test)
plt.scatter(encoded_imgs[:, 0], encoded_imgs[:, 1], c=y_test)
plt.colorbar()
plt.show()


结果:

....
Epoch 18/20
60000/60000 [==============================] - 6s - loss: 0.0411     
Epoch 19/20
60000/60000 [==============================] - 6s - loss: 0.0407     
Epoch 20/20
60000/60000 [==============================] - 6s - loss: 0.0405      
Paste_Image.png

相关文章

  • keras_Autoencoder 自编码

    自编码,简单来说就是把输入数据进行一个压缩和解压缩的过程。 原来有很多 Feature,压缩成几个来代表原来的数据...

  • 机器学习笔记:

    OneHotEncoder独热编码和 LabelEncoder标签编码 转自https://www.cnblogs...

  • QR码编码原理二(编码)

    转自:QR码编码原理二(编码) 编码就是把常见的数字、字符等转换成QR码的方法。说具体的编码之前,先说一下QR码的...

  • 玩转图片Base64编码

    转自:玩转图片Base64编码 base64编码网址: http://www.pjhome.net/web/htm...

  • Swift 编码风格指南

    本文转自:Swift 编码风格指南 | www.samirchen.com 背景 本文主要是对以下几个编码规范的整...

  • MySQL日常操作

    1、指定UTF8编码 2、指定GBK编码 3、建表 带自增字段 4、插入数据 5、授权

  • 自回归和自编码

    1. 自回归语言模型:Autoregressive LM 概念定义: 一般的语言模型都是从左到右计算某个词出现的概...

  • QR码编码原理三(日本汉字和中文编码)

    转自:QR码编码原理三(日本汉字和中文编码) 一、日本汉字(KANJI)是两个字节表示的字符码,编码的方式是将其转...

  • 代码规范

    JavaScript 编码规范(草案) 该规范改编自 Airbnb JavaScript Style Guide[...

  • OC之编码asset的AVAssetExportSession

    AVAssetExportSession 继承自NSObject,该对象对asset编码,以创建指定exportP...

网友评论

      本文标题:keras_Autoencoder 自编码

      本文链接:https://www.haomeiwen.com/subject/aesexxtx.html