自动编码器(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)
上一篇 2022年5月1日 上午10:40
下一篇 2022年5月1日 上午10:40


相关推荐

  • python字典排序方法「建议收藏」

    python字典排序方法「建议收藏」字典是“键-值对”的无序可变序列在实际运用中,对字典进行排序是一个比较常见的操作,主要用到了python内置函数sorted(),该函数可以对所有可迭代的对象进行排序操作。语法(python3):sorted(iterable,key=None,reverse=False)参数说明:iterable:可迭代对象,即可以用for循环进行迭代的对象;key:主要是用来进行比较的元素,只有一个参数,具体的函数参数取自于可迭代对象中,用来指定可迭代对象中的一个元素来进行排序;reverse:排序规

    2022年6月18日
    31
  • 基于STM32的RC522模块读写数据块以及电子钱包充值扣款系统的设计

    基于STM32的RC522模块读写数据块以及电子钱包充值扣款系统的设计前言本人也是正在学习单片机知识的萌新一枚,在这里记录下自己完成这个小设计的过程跟大家分享一下,也请大家指出我哪里还有不足可以改进的地方。秉着和大家一起学习进步发布了这篇文章STM32F103ZET6单片机我使用的单片机是正点原子版的STM32F1精英版,型号是ZET6。32系列的单片机功能比较完整,基本所有的小设计都可以使用32完成,而且现在市面上使用32系列的人也是不在少数,所以推荐大家使用这款单片机去完成各种实验和设计。…

    2026年1月21日
    4
  • 手把手教你用STM32cube调通STM32H743以太网通信并实现TCP客户端

    手把手教你用STM32cube调通STM32H743以太网通信并实现TCP客户端STM32H7 内核是 Cortex M7 目前接触到与 M4 最大的区别就是 CACHE M7 有两个 CACHE DCACHE 和 ICACHE 因为这个 CACHE 踩了很多坑 本例程软硬件配置为 FreeRTOS LwIP LAN8720 在正点原子阿波罗开发板上测试 1 Cube 配置 RCC 都使用外部晶振 因为后面要用到 FreeRTOS cube 会建议使用 TIM1 作为 SYS 时钟源系统不考虑功

    2026年3月17日
    2
  • 未将对象引用设置到对象的实例–可能出现的问题总结

    未将对象引用设置到对象的实例–可能出现的问题总结

    2021年11月23日
    46
  • 匿名内部类详解

    匿名内部类详解第一篇博客 由于最近一直在学习 Java 所以最近的博客主要都是 Java 中的知识点 希望和大家分享一下 有不对的地方希望编程大神 牛人指出 一定虚心受教 如果觉得 Endeavor 的博客有帮助的话 还希望大家顶顶 评论评论 谢谢啦 下面言归正传 匿名内部类 先举个例子吧 给大家看一下什么是匿名内部类 Endeavor 刚刚接触的时候 觉得哇哦 好奇怪的样子 这也太别扭了吧 不知道大家是什么感觉 为了进行对比

    2026年3月19日
    2
  • UFT使用技巧

    UFT使用技巧1 UFT基本功能的使用         UFT的基本功能包括两大部分:一部分是提供给初级用户使用的关键字视图;另一部分是提供给熟悉VBScript脚本编写的自动化测试工程师使用的专家视图。但是,并没有严格的区分,在实际的自动化测试项目中完全可以两者结合着使用。 1.1 UFT自动化测试的基本过程          使用UFT进行自动化测试的基本过程与使用其他自动化测试工具进行自动化功能测试的过…

    2022年5月26日
    195

发表回复

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

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