四种类型自编码器AutoEncoder理解及代码实现

news2024/10/7 16:25:09

自编码器(AE)

自编码器的结构和思想

结构

  • 自编码器是一种无监督的数据压缩和数据特征表达方法。
  • 自编码器是神经网络的一种,经过训练后的能尝试将输入复制到输出。自编码器由编码器和解码器组成。如下图所示:

在这里插入图片描述

  • 自编码器指的是试图让输入和输出一样的神经网络。
  • 它们通过将输入压缩成一个隐藏空间表示来进行工作。然后通过这种表示来重构输出。
  • 编码器:自编码器的前半部分,功能在于把输入变成一个隐藏的卡空间表示。可以用一个编码器函数 h = f ( x ) h = f(x) h=f(x)示。
  • 解码器:这部分旨在从隐藏空间的表示重构输入。其可以用解码器 r = g ( h ) r = g(h) r=g(h)来表示。

思想

  • 如果AE的唯一目的是将输入复制到输出中,那么它们将毫无用处。
  • 实际上,我们希望通过AE训练将输入复制到输出中,隐藏表示 h h h具有有用的属性
  • 从自编码器获得有用的特征一种方法是将 h h h限制为小于 x x x的维度。在这种情况下,自编码器是不完整的,通过训练不完整的表示,我们强制自编码器学习训练数据最显著的特征
  • 如果自编码器容量过大,自编码器也可以出色地完成赋值任务,而没有从数据的分布抽取到任何有用的特征,如果隐藏表示的维度与输入相同,或者隐藏表示的维度大于输入维度的情况下。也会发生这种情况
  • 在这些情况下,即使线性编码器和线性解码器也可以将输入复制到输出。而无需了解有关数据分配的任何信息
  • 理想情况下,自编码器可以 成功的训练出任何体系结构,根据要分配的复杂度来选择编码器和解码器的代码维度数和容量。

自编码器的作用与类型

作用

  • 数据去噪
  • 数据降维
  • 通过适当的维度和稀疏性约束,

类型

  • 普通自编码器
  • 多层自编码器
  • 卷积自编码器
  • 稀疏自编码器

代码实现

普通自编码器

  • 普通自编码器三层网络,即具有一个隐藏层的神经网络
  • 输入和输出是相同的。
  • 激活函数可以选择sigmoid和relu.
from keras.layers import Dense, Input, Activation
input_size = 256
hidden_size = 32
output_size = 256
x = Input(shape=(input_size,))

# Encoder
h = Dense(hidden_size, activation='sigmoid')(x)  

# Decoder
r = Dense(output_size, activation='sigmoid')(h)

autoencoder = Model(input=x, output=r)
autoencoder.compile(optimizer='adam', loss='mse')
autoencoder.fit(input_data, input_data, batch_size=128, epochs=10000, verbose=2)

多层自编码器

  • 如果一个隐藏层不够用,可以将自编码器扩展到更多隐藏层
  • 我们实现使用3个隐藏层,而不是一个。
  • 任何隐藏层都可以作为特征表示,但将使得网络结构对称并使用最中间的隐藏层
from keras.layers import Dense, Input, Activation
input_size = 256
hidden_size = 32
output_size = 256
x = Input(shape=(input_size,))

# Encoder
hidden_1 = Dense(hidden_size, activation='sigmoid')(x)
h = Dense(code_size, activation='sigmoid')(hidden_1)

# Decoder
hidden_2 = Dense(hidden_size, activation='relu')(h)
r = Dense(input_size, activation='sigmoid')(hidden_2)

autoencoder = Model(input=x, output=r)
autoencoder.compile(optimizer='adam', loss='mse')
autoencoder.fit(input_data, input_data, batch_size=128, epochs=10000, verbose=2)

卷积自编码器

  • 使用图像3D矢量,而不是平坦的1维矢量。
  • 对输入图像进行下采样,以提供较小的尺寸的隐藏表示并强制自编码器学习图像的压缩版本
x = Input(shape=(28, 28,1)) 

# Encoder
conv1_1 = Conv2D(16, (3, 3), activation='relu', padding='same')(x)
pool1 = MaxPooling2D((2, 2), padding='same')(conv1_1)
conv1_2 = Conv2D(8, (3, 3), activation='relu', padding='same')(pool1)
pool2 = MaxPooling2D((2, 2), padding='same')(conv1_2)
conv1_3 = Conv2D(8, (3, 3), activation='relu', padding='same')(pool2)
h = MaxPooling2D((2, 2), padding='same')(conv1_3)


