当前位置: 首页 > news >正文

【单点知识】基于PyTorch讲解自动编码器(Autoencoder)

文章目录

    • 0. 前言
    • 1. 自动编码器的基本概念
      • 1.1 定义
      • 1.2 目标
      • 1.3 结构
    • 2. PyTorch实现自动编码器
      • 2.1 导入必要的库
      • 2.2 定义自动编码器模型
      • 2.3 加载数据
      • 2.4 训练自动编码器
    • 3. 自动编码器的意义
    • 4. 自动编码器的应用
      • 4.1 图像处理
      • 4.2自然语言处理:
      • 4.3推荐系统:
      • 4.4异常检测:
    • 5. 总结

0. 前言

按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解及成果,但是内容可能存在不准确的地方。如果发现文中错误,希望批评指正,共同进步。

自动编码器(Autoencoder)是一种无监督学习方法,主要用于降维、特征学习和生成任务。它通过学习输入数据的压缩表示(编码)并尝试重构输入数据(解码)来实现这一目的。本文将详细介绍自动编码器的基本概念、工作原理及其在PyTorch中的实现。

1. 自动编码器的基本概念

1.1 定义

自动编码器是一种神经网络,由两部分组成:编码器(Encoder)和解码器(Decoder)。编码器将输入数据 x x x映射到一个低维的编码表示 z z z,解码器则将编码表示 z z z重构回输入数据 x ′ x' x(理想情况下 x = x ′ x=x' x=x)。整个过程可以表示为:
g ϕ ( x ) = z g_{\phi}(x)=z gϕ(x)=z
f θ ( z ) = x ′ f_{\theta}(z) = x' fθ(z)=x

在这里插入图片描述

1.2 目标

自动编码器的目标是最小化重构误差,即输入数据 x x x和重构数据 x ′ x' x 之间的差异。常用的损失函数包括均方误差(Mean Squared Error, MSE)和二值交叉熵(Binary Cross-Entropy)。

1.3 结构

典型的自动编码器结构如下:

  • 编码器:将输入数据 x x x 映射到低维编码 z z z
  • 解码器:将低维编码 z z z 重构回输入数据 x ′ x' x

2. PyTorch实现自动编码器

下面举一个MNIST数据的自动编码器实例(即上图的实现)。

2.1 导入必要的库

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms

2.2 定义自动编码器模型

class Autoencoder(nn.Module):def __init__(self, input_dim, hidden_dim, latent_dim):super(Autoencoder, self).__init__()self.encoder = nn.Sequential(nn.Linear(input_dim, hidden_dim),nn.ReLU(),nn.Linear(hidden_dim, latent_dim))self.decoder = nn.Sequential(nn.Linear(latent_dim, hidden_dim),nn.ReLU(),nn.Linear(hidden_dim, input_dim),nn.Sigmoid())def forward(self, x):z = self.encoder(x)x_output = self.decoder(z)return x_output, z

2.3 加载数据

transform = transforms.Compose([transforms.ToTensor()])
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform) #这里需要有MNIST数据集
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)

2.4 训练自动编码器

input_dim = 28 * 28
hidden_dim = 128
latent_dim = 64
learning_rate = 0.001
num_epochs = 10model = Autoencoder(input_dim, hidden_dim, latent_dim)
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=learning_rate)for epoch in range(num_epochs):for data in train_loader:img, _ = dataimg = img.view(img.size(0), -1)  #把二维图像处理成一维向量optimizer.zero_grad()output, _ = model(img)loss = criterion(output, img)loss.backward()optimizer.step()print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')

输出为:

Epoch [1/10], Loss: 1.2363
Epoch [2/10], Loss: 1.2503
Epoch [3/10], Loss: 1.2281
Epoch [4/10], Loss: 1.2087
Epoch [5/10], Loss: 1.1894
Epoch [6/10], Loss: 1.1315
Epoch [7/10], Loss: 1.1038
Epoch [8/10], Loss: 1.0488
Epoch [9/10], Loss: 1.0164
Epoch [10/10], Loss: 1.0135

3. 自动编码器的意义

  • 数据压缩:自动编码器可以用于数据压缩,通过学习数据的紧凑表示来减少存储空间和传输成本。
  • 特征学习:自动编码器能够自动从原始数据中学习有用的特征,这些特征可以用于后续的任务,如分类、聚类等。
  • 降噪:通过引入噪声并训练自动编码器去除噪声,可以构建去噪自动编码器(Denoising Autoencoder),用于数据去噪和增强数据质量。
  • 生成模型:自动编码器可以用于生成新的数据样本,特别是在生成对抗网络(GANs)和变分自动编码器(VAEs)中。

