【TensorFlow深度学习】自我编码器的演变:从基础AE到变分AE模型

自我编码器的演变:从基础AE到变分AE模型

      • 一、基础自我编码器:维度的压缩与重构
      • 二、变分自我编码器:从确定性到概率性
      • 三、理论与实践的桥梁:变分推理与KL散度
      • 四、变分AE的应用拓展
      • 五、结论

自我编码器(Autoencoder, AE)作为深度学习领域的一种强大工具,经历了从简单到复杂,从基础到高级的演变历程。在自我监督学习框架下,AE不仅在降维和特征学习上展现出了非凡的能力,而且通过变分AE(Variational Autoencoder, VAE)的引入,更是将生成模型推向了一个新的高度。本文将追溯AE的发展脉络,重点分析基础AE到变分AE的转变,探讨其背后的理论支撑与应用价值,并通过关键代码片段展示这一演变过程。

一、基础自我编码器:维度的压缩与重构

基础自我编码器的核心目标是对输入数据进行编码后重构,这一过程促进了对数据的有效表示学习。它通常包含两个主要部分:编码器和解码器,分别负责数据的压缩和重构。

代码示例:基础AE模型

import torch
import torch.nn as nnclass BasicAutoencoder(nn.Module):def __init__(self, input_dim, encoding_dim):super(BasicAutoencoder, self).__init__()self.encoder = nn.Sequential(nn.Linear(input_dim, encoding_dim),nn.ReLU(True))self.decoder = nn.Sequential(nn.Linear(encoding_dim, input_dim),nn.Sigmoid()  # 使用Sigmoid激活函数以约束输出范围在0-1之间)def forward(self, x):encoded = self.encoder(x)decoded = self.decoder(encoded)return decoded# 实例化模型
input_dim = 784  # 假设输入数据维度为MNIST图像的像素数量
encoding_dim = 32  # 编码维度
model = BasicAutoencoder(input_dim, encoding_dim)# 训练模型的伪代码
optimizer = torch.optim.Adam(model.parameters())
loss_fn = nn.MSELoss()for epoch in range(num_epochs):for data in dataloader:img, _ = dataoutput = model(img)loss = loss_fn(output, img)optimizer.zero_grad()loss.backward()optimizer.step()

二、变分自我编码器:从确定性到概率性

变分AE模型引入了概率视角,通过引入隐变量并利用贝叶斯推断来学习数据分布。核心思想是将编码过程视为从输入数据分布到潜在变量(z)的近似后验分布的学习,而解码则是基于这个潜在变量重构输入。

代码示例:变分AE模型

class VariationalAutoencoder(nn.Module):def __init__(self, input_dim, latent_dim, hidden_dim):super(VariationalAutoencoder, self).__init__()self.encoder = nn.Sequential(nn.Linear(input_dim, hidden_dim),nn.ReLU(True),nn.Linear(hidden_dim, 2 * latent_dim)  # 输出均值和对数方差)self.decoder = nn.Sequential(nn.Linear(latent_dim, hidden_dim),nn.ReLU(True),nn.Linear(hidden_dim, input_dim),nn.Sigmoid())def reparameterize(self, mu, logvar):std = torch.exp(0.5*logvar)eps = torch.randn_like(std)return mu + eps*stddef forward(self, x):h = self.encoder(x)mu, logvar = torch.chunk(h, 2, dim=1)z = self.reparameterize(mu, logvar)decoded = self.decoder(z)return decoded, mu, logvar# 训练变分AE的损失函数包括重构损失和KL散度损失
def vae_loss_function(recon_x, x, mu, logvar):MSE = nn.functional.binary_cross_entropy(recon_x, x, reduction='sum')KLD = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp())return MSE + KLD# 与基础AE类似,但损失函数使用vae_loss_function

三、理论与实践的桥梁:变分推理与KL散度

变分AE的核心在于变分推理,它通过最大化数据的证据下界(ELBO)来最小化重构误差并鼓励潜在空间的正则化。KL散度项确保了潜在变量z接近一个先验分布(通常是标准正态分布),这一特性为生成新的数据样本提供了可能性。

四、变分AE的应用拓展

变分AE不仅限于数据压缩和降维,还广泛应用于数据生成、图像合成、风格迁移等领域。其强大的生成能力源自于对潜在空间的有效探索,允许模型在训练完成后创造未见过的数据实例。

五、结论

从基础AE到变分AE的进化,不仅是技术上的突破,也是对数据本质理解的深化。变分AE通过引入概率框架,不仅提高了模型的表达能力,还为其在生成任务上的应用打开了新世界的大门。未来,随着对变分推断技术的进一步优化和新架构的探索,自我编码器将继续在深度学习领域扮演重要角色,引领更多创新应用的诞生。

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

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

相关文章

GEO数据挖掘-富集分析、TinyArray简化流程、多组样本分析more

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 富集分析一些理论知识具体代码 富集不到的补救措施更多资料---问题数据和常见错误分析Part4-复杂数据及其分析多分组数据分析流程 tinyarray简化版本分析流程多分组…

如何高效安全的开展HPC数据传输,保护数据安全?

高性能计算(HPC)在多个行业和领域中都有广泛的应用,像科学研究机构、芯片IC设计企业、金融、生物制药、能源、航天航空等。HPC(高性能计算)环境中的数据传输是一个关键环节,它涉及到将数据快速、安全地在不…

DJYGUI AI低代码图形编程开发平台:开启嵌入式软件图形编程新纪元

在科技高速发展的当今时代,软件开发行业对创新和高效的需求日益增长。DJYGUI AI低代码图形编程开发平台的出现,为智能屏、物联屏、串口屏等嵌入式显示设备领域带来了全新的机遇。该平台由都江堰操作系统 AI 代码自动生成平台研发,具有显著的优…

Java中如何使用正则表达式进行字符串匹配和替换?

在Java中,你可以使用java.util.regex包中的正则表达式功能进行字符串匹配和替换。以下是一些基本的使用方法: ### 字符串匹配 你可以使用Pattern和Matcher类来进行正则表达式匹配。下面是一个简单的例子: java import java.util.regex.Patt…

匈牙利命名法,类变量

类变量指的是生存周期在类里的变量,除了这个类就没人认它。网上有很多说的和匈牙利命名法不一致,说静态变量和类变量就是差不多的,其实不是。【面向对象-05】什么是类变量、实例变量、以及区别_类变量和实例变量区别-CSDN博客

【嵌入式操作系统(Linux篇)】实验期末复习(1)

以下是关于嵌入式操作系统(Linux篇)的实验汇总,大概率都是会考的 特别是shell程序和文件IO的操作 嵌入式操作系统实验小结—涉及期末大题 (一)Linux操作系统的使用实验 1、认识Linux操作系统的目录结构 请进入自己…

代理IP如何助力旅游信息聚合?

在数字化时代,旅游信息聚合对于提升服务质量、优化用户体验起着至关重要的作用。随着在线旅游预订的普及,旅游信息的采集、整合和呈现成为了一个复杂而关键的过程。在这个过程中,代理IP技术以其独特的优势,为旅游信息聚合提供了强…

APP项目测试 之 开发模型和发布

项目客户端一般分为:浏览器端和APP端 APP端分为:手机端(安装在手机上的软件)和PC端(安装在电脑上的软件) 1.开发模型 项目迭代速度不同:开发模型不一样 传统行业:瀑布模型 互联网行业…

[数据集][目标检测]水面垃圾水面漂浮物检测数据集VOC+YOLO格式3749张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):3749 标注数量(xml文件个数):3749 标注数量(txt文件个数):3749 标注…

