自动编码器(Auto Encoder)

自动编码器(Auto Encoder)1.初识AutoEncoder1986年Rumelhart提出自动编码器的概念,并将其用于高维复杂数据处理,促进了神经网络的发展。自编码神经网络是一种无监督学习算法,它使用了反向传播算法,并让目标值等于输入值,比如y(i)=x(i)。下图是一个自编码神经网络的示例。自动编码器(autoencoder)是神经网络的一种,该网络可以看作由两部分组成:一个编码器函数h=f(x)和一个生成

大家好,又见面了,我是你们的朋友全栈君。

1.初识Auto Encoder

1986 年Rumelhart 提出自动编码器的概念,并将其用于高维复杂数据处理,促进了神经网络的发展。自编码神经网络是一种无监督学习算法,它使用了反向传播算法,并让目标值等于输入值,比如y(i)=x(i) 。下图是一个自编码神经网络的示例。

无

自动编码器(autoencoder) 是神经网络的一种,该网络可以看作由两部分组成:一个编码器函数h = f(x) 和一个生成重构的解码器r = g(h)。传统上,自动编码器被用于降维或特征学习

自编码神经网络尝试学习的一个函数为:
无

换句话说,它尝试逼近一个恒等函数,从而使得输出x(2)接近于输入x(1) 。恒等函数虽然看上去不太有学习的意义,但是当我们为自编码神经网络加入某些限制,比如限定隐藏神经元的数量,我们就可以从输入数据中发现一些有趣的结构。

举例来说,假设某个自编码神经网络的输入x 是一张 10×10图像(共100个像素)的像素灰度值,于是 n=100 ,其隐藏层L2中有50个隐藏神经元。

注意,输出也是100维。由于只有50个隐藏神经元,我们迫使自编码神经网络去学习输入数据的压缩表示,也就是说,它必须从50维的隐藏神经元激活度向量a(2)中重构出100维的像素灰度值输入x 。

一些需要注意的问题:

如果网络的输入数据是完全随机的,比如每一个输入都是一个跟其它特征完全无关的独立同分布高斯随机变量,那么这一压缩表示将会非常难学习。但是如果输入数据中隐含着一些特定的结构,比如某些输入特征是彼此相关的,那么这一算法就可以发现输入数据中的这些相关性。事实上,这一简单的自编码神经网络通常可以学习出一个跟主元分析(PCA)结果非常相似的输入数据的低维表示。

2.Deep Auto Encoder(DAE)

2006 年,Hinton 对原型自动编码器结构进行改进,进而产生了DAE,先用无监督逐层贪心训练算法完成对隐含层的预训练,然后用BP 算法对整个神经网络进行系统性参数优化调整,显著降低了神经网络的性能指数,有效改善了BP 算法易陷入局部最小的不良状况。

简单来说,DAE相对于原始的Auto Encoder加大了深度,提高学习能力,更利于预训练。如图2所示,一个5层的DAE,隐层节点数从高到低,再从低到高,最终只需要取得L(3)的向量即可。

无

3.利用keras实现DAE

# -*- coding: utf-8 -*-

import pandas as pd
import numpy as np
from keras.layers import Dense,Activation,Input
from keras.models import Sequential,Model
import theano

#可以自行替换为自己的数据
go = pd.read_csv('./clear_data/gene_ontology.csv')
go_id = go['Gene_ID']
go = go.drop(['Gene_ID'],axis=1)

inputDims = go.values.shape[1]
EncoderDims = 100

AutoEncoder = Sequential()
AutoEncoder.add(Dense(input_dim=inputDims,output_dim=EncoderDims,activation='relu'))
AutoEncoder.add(Dense(input_dim=EncoderDims,output_dim=inputDims,activation='sigmoid'))

AutoEncoder.compile(optimizer='adadelta',loss='binary_crossentropy')

AutoEncoder.fit(go.values,go.values,batch_size=32,nb_epoch=50,shuffle=True)  #,validation_data

4.取DAE隐层向量

get_feature = theano.function([AutoEncoder.layers[0].input],AutoEncoder.layers[0].output,allow_input_downcast=False)
new_go = get_feature(go)

参考文献:

(1)Rumelhart DE,Hinton GE,Williams RJ. Learning representations by back-propagating errors[J]. Nature,1986,323: 533-536.
(2)Hinton GE,Osinder S,Teh Y W. A fast learning algorithm for deep belief nets[J].Neural Computation,2006,18( 7) : 1527-1554.
(3)http://deeplearning.stanford.edu/wiki/index.php/Autoencoders_and_Sparsity

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132861.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JAVA+Selenium2—淘宝秒杀购物车脚本

    JAVA+Selenium2—淘宝秒杀购物车脚本JAVA+Selenium—淘宝清空购物车脚本前言准备代码注前言对于自己近期学习的归纳与应用,只是个简单的线性脚本。之前学习了selenium,发现csdn上大都是python+selenium,故参考后改成java+selenium,另外把读取本地时间改成了读取网站时间,更为精确。准备JAVA环境,Selenium-2.46.0jar包,火狐浏览器固定版本(自用的可能是32.0)j…

    2022年5月8日
    124
  • 2021idea激活码【2021免费激活】

    (2021idea激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月26日
    109
  • webgame开发中配置存储的介绍「建议收藏」

    webgame开发中配置存储的介绍「建议收藏」webgame世界的基础数值都是事先配置好的,在运行的时候可以随时读取,是属于非常重要和必不可少的部分,而且数据量也不少。这样的数据在开发中的存储也就变得重要了,需要保证效率、性能、安全等,一般的做法有使用xml文本文件保存、静态数组保存和数据库直接保存。 xml文本文件保存优点: 共享性强,几乎每种语言都可以读取和解析xml文件,方便多语言混合开发。 结构清晰,xml的结构很

    2022年5月2日
    43
  • android音乐播放器ppt,基于Android音乐播放器设计与开发.ppt

    android音乐播放器ppt,基于Android音乐播放器设计与开发.ppt基于Android音乐播放器设计与开发毕业设计基于Android的音乐播放器设计与开发…

    2022年6月26日
    39
  • ssm框架理解

    ssm框架理解SSM框架理解最近两星期一直在学JavaEE的MVC框架,因为之前学校开的JavaEE课程就一直学的吊儿郎当的,所以现在真正需要掌握就非常手忙脚乱,在此记录下这段时间学习的感悟,如有错误,希望大牛毫不

    2022年7月4日
    23
  • lcd1602按键显示不同数字_1602液晶显示屏

    lcd1602按键显示不同数字_1602液晶显示屏1.直接与Arduino相连2.通过转接板利用I2C的方式与Arduino相连1.直接与Arduino相连直接与Arduino相连的好处是不用现另外购买转接板,但这样造成的后果就是要大量占用A

    2022年8月4日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号