当前位置: 首页 > 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…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

电脑桌面太单调,用Python写一个桌面小宠物应用。

下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡&#xff0c;可以响应鼠标点击&#xff0c;并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...

SQL进阶之旅 Day 22:批处理与游标优化

【SQL进阶之旅 Day 22】批处理与游标优化 文章简述&#xff08;300字左右&#xff09; 在数据库开发中&#xff0c;面对大量数据的处理任务时&#xff0c;单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”&#xff0c;深入探讨如何通过批量操作和游标技术提…...

Git 命令全流程总结

以下是从初始化到版本控制、查看记录、撤回操作的 Git 命令全流程总结&#xff0c;按操作场景分类整理&#xff1a; 一、初始化与基础操作 操作命令初始化仓库git init添加所有文件到暂存区git add .提交到本地仓库git commit -m "提交描述"首次提交需配置身份git c…...

P10909 [蓝桥杯 2024 国 B] 立定跳远

# P10909 [蓝桥杯 2024 国 B] 立定跳远 ## 题目描述 在运动会上&#xff0c;小明从数轴的原点开始向正方向立定跳远。项目设置了 $n$ 个检查点 $a_1, a_2, \cdots , a_n$ 且 $a_i \ge a_{i−1} > 0$。小明必须先后跳跃到每个检查点上且只能跳跃到检查点上。同时&#xff0…...