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

使用Python实现深度学习模型:自动编码器(Autoencoder)

自动编码器(Autoencoder)是一种无监督学习的神经网络模型,用于数据的降维和特征学习。它由编码器和解码器两个部分组成,通过将输入数据编码为低维表示,再从低维表示解码为原始数据来学习数据的特征表示。本教程将详细介绍如何使用Python和PyTorch库实现一个简单的自动编码器,并展示其在图像数据上的应用。

什么是自动编码器(Autoencoder)?

自动编码器是一种用于数据降维和特征提取的神经网络。它包括两个主要部分:

  • 编码器(Encoder):将输入数据编码为低维的潜在表示(latent representation)。
  • 解码器(Decoder):从低维的潜在表示重建输入数据。

通过训练自动编码器,使得输入数据和重建数据之间的误差最小化,从而实现数据的压缩和特征学习。

实现步骤

步骤 1:导入所需库

首先,我们需要导入所需的Python库:PyTorch用于构建和训练自动编码器模型,Matplotlib用于数据的可视化。

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
import matplotlib.pyplot as plt

步骤 2:准备数据

我们将使用MNIST数据集作为示例数据,MNIST是一个手写数字数据集,常用于图像处理的基准测试。

# 定义数据预处理
transform = transforms.Compose([transforms.ToTensor()])# 下载并加载训练数据
train_dataset = datasets.MNIST(root='./data', train=True, transform=transform, download=True)
train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)

步骤 3:定义自动编码器模型

我们定义一个简单的自动编码器模型,包括编码器和解码器两个部分。

class Autoencoder(nn.Module):def __init__(self):super(Autoencoder, self).__init__()# 编码器self.encoder = nn.Sequential(nn.Linear(28 * 28, 128),nn.ReLU(),nn.Linear(128, 64),nn.ReLU(),nn.Linear(64, 32))# 解码器self.decoder = nn.Sequential(nn.Linear(32, 64),nn.ReLU(),nn.Linear(64, 128),nn.ReLU(),nn.Linear(128, 28 * 28),nn.Sigmoid())def forward(self, x):x = self.encoder(x)x = self.decoder(x)return x# 创建模型实例
model = Autoencoder()

步骤 4:定义损失函数和优化器

我们选择均方误差(MSE)损失函数作为模型训练的损失函数,并使用Adam优化器进行优化。

criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

步骤 5:训练模型

我们使用定义的自动编码器模型对MNIST数据集进行训练。

num_epochs = 20for epoch in range(num_epochs):for data in train_loader:inputs, _ = datainputs = inputs.view(-1, 28 * 28)  # 将图像展平为向量# 前向传播outputs = model(inputs)loss = criterion(outputs, inputs)# 反向传播和优化optimizer.zero_grad()loss.backward()optimizer.step()print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')

步骤 6:可视化结果

训练完成后,我们可以使用训练好的自动编码器模型对测试数据进行编码和解码,并可视化重建结果。

# 加载测试数据
test_dataset = datasets.MNIST(root='./data', train=False, transform=transform, download=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=10, shuffle=False)# 获取一些测试数据
dataiter = iter(test_loader)
images, labels = dataiter.next()
images_flat = images.view(-1, 28 * 28)# 使用模型进行重建
outputs = model(images_flat)# 可视化原始图像和重建图像
fig, axes = plt.subplots(nrows=2, ncols=10, sharex=True, sharey=True, figsize=(20, 4))for images, row in zip([images, outputs], axes):for img, ax in zip(images, row):ax.imshow(img.view(28, 28).detach().numpy(), cmap='gray')ax.get_xaxis().set_visible(False)ax.get_yaxis().set_visible(False)plt.show()

总结

通过本教程,你学会了如何使用Python和PyTorch库实现一个简单的自动编码器(Autoencoder),并在MNIST数据集上进行训练和测试。自动编码器是一种强大的工具,能够有效地进行数据降维和特征学习,广泛应用于图像处理、异常检测、数据去噪等领域。希望本教程能够帮助你理解自动编码器的基本原理和实现方法,并启发你在实际应用中使用自动编码器解决数据处理问题。

相关文章:

使用Python实现深度学习模型:自动编码器(Autoencoder)

自动编码器(Autoencoder)是一种无监督学习的神经网络模型,用于数据的降维和特征学习。它由编码器和解码器两个部分组成,通过将输入数据编码为低维表示,再从低维表示解码为原始数据来学习数据的特征表示。本教程将详细介…...

数据结构--树与二叉树--编程实现以孩子兄弟链表为存储结构递归求树的深度