# Decoder
conv2_1 = Conv2D(8, (3, 3), activation='relu', padding='same')(h)
up1 = UpSampling2D((2, 2))(conv2_1)
conv2_2 = Conv2D(8, (3, 3), activation='relu', padding='same')(up1)
up2 = UpSampling2D((2, 2))(conv2_2)
conv2_3 = Conv2D(16, (3, 3), activation='relu')(up2)
up3 = UpSampling2D((2, 2))(conv2_3)
r = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(up3)

autoencoder = Model(input=x, output=r)
autoencoder.compile(optimizer='adam', loss='mse')

稀疏自编码器

  • 稀疏自编码器通常用于学习分类等其他任务的特征。
  • 稀疏自编码器必须响应数据集独特统计特征,而不仅仅是作为标识函数。 通过这种方式,用稀疏性惩罚来执行复制任务的训练可以产生有用的特征模型
  • 我们可以限制自编码器重构的另一种方式是对损失函数施加约束。
  • 例如,我们可以在损失函数中添加一个修正术语。 这样做会使我们的自编码器学习数据的稀疏表示,,在正则项中,我们添加了一个L1激活函数正则器,它将在优化阶段对损失函数应用一个惩罚。 在结果上,与正常普通自编码器相比,该表示现在更稀松。
from keras.layers import Dense, Input, Activation
input_size = 256
hidden_size = 32
output_size = 256
x = Input(shape=(input_size,))

# Encoder
h = Dense(hidden_size, activation='sigmoid', activity_regularizer=regularizers.l1(10e-6))(x)

# Decoder
r = Dense(output_size, activation='sigmoid')(h)

autoencoder = Model(input=x, output=r)
autoencoder.compile(optimizer='adam', loss='mse')
autoencoder.fit(input_data, input_data, batch_size=128, epochs=10000, verbose=2)

总结

也就是说用两个映射函数,将各种输入和输出全部都映射进来,然后变换以下,全部都将其搞定都行啦的理由与打算。全部都将其搞定都行啦的回事与打算。

  • 慢慢的利用最简单的网路结构,全部都将其搞清楚,慢慢的全部都将其搞彻底,搞完整都行啦的样子与打算。
  • 会设计自己的自编码器——用网络层来构建编码器和解码器。
  • 全部都将其构建完整都行啦的样子与打算。全部都将其搞定都行啦的回事与样子。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/46753.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑键盘功能基础知识,快速入门,抓住这份详细教程

在互联网生活发达的今天,电脑已经成为了学习工作的必备工具。而用来操作电脑的关键,就是我们经常使用的键盘和鼠标。最近有不少的小伙伴来私信小编,希望小编做一个电脑键盘功能基础知识介绍的详细教程。这不,小编应大家要求&#…

视频编解码 - RTP 与 RTCP

目录 RTP 实时传输协议 RTCP协议 将H264 RTP打包 RTP 实时传输协议 音视频数据传输,先将原始数据经过编码压缩后,将码流打包成一个个RTP包,再将码流传输到接收端。 打包的作用 接收端要正确地使用这些音视频编码数据,不仅仅需…

深度学习之路=====12=====>>MNasNet(tensorflow2)