4. 自动编码器的应用

4.1 图像处理

  • 图像压缩:通过自动编码器学习图像的高效表示,可以实现图像的压缩和解压缩。
  • 图像去噪:去噪自动编码器可以在图像中去除噪声,提高图像质量。
  • 图像生成:生成新的图像样本,用于数据增强或创意生成任务。

4.2自然语言处理:

  • 文本压缩:学习文本的紧凑表示,用于高效的存储和传输。
  • 文本生成:生成新的文本样本,用于文本摘要、翻译等任务。

4.3推荐系统:

  • 用户行为建模:通过自动编码器学习用户的隐含兴趣,用于个性化推荐。
  • 特征提取:从用户行为数据中提取有用的特征,用于改进推荐算法。

4.4异常检测:

  • 异常检测:通过训练自动编码器来重建正常数据,检测重建误差较大的数据点作为异常点。
  • 生物信息学:基因表达数据分析:通过自动编码器学习基因表达数据的潜在结构,用于疾病诊断和药物发现。

5. 总结

自动编码器是一种强大的无监督学习方法,广泛应用于降维、特征学习和生成任务。本文详细介绍了自动编码器的基本概念、工作原理及其在PyTorch中的实现。

相关文章:

【单点知识】基于PyTorch讲解自动编码器(Autoencoder)

文章目录 0. 前言1. 自动编码器的基本概念1.1 定义1.2 目标1.3 结构 2. PyTorch实现自动编码器2.1 导入必要的库2.2 定义自动编码器模型2.3 加载数据2.4 训练自动编码器 3. 自动编码器的意义4. 自动编码器的应用4.1 图像处理4.2自然语言处理:4.3推荐系统&#xff1a…...

Halo 正式开源: 使用可穿戴设备进行开源健康追踪

在飞速发展的可穿戴技术领域,我们正处于一个十字路口——市场上充斥着各式时尚、功能丰富的设备,声称能够彻底改变我们对健康和健身的方式。 然而,在这些光鲜的外观和营销宣传背后,隐藏着一个令人担忧的现实:大多数这些…...

summernote富文本批量上传音频,视频等附件

普通项目,HTML的summernote富文本批量上传音频,视频等附件(其他附件同理) JS和CSS的引入 <head><th:block th:include"include :: summernote-css" /> </head> <body><th:block th:include"include :: summernote-js" /> …...

IDEA如何设置编码格式,字符编码,全局编码和项目编码格式

前言 大家好&#xff0c;我是小徐啊。我们在开发Java项目&#xff08;Springboot&#xff09;的时候&#xff0c;一般都是会设置好对应的编码格式的。如果设置的不恰当&#xff0c;容易造成乱码的问题&#xff0c;这是要避免的。今天&#xff0c;小徐就来介绍下我们如何在IDEA…...

【计算机网络实验】之静态路由配置

【计算机网络实验】之静态路由配置 实验题目实验目的实验任务实验设备实验环境实验步骤路由器配置设置静态路由测试路由器之间的连通性配置主机PC的IP测试 实验题目 静态路由协议的配置 实验目的 熟悉路由器工作原理和机制&#xff1b;巩固静态路由理论&#xff1b;设计简单…...

十五届蓝桥杯赛题-c/c++ 大学b组

握手问题 很简单&#xff0c;相互牵手即可&#xff0c;但是要注意&#xff0c;第一个人只能与其他49个人牵手&#xff0c;所以开头是加上49 #include <iostream> using namespace std; int main() {int cnt0;for(int i49;i>7;i--){cnti;//cout<<i<<&quo…...

基础自动化系统的任务

基础自动化系统的任务主要包括实现自动控制、提高生产效率、减少人工干预等。以下是其具体任务的相关介绍&#xff1a; 实现自动控制 控制机器设备&#xff1a;基础自动化系统通过预设的程序和逻辑规则&#xff0c;对机器或设备进行自动控制和运行。执行特定任务&#xff1a;这…...

DBeaver添加地图查看器的自定义底图

DBeaver提供了空间数据在地图上查看的功能&#xff0c;地图查看器技术上基于Leaflet实现。 当我们在表格中选择图形列时&#xff0c;空间数据会叠加在右侧的地图查看器上。 其本质是在缓存中会生成一个静态页面&#xff0c;点击查看器左下角的“在浏览器中打开”&#xff0c;可…...

STM32F103C8T6实时时钟RTC