数据结构–树与二叉树–编程实现以孩子兄弟链表为存储结构递归求树的深度 题目: 编程实现以孩子兄弟链表为存储结构,递归求树的深度。 ps:题目来源2025王道数据结构 思路: 从根结点开始 结点 N 的高度 max{N 孩子树的高度 1, N兄弟树的…...

Property xxx does not exist on type ‘Window typeof globalThis‘ 解决方法

问题现象 出现以上typescript警告,是因为代码使用了window的非标准属性,即原生 window 对象上不存在该属性。 解决办法 在项目 根目录 或者 src目录 下新建 xxx.d.ts 文件,然后进行对该 属性 进行声明即可。 注意:假如xxx.d.ts文…...

BOM..

区别:...

rust的版本问题,安装问题,下载问题

rust的版本、安装、下载问题 rust版本问题, 在使用rust的时候,应用rust的包,有时候包的使用和rust版本有关系。 error: failed to run custom build command for pear_codegen v0.1.2 Caused by: process didnt exit successfully: D:\rus…...

SDUT 链表9-------7-9 sdut-C语言实验-约瑟夫问题

7-9 sdut-C语言实验-约瑟夫问题 分数 20 全屏浏览 切换布局 作者 马新娟 单位 山东理工大学 n个人想玩残酷的死亡游戏,游戏规则如下: n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的…...

Anthropic绘制出了大型语言模型的思维图:大型语言模型到底是如何工作

今天,我们报告了在理解人工智能模型的内部运作方面取得的重大进展。我们已经确定了如何在 Claude Sonnet(我们部署的大型语言模型之一)中表示数百万个概念。这是对现代生产级大型语言模型的首次详细了解。这种可解释性的发现将来可以帮助我们…...

网络工程师练习题

网络工程师 随着company1网站访问量的不断增加,公司为company1设立了多台服务器。下面是不同用户ping网站www.company1.com后返回的IP地址及响应状况,如图8.58所示。从图8.58可以看出,域名www.company1.com对应了多个IP地址,说明在图8.59所示的NDS属性中启用了循环功能。在…...

思科模拟器--03.RIP协议路由--24.5.17

1.首先,先创建两个个人电脑:PC0和PC1和三个路由器:R1,R2和R3. (诀窍:建议用文本框标注一下重要简短的内容; 目的:降低失误概率,提高成功率!) 第0步:(个人电脑的IP,子网掩码和默认网关配置) 接着,可以先将个人电脑的IP和网关先配置一下…...

当实时互动遇上新硬件:GIAC 全球互联网架构大会「新硬件」专题论坛

今年,被广泛预见为 AI 技术关键转折点的年份,生成式 AI 热度不断攀升,应用落地加速深化。在这个过程中,为了适应日益复杂的业务需求,背后的架构也将迎来新一轮的革新。 而在这场技术变革的浪潮中,GIAC 全球…...

赶紧收藏!2024 年最常见 20道 Redis面试题(三)

上一篇地址:赶紧收藏!2024 年最常见 20道 Redis面试题(二)-CSDN博客 五、Redis的持久化机制是什么? Redis 是一个高性能的键值存储系统,支持多种类型的数据结构,如字符串、哈希、列表、集合、…...

VMware 和 VirtualBox开机自启指定虚拟机详细教程

VMware上虚拟机随宿主机开机自启 1. 设置自动启动虚拟机 网上教程旧版的,界面和新版有所差异。17版本设置如下:VMware Workstation工作台 -> 文件 -> 配置自动启动虚拟机 -> 按顺序选择需要启动的虚拟机 VMWare17配置自动启动虚拟机提示&…...

note-网络是怎样连接的2 协议栈和网卡

助记提要 协议栈的结构协议栈创建连接的实际过程协议栈发送数据包的2个判断依据TCP确认数据收到的原理断开连接的过程路由表和ARPMAC地址的分配MAC模块的工作通过电信号读取数据的原理网卡和协议栈接收包的过程ICMPUDP协议的适用场景 2章 用电信号传输TCP/IP数据 探索协议栈和…...

ros学习之路径规划

一、全局路径规划中的地图 1、栅格地图(Grid Map)2、概率图(Cost Map)3、特征地图(Feature Map4、拓扑地图(Topological Map) 二、全局路径规划算法 1、Dijkstra 算法 2、最佳路径优先搜索算…...

Qt 顺序容器的详细介绍

一.顺序容器介绍 Qt 中的顺序容器包括 QVector、QList、QLinkedList 和 QStack。这些容器都提供了类似于 C STL 中的容器的功能,但是在 Qt 中提供了更多的功能和接口。 二.具体介绍 1.QVector QVector:是一个动态数组,可以在其末尾快速插入…...

基于语音识别的智能电子病历(三)之 M*Modal

讨论“基于语音识别的智能电子病历”,就绕不开 Nuance 和 M*Modal。这2个公司长时间的占据第一和第二的位置。下面介绍一下M*Modal。 这是2019年的一个新闻“专业医疗软件提供商3M公司为自己购买了一份圣诞礼物,即M*Modal IP LLC的医疗技术业务&#xf…...

理解Apache Storm的实际用途和应用场景

学习目标: 理解Apache Storm的实际用途和应用场景 学习内容: 1. 实时数据处理和分析 1.1 实时日志分析 公司可以使用Storm来实时处理和分析服务器日志。例如,电商网站可以实时监控用户行为日志,以检测异常活动(如DD…...

【iceberg】数据湖与iceberg调研与实战

文章目录 一. 为什么现在要强调数据湖1. 大数据架构发展历史2. Lambda架构与kappa架构3. 数据湖所具备的能力 二. iceberg是数据湖吗1. iceberg的诞生2. iceberg设计之table format从如上iceberg的数据结构可以知道,iceberg在数据查询时,1.查找文件的时间…...

xrdp多用户多控制界面远程控制

1、无桌面安装桌面(原本有ubuntu桌面的可以直接跳过这一步) Gnome 与 xfce 相比,xfce 由于其轻巧,它可以安装在低端台式机上。Xfce 优雅的外观,增强了用户体验,它对用户非常友好,性能优于其他桌…...

git会忽略我们工作改动中的大小写

在我们日常git工作中,我们对于文件名字的大小写修改正常是不会被git记录的 这是因为默认情况下git是不区分大小写的 这会导致一个问题,由于我们修改了文件名字的大小写,而对于文件之间相互依赖的导入代码没有对应修改 如果我们此时本地推送…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

flow_controllers

关键点&#xff1a; 流控制器类型&#xff1a; 同步&#xff08;Sync&#xff09;&#xff1a;发布操作会阻塞&#xff0c;直到数据被确认发送。异步&#xff08;Async&#xff09;&#xff1a;发布操作非阻塞&#xff0c;数据发送由后台线程处理。纯同步&#xff08;PureSync…...

Xcode 16 集成 cocoapods 报错

基于 Xcode 16 新建工程项目&#xff0c;集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...