简介 原文: MnasNet: Platform-Aware Neural Architecture Search for Mobile 来源: CVPR2019 作者: Google (Mingxing Tan, Bo Chen, Ruoming Pang, Vijay Vasudevan, Mark Sandler, Andrew Howard, Quoc V. Le) 摘要: 使用神经结构搜索(neural archit…

界面控件DevExpress WPF的主题设计器,可轻松完成应用主题研发

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 DevExpress WPF的The…

一文详解|高校到底如何开展数据分类分级?

数据安全是高校的生命线,在数据安全合规要求不断升级的大背景下,加强数据有效保护,确保数据安全共享应用,已成为高校信息化建设的前线。 安全高楼平地起,作为数据安全建设的基础工作,通过数据分类分级&…

1541_AURIX_TriCore内核架构_内核调试控制器CDC

全部学习汇总: GitHub - GreyZhang/g_tricore_architecture: some learning note about tricore architecture. 这一份笔记可能会是我近段时间来最后的一份内核学习笔记了。我看了下内核手册分为上下两部分,而下卷主要的内容其实是讲解指令集&#xff0c…

如何用CSS画一个三角形?

hello,大家好,最近在看前端的八股,里面有这样一道题,如何用CSS画出三角形?我想以这个题为例,仔细讲一下这个题的技巧,以及对这道题拓展一下,即如何画出圆形和椭圆形? 首…

GFS分布式

GFS是什么? 1.1 简单介绍 这个问题说大也大,说小也小。GFS是Google File System的缩写,字面意义上就是Google的文件系统,技术层面上来讲,GFS是Google在2003年前后创建的可扩展分布式文件系统 ,用来满足 Goo…

SpringBoot 接收客户端提交数据/参数会使用到相关注解

目录 一.基本介绍 二.接收参数相关注解应用实例 1.需求: 2.应用实例演示 2.1演示PathVariable 使用 2.2.演示RequestHeader 使用 2.3演示RequestParam 使用 2.4演示CookieValue 使用 2.5演示RequestBody 使用 2.6演示RequestAttribute,SessionAttribute 使…

C语言基础知识

目录 第一章 C语言概述 第二章 数据类型 运算符 表达式 第三章 简单的C程序设计 第四章 选择循环结构 第五章 数组 ​第六章 函数 第七章 编译预处理 第八章 指针 第九章 结构体与共用体 第一章 C语言概述 C语言的特点: 语言简洁、紧凑;使用…

安卓实训作孽之Linux命令手册

文章目录前言演示效果项目地址实现UI进度条实现读取文件获取路径进度条刷新总结前言 开局之前先吐槽一句,NC学校,以及NC老师,还要搞两个作品,上午上课下午实训真牛皮(XS)。好了废话不多说我们开始吧&#…

进阶自动化测试,你一定要知道的...

自动化测试指软件测试的自动化,在预设状态下运行应用程序或系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。 自动化测试框架一般可以分为两个层次,上层是管理整个自动化测试的开发&a…

[Spring]第二篇:IOC控制反转

简单的说就是,创建对象的权利,或者是控制的位置,由JAVA代码转移到spring容器,由spring的容器控制对象的创建,就是控制反转. spring创建对象时,会读取配置文件,配置文件中主要配置接口和实现类的关系,每个接口对相应一个实现类,使用<bean>标签配置,<bean中的id可以随便…

微软S2C2F框架已被OpenSSF开源安全体系采用

近日&#xff0c;微软发布“安全供应链消费框架(Secure Supply Chain Consumption Framework&#xff0c;简称S2C2F)”1.1版本。该框架已被OpenSSF供应链完整性工作组采用。至此&#xff0c;OpenSSF开源软件评价相关的项目和指南已覆盖使用安全、关键性、基础设施安全、漏洞披露…

机器人导航必备的栅格地图数学模型及使用

机器人导航必备的栅格地图数学模型及使用占据栅格地图&#xff08;Occupancy Grid Map&#xff09;占用栅格地图基础概念占据栅格地图的数学模型ROS中使用OccupancyGrid占据栅格地图&#xff08;Occupancy Grid Map&#xff09; 占用栅格地图基础概念 上图就是一个ROS中的占据…

复旦大学-华盛顿大学EMBA项目位列全球第9,学术研究连续3年亚洲第一

2022年10月17日&#xff0c;英国《金融时报》&#xff08;FT&#xff09;发布全球EMBA项目排名&#xff0c;复旦大学-华盛顿大学EMBA项目位列全球第9位&#xff0c;学术研究连续3年亚洲第一&#xff0c;毕业生薪酬水平全球第六。    复旦大学-华盛顿大学EMBA项目是中国大陆…

JavaWeb三大组件之Filter

目录 1、Filter概述 2、Filter快速入门 2.1、开发步骤 2.2、代码演示 3、Filter执行流程​编辑 4、Filter拦截路径 5、过滤器链 5.1、概述 5.2、代码演示 5.3、问题 6、案例 6.1、需求 6.2、分析 6.3、代码实现 6.3.1、创建Filter 6.3.2、编写逻辑代码 6.3.3、…

SuperMap GIS管线数据处理QA

一、数据简介 传统的以二维平面展现网络数据的方式&#xff0c;在一定程度上限制了信息的表达&#xff0c;尤其是在复杂的空间位置关系上。三维网络是对现实中的网络的真实模拟&#xff0c;而非抽象模拟&#xff0c;因此能够全方位的展现信息。   例如&#xff0c;多层结构的…

python期末复习案例

一.条件判断 1. 判断一个数能否同时被3和7整除 and 两者都要为真 2.判断一个数能同时被3或者7整除 但不能同时被3和7整除 ★要使用not 3.输入年份&#xff0c;看是否为闰年 闰年条件&#xff1a;能被4整除但不能被100整除&#xff0c;或者能被四百整除 定义两个变量 保存一个…

leetcode 464. 我能赢吗 官方代码的一步步演进

这里写自定义目录标题题目示例解题优化1 记忆化搜索优化2&#xff1a;使用二进制代替choosable_list计算复杂性题目 在 “100 game” 这个游戏中&#xff0c;两名玩家轮流选择从 1 到 10 的任意整数&#xff0c;累计整数和&#xff0c;先使得累计整数和 达到或超过 100 的玩家…