目录 前言 一、RTC基本硬件结构 二、Unix时间戳 2.1 unix时间戳定义 2.2 时间戳与日历日期时间的转换 2.3 指针函数使用注意事项 ​三、RTC和BKP硬件结构 四、驱动代码解析 前言 STM32F103C8T6外部低速时钟LSE&#xff08;一般为32.768KHz&#xff09;用的引脚是PC14和PC…...

Python Selenium:Web自动化测试与爬虫开发

Python Selenium&#xff1a;Web自动化测试与爬虫开发 Python Selenium&#xff1a;Web自动化测试与爬虫开发安装Selenium设置WebDriver基础示例页面元素交互处理JavaScript和Cookies浏览器控制屏幕截图Headless Mode结束会话错误处理与调试 ***本文由AI辅助生成*** Python Se…...

Java-07 深入浅出 MyBatis - 一对多模型 SqlMapConfig 与 Mapper 详细讲解测试

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…...

用CAXA CAD电子图板导入图框、标题栏并导出pdf的方法

1.导入图框&#xff1a; 点击调入图框->出现读入图框文件 一个一个点击&#xff0c;选择合适的图框 然后点击导入 2.导入标题栏&#xff1a; 调入标题栏->出现读入标题栏文件 一个一个点击&#xff0c;选择合适的标题栏&#xff0c;然后点击导入 3.导出pdf&#x…...

深入了解 Linux htop 命令:功能、用法与示例

文章目录 深入了解 Linux htop 命令&#xff1a;功能、用法与示例什么是 htop&#xff1f;htop 的安装htop的基本功能A区&#xff1a;系统资源使用情况B区&#xff1a;系统概览信息C区&#xff1a;进程列表D区&#xff1a;功能键快捷方式 与 top 的对比常见用法与示例实际场景应…...

JDK1.8新增特性

新特性&#xff1a; Lambda表达式: &#xff08;语法三要素&#xff1a;参数、箭头、代码&#xff09; JDK1.8引入的一种新语法Lambda表达式,它简化了匿名内部类的使用和提高代码的可读性。 /**正常写法创建Runable**/ Runnable runnable new Runnable() {Overridepublic voi…...

环境背景文本到语音转换

目录 概述演示效果核心逻辑使用方式 概述 本文所涉及的所有资源的获取方式&#xff1a;https://www.aspiringcode.com/content?id100000000027&uid2f1061526e3a4548ab2e111ad079ea8c 论文标题&#xff1a; 本文提出了 VoiceLDM&#xff0c;这是一种旨在生成准确遵循两种…...

后端数据增删改查基于Springboot+mybatis mysql 时间根据当时时间自动填充,数据库连接查询不一致,mysql数据库连接不好用

目录 后端数据增删改查Springboot 实体&#xff08;entity&#xff09;类引进添加UserMapper接口 创建对用的UserController注意数据库查询不一致新增数据更新删除postman测试 后端数据增删改查 基于之前构建系统&#xff0c;实现用户数据的CRUD。 打开navicat16&#xff0c;…...

《Python编程实训快速上手》第九天--调试技巧

一、抛异常 异常类型分为两类&#xff0c;第一类是Python自带的异常类型&#xff08;见《Python编程快速上手》第一天---前三章打基础&#xff09;&#xff0c;第二类是自定义异常。 面对自定义异常类型&#xff0c;使用raise抛异常&#xff0c;类型值默认为Exception&#x…...

html5复习一

目标 1、html5介绍及开发工具 2、html5标签 3、文本样式 4、图片标签和超链接标签 知识点&#xff1a; 万维网的构成&#xff1a; 1、url:统一资源定位器 2、http/https:超文本传输协议 3、html&#xff1a;超文本标记语言 html的后缀名&#xff1a; .html 和 .htm html基本…...

SSL/TLS,SSL,TLS分别是什么

SSL/TLS&#xff0c;SSL&#xff0c;TLS分别是什么 SSL&#xff08;Secure Sockets Layer&#xff0c;安全套接层&#xff09; 定义与发展历程&#xff1a; SSL 是一种早期的网络安全协议&#xff0c;旨在为网络通信提供保密性、数据完整性和身份验证等安全保障。它最初由网景…...

css iframe标签使用

<iframe> 标签用于在网页中嵌入另一个 HTML 页面。它非常灵活&#xff0c;可用于嵌入内容&#xff0c;比如其他网站、视频、地图等。以下是有关 <iframe> 的详细介绍及使用方法&#xff1a; 基本语法 <iframe src"URL" width"宽度" height…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

LangFlow技术架构分析

&#x1f527; LangFlow 的可视化技术栈 前端节点编辑器 底层框架&#xff1a;基于 &#xff08;一个现代化的 React 节点绘图库&#xff09; 功能&#xff1a; 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...