MySQL 死锁处理

查询是否锁表 SHOW OPEN TABLES WHERE In_use > 0; 查看正在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 查看等待锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; 查看进程信息 SHOW PROCESSLIST; 或者 SELECT * FROM INFORMATION_SCHE…

vue2axios的使用

1.安装axios npm i axios 2.配置代理服务器 1.在config.js中配置单个代理服务器 // 开启代理服务器 需要重新启动项目devServer: {proxy: http://localhost:5000}配置简单,请求资源时直接发给前端(8080)即可;但不能配置多个代理…

Java SPI服务发现与扩展的利器

Java中,为了实现模块之间的解耦和可扩展性,我们常常需要一种机制来动态加载和替换实现。Java SPI就是这样一种机制,它允许我们在不修改原有代码的情况下,为接口添加新的实现,并在运行时动态加载它们。 SPI&#xff0c…

ORB-SLAM2同OpenMVS实现三维重建

ORB-SLAM2 位姿导出 Note: 为与OpenMVS进行对接本次进对ORB-SLAM2进行部分修改,使之可以为 OpenMVS提供稀疏点云、关键帧的位姿、内参,以及稀疏点云在各个View 中的可见性。 主要更改如下 . 在Map文件下增添如下函数 public: void Save(const string &a…

iOS shouldRecognizeSimultaneouslyWithGestureRecognizer 调用机制探索

shouldRecognizeSimultaneouslyWithGestureRecognizer 经常会看到,但是一直没有弄清楚其中的原理和运行机制,今天专门研究下 其运行规律 我们准备三个视图,如下,红色的是绿色视图的父视图,绿色视图 是蓝色视图的父视图…

Feign 配置全局日志存入mongo

1、开启feign日志 在application.yml 添加配置 feign:client:config:default:loggerLevel: FULL2、日志实体类 Document(collection "feignLogs") Data public class FeignLog {Idprivate String id;private String method;private String url;private LocalDate…

fake.js的使用

fake.js(也称为 Fake.js)是一个用于生成大量逼真数据的JavaScript库,它可以帮助开发者在开发和测试阶段快速生成模拟数据。这个库特别适用于前端开发中的原型设计、测试和占位内容的生成。 以下是 fake.js 的一些主要特性: 多种…

CTF-PWN-LLVM-【红帽杯-2021 simpleVM】

文章目录 参考检查逆向漏洞思路调试定位到PASS名exp 参考 https://bbs.kanxue.com/thread-274259.htm#msg_header_h2_6 http://www.blackbird.wang/2022/08/30/LLVM-PASS%E7%B1%BBpwn%E9%A2%98%E6%80%BB%E7%BB%93/ 检查 因为是用opt运行,加载动态库VMPASS.so的P…

开源模型应用落地-FastAPI-助力模型交互-WebSocket篇(四)

一、前言 使用 FastAPI 可以帮助我们更简单高效地部署 AI 交互业务。FastAPI 提供了快速构建 API 的能力,开发者可以轻松地定义模型需要的输入和输出格式,并编写好相应的业务逻辑。 FastAPI 的异步高性能架构,可以有效支持大量并发的预测请求,为用户提供流畅的交互体验。此外,F…

基于STM32的智能花园灌溉系统

目录 引言环境准备智能花园灌溉系统基础代码实现:实现智能花园灌溉系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景:花园灌溉管理与优化问题解决方案与优化收尾与总结 1. 引言 智能花园灌溉系统通过使用ST…

普元EOS学习笔记-EOS8.3精简版安装

前言 普元EOS是优秀的高低开结合的企业应用软件开发框架。 普元:这是普元公司的名字,普元信息,上市公司哦,这里就不过多安利了。 EOS:普元公司的企业应用开发系统,开发语言是基于Java,技术框…