AI学习笔记——Autoencoders(自编码器)

综合技术 2018-07-13 阅读原文

Autoencoder 的基本概念

之前的文章介绍过机器学习中的监督学习和非监督学习,其中非监督学习简单来说就是学习人类没有标记过的数据。对于没有标记的数据最常见的应用就是通过聚类(Clustering)的方式将数据进行分类。对于这些数据来说通常有非常多的维度或者说Features。如何降低这些数据的维度或者说“压缩”数据,从而减轻模型学习的负担,我们就要用到Autoencoder了。

用Autoencoder 给数据“压缩”和降维不仅能够给机器“减压”,同时也有利于数据的可视化(人类只能看懂三维的数据)。

Autoencoder 实际上跟普通的神经网络没有什么本质的区别,分为输入层,隐藏层和输出层。唯一比较特殊的是,输入层的输入feature的数量(也就是神经元的数量)要等于输出层。同时要保证输入和输出相等。

结构大概就是如图所示

因为输出要等于输入,所以中间的每一层都最大程度地保留了原有的数据信息,但是由于神经元个数发生了变化,数据的维度也就发生了变化。比如上图的中间层(第三层)只有两个神经元,那么这一层输出的结果实际上就是二维的数据结构。我们就可以用这一层的输出结果进行无监督学习分类,或者做视觉化的展示。

简化的Autoencoder

对于Autoencoder从输入层到最中间层的数据处理过程叫做数据编码(Encode)过程,从中间层到输出层则为解码(Decode)过程,最后保证输出等于输入。

Autoencoder的隐藏层可以是多层也可以是单层,这里我用一个只有一层隐藏层的Autoencoder的实例来介绍Autoencoder.

Autoencoder实例代码

1、导入需要用到的库

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

2、创建一个三维的数据

这里用sklearn 的一个make_blobs的工具创造有两个聚集点的三维数据

from sklearn.datasets import make_blobs
data = make_blobs(n_samples=100, n_features=3,centers=2,random_state=101)

数据长这个样子

注意data[0]是100x3的数据(100个点,3个features(维度))

3. 搭建神经网络

下面用Tensorflow Layers来搭一个三层的全连接的神经网路,输入层,隐藏层和输出层的神经元个数分别是3,2,1。

import tensorflow as tf
from tensorflow.contrib.layers import fully_connected

num_inputs = 3  # 3 dimensional input
num_hidden = 2  # 2 dimensional representation 
num_outputs = num_inputs # Must be true for an autoencoder!

learning_rate = 0.01

Placeholder,Layers,Loss Function 和 Optimizer

#Placeholder
X = tf.placeholder(tf.float32, shape=[None, num_inputs])
#Layers
hidden = fully_connected(X, num_hidden, activation_fn=None)
outputs = fully_connected(hidden, num_outputs, activation_fn=None)
#Loss Function
loss = tf.reduce_mean(tf.square(outputs - X))  # MSE
#Optimizer
optimizer = tf.train.AdamOptimizer(learning_rate)
train  = optimizer.minimize( loss)
#Init
init = tf.global_variables_initializer()

4. 训练神经网络

num_steps = 1000

with tf.Session() as sess:
    sess.run(init)
    
    for iteration in range(num_steps):
        sess.run(train,feed_dict={X: scaled_data})

        
    # Now ask for the hidden layer output (the 2 dimensional output)
    output_2d = hidden.eval(feed_dict={X: scaled_data})

注意:output_2d就是中间层输出的结果,这是一个二维(100x2)的数据。

这个数据长这个样子

4.总结

从上面的例子可以看到,Autoencoder 不是简单地去掉一个维度,而是通过编码的过程将数据“压缩”到二维。这些数据通过解码过程可以再次在输出层输出三维的数据,并且保留了元数据的两个积聚点。

上面只是一个非常简单的将三维数据通过Autoencoder降到二维空间,当数据的feature 太多的时候,通过Autoencoder 就可以在最大限度保留原数据的信息并降低源数据的维度。

————

相关文章

AI学习笔记——循环神经网络(RNN)的基本概念

AI学习笔记——神经网络和深度学习

AI学习笔记——卷积神经网络1(CNN)

————

文章首发steemit.com 为了方便墙内阅读,搬运至此,欢迎留言或者访问我的Steemit主页

简书

责编内容by:简书阅读原文】。感谢您的支持!

您可能感兴趣的

【PPT下载】5大维度对比主流芯片架构,类脑芯片未来可期... 7月17日,智东西公开课推出的AI芯片系列课进行完第四讲,由灵汐科技首席架构师冯杰主讲,主题为《类脑芯片的架构 7月17日,智东西公开课推出的AI芯片系列课进行完第四讲,由灵汐科技首席架构师冯杰主讲,主题为《类脑芯片的架构演进...
TensorFlow 常用函数整理 TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU 或 GPU。一般你不需要显式指定使用 CPU 还是 GPU, TensorFlow 能自动检测。如果检测到 GPU, TensorFlow...
谷歌推微信小游戏“猜画小歌”,计算机视觉和神经网络技术加持... 微信小游戏很火,谷歌AI也来凑热闹了。 7月18日,据谷歌黑板报消息,谷歌发布了首款微信小游戏“猜画小歌”,用到了计算机视觉和神经网络技术,能够一眼认出潦草的简笔画。 “猜画小歌”和大家都熟悉的“你画我猜”玩法类似,系统会给出题...
AI自动评论系统难辨真假!不努力,你连“水军”都做不了!... 据悉,芝加哥大学已经研发出一种循环神经网络人工智能系统,这种系统主要是根据网上已有评论,使用循环神经网络自动预测生成新的评论。通俗来说,就是大家常说的水军。该系统在美国著名点评网站Yelp上进行评论,人们已经很难分辨真假。 在...
在博世的牙克石测试中心,我们体验了一辆向左打往右走的奥迪A3... 不论对于国内外的传统车企还是造车新势力,各家公司背后都少不了顶级Tier 1的身影。而在汽车智能化、网联化和电气化浪潮席卷全球的今天,博世显然成为了智能汽车技术创新的重要一家公司。 8月22日,亿欧汽车等媒体受邀来到内蒙古...