自动编码器与图像操作:从聚类到生成与攻击

立即解锁
发布时间: 2025-09-06 00:06:05 阅读量: 17 订阅数: 44 AIGC
PDF

现代计算机视觉与PyTorch

### 自动编码器与图像操作:从聚类到生成与攻击 #### 1. 卷积自动编码器与图像预测 卷积自动编码器在图像预测方面比普通自动编码器表现更优,能做出更清晰的图像预测。你可以尝试改变编码器和解码器中的通道数量,并分析结果的变化。 #### 2. 使用t - SNE对相似图像进行分组 在之前的内容中,我们假设相似图像会有相似的嵌入表示,不同图像则有不同的嵌入表示,并将每个图像表示为低维向量。但尚未详细研究图像相似度度量和嵌入表示。 这里,我们将使用t - SNE技术把卷积自动编码器的64维瓶颈向量降维到二维空间,使相似的数据点聚集在一起,不同的数据点远离彼此。具体步骤如下: 1. 初始化列表以存储潜在向量和图像的对应类别: ```python latent_vectors = [] classes = [] ``` 2. 遍历验证数据加载器中的图像,存储编码器层的输出和每个图像的对应类别: ```python for im,clss in val_dl: latent_vectors.append(model.encoder(im).view(len(im),-1)) classes.extend(clss) ``` 3. 拼接潜在向量的NumPy数组: ```python latent_vectors = torch.cat(latent_vectors).cpu().detach().numpy() ``` 4. 导入t - SNE并指定将向量转换为二维向量: ```python from sklearn.manifold import TSNE tsne = TSNE(2) ``` 5. 对图像嵌入执行t - SNE的拟合变换: ```python clustered = tsne.fit_transform(latent_vectors) ``` 6. 绘制拟合t - SNE后的数据点: ```python fig = plt.figure(figsize=(12,10)) cmap = plt.get_cmap('Spectral', 10) plt.scatter(*zip(*clustered), c=classes, cmap=cmap) plt.colorbar(drawedges=True) ``` 通过上述操作,我们可以看到同一类别的图像聚集在一起,这证明了瓶颈层的值使得相似图像具有相似的值。 #### 3. 理解变分自动编码器(VAEs) ##### 3.1 VAEs的需求 在之前的聚类场景中,当嵌入向量处于两个聚类之间时,无法保证能生成逼真的图像。VAEs可以解决这个问题,它能生成均值为0、标准差为1的向量,从而确保生成的图像也具有这样的统计特性。 为了说明普通方法的局限性,我们按以下步骤生成图像: 1. 计算验证图像的潜在向量: ```python latent_vectors = [] classes = [] for im,clss in val_dl: latent_vectors.append(model.encoder(im)) classes.extend(clss) latent_vectors = torch.cat(latent_vectors).cpu().detach().numpy().reshape(10000, -1) ``` 2. 生成随机向量: ```python rand_vectors = [] for col in latent_vectors.transpose(1,0): mu, sigma = col.mean(), col.std() rand_vectors.append(sigma*torch.randn(1,100) + mu) ``` 3. 绘制重构图像: ```python rand_vectors=torch.cat(rand_vectors).transpose(1,0).to(device) fig,ax = plt.subplots(10,10,figsize=(7,7)); ax = iter(ax.flat) for p in rand_vectors: img = model.decoder(p.reshape(1,64,2,2)).view(28,28) show(img, ax=next(ax)) ``` 从输出结果可以看出,生成的图像不如之前清晰,因为我们事先不知道能生成逼真图像的嵌入向量范围。 ##### 3.2 VAEs的工作原理 VAEs构建网络的方式使得从预定义分布生成的随机向量能够生成逼真的图像。具体策略如下: 1. 编码器为每个图像输出两个向量,一个表示均值,另一个表示标准差。 2. 从这两个向量中获取一个修改后的向量,它是均值与标准差乘以一个随机小数的和,且修改后的向量与原向量维度相同。 3. 将修改后的向量作为输入传递给解码器以获取图像。 4. 优化的损失值是KL散度损失和均方损失的组合: - KL散度损失:衡量均值向量和标准差向量的分布与0和1的偏差。 - 均方损失:用于重构(解码)图像的优化。 ##### 3.3 KL散度 KL散度用于解释两组数据分布之间的差异。在我们的场景中,希望瓶颈特征值遵循均值为0、标准差为1的正态分布,因此使用KL散度损失来衡量瓶颈特征值与预期分布的差异。其计算公式为: \[ KL divergence = \frac{1}{n} \sum_{i=1}^{n} \left( \frac{\sigma_{i}^{2} + \mu_{i}^{2}}{2} - \log(\sigma_{i}) - \frac{1}{2} \right) \] 其中,\(\sigma\)和\(\mu\)分别表示每个输入图像的均值和标准差。通过最小化均方误差确保均值向量分布在0附近,通过公式中的其他项确保标准差向量分布在1附近。 ##### 3.4 构建VAE 以下是构建VAE以生成手写数字新图像的代码: 1. 安装必要的库并加载数据: ```python !pip install -q torch_snippets from torch_snippets import * import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim from torchvision import datasets, transforms from torchvision.utils import make_grid device = 'cuda' if torch.cuda.is_available() else 'cpu' train_dataset = datasets.MNIST(root='MNIST/', train=True, transform=transforms.ToTensor(), download=True) test_dataset = datasets.MNIST(root='MNIST/', train=False, transform=transforms.ToTensor(), download=True) train_loader = torch.utils.data.DataLoader(dataset = train_dataset, batch_size=64, shuffle=True) test_loader = torch.utils.data.DataLoader(dataset= test_dataset, batch_size=64, shuffle=False) ``` 2. 定义VAE神经网络类: ```python class VAE(nn.Module): def __init__(self, x_dim, h_dim1, h_dim2, z_dim): super(VAE, self).__init__() self.d1 = nn.Linear(x_dim, h_dim1) self.d2 = nn.Linear(h_dim1, h_dim2) self.d31 = nn.Linear(h_dim2, z_dim) self.d32 = nn.Linear(h_dim2, z_dim) self.d4 = nn.Linear(z_dim, h_dim2) self.d5 = nn.Linear(h_dim2, h_dim1) self.d6 = nn.Linear(h_dim1, x_dim) def encoder(self, x): h = F.relu(self.d1(x)) h = F.relu(self.d2(h)) return self.d31(h), self.d32(h) def sampling(self, mean, log_var): std = torch.exp(0.5*log_var) eps = torch.randn_like(std) return eps.mul(std).add_(mean) def decoder(self, z): h = F.relu(self.d4(z)) h = F.relu(self.d5(h)) return F.sigmoid(self.d6(h)) def forward(self, x): mean, log_var = self.encoder(x.view(-1, 784)) z = self.sampling(mean, log_var) return self.decoder(z), mean, log_var ``` 3. 定义训练和验
corwn 最低0.47元/天 解锁专栏
买1年送3月
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

张_伟_杰

人工智能专家
人工智能和大数据领域有超过10年的工作经验,拥有深厚的技术功底,曾先后就职于多家知名科技公司。职业生涯中,曾担任人工智能工程师和数据科学家,负责开发和优化各种人工智能和大数据应用。在人工智能算法和技术,包括机器学习、深度学习、自然语言处理等领域有一定的研究
最低0.47元/天 解锁专栏
买1年送3月
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看
立即解锁

专栏目录

最新推荐

DHT11异常复位难题破解:STM32H7平台底层驱动+电源设计深度剖析

![STM32H743驱动DHT11数字温湿度传感器【支持STM32H7系列单片机_HAL库驱动】.zip](https://khuenguyencreator.com/wp-content/uploads/2021/07/stm32-dht11.jpg) # 摘要 DHT11传感器在嵌入式系统中广泛应用,但其在实际使用过程中常出现异常复位问题,影响数据采集的稳定性与可靠性。本文以基于STM32H7平台的应用为研究对象,系统分析了DHT11异常复位的现象与背景,深入剖析其通信协议、驱动机制及异常处理策略。进一步从硬件电源设计角度探讨了供电稳定性对传感器复位行为的影响,并结合软硬件协同调试

MySQL备份与恢复全攻略:保障数据安全的10个关键步骤

![MySQL备份与恢复全攻略:保障数据安全的10个关键步骤](https://www.ubackup.com/enterprise/screenshot/en/others/mysql-incremental-backup/incremental-backup-restore.png) # 摘要 MySQL数据库的备份与恢复是保障数据安全性与业务连续性的核心环节。本文系统阐述了MySQL备份与恢复的核心概念、理论基础与实践方法,涵盖物理备份与逻辑备份的机制、策略设计原则及自动化实现路径。文章深入解析了InnoDB热备、二进制日志应用、RTO与RPO指标等关键技术要素,并结合实战操作说明

低耗SDK设计指南:移动环境下电量与流量控制技巧

![低耗SDK设计指南:移动环境下电量与流量控制技巧](https://img-blog.csdnimg.cn/direct/8979f13d53e947c0a16ea9c44f25dc95.png) # 摘要 随着移动应用功能日益复杂,资源消耗问题成为影响用户体验和应用性能的关键因素。本文系统研究了移动应用开发中的电量与流量优化问题,深入分析了移动设备电量消耗的主要来源与流量控制机制,探讨了Android与iOS平台在电量管理上的差异,并提出了基于用户行为的流量预测模型与优化策略。针对低耗SDK的开发实践,本文设计了模块化架构与自适应调控算法,并通过性能测试与A/B对比验证了优化效果。

插件化架构设计解析:iFIAS+如何实现灵活扩展与模块解耦(架构师进阶篇)

![插件化架构设计解析:iFIAS+如何实现灵活扩展与模块解耦(架构师进阶篇)](https://img-blog.csdnimg.cn/direct/592bac0bdd754f2cbfb7eed47af1d0ef.png) # 摘要 本文围绕插件化架构的设计理念与工程实践展开,重点介绍iFIAS+架构的核心机制与应用价值。首先阐述插件化架构的基本组成与设计原则,深入解析iFIAS+在模块化、接口抽象与服务注册方面的实现逻辑。随后通过iFIAS+的模块化设计实践,探讨插件的开发规范、加载机制、热更新策略及版本管理方案。结合实际业务场景,分析该架构在订单处理、支付扩展、性能优化及安全管理

误差来源全面曝光:斜边法MTF计算的校正方法研究

# 摘要 斜边法是光学成像系统中常用的调制传递函数(MTF)测量方法,但其在实际应用中存在多种误差来源,影响测量精度。本文系统阐述了斜边法MTF计算的基本原理,深入分析了光学系统像差、探测器响应非理想、边缘定位误差、环境噪声等导致测量偏差的关键因素。在此基础上,构建了基于数学建模的误差校正理论框架,提出了多项式拟合与误差补偿策略,并通过实验验证了校正模型的有效性与适应性。研究结果为提升MTF测量精度提供了理论支持和技术路径,同时为工程实践中实现高精度、实时MTF检测提供了可行方案。 # 关键字 斜边法;MTF;误差校正;光学像差;边缘响应;傅里叶变换 参考资源链接:[图像斜边MT

【MFC跨版本迁移实战】:从VS2010到VS2022的15年技术演进总结(附兼容性解决方案)

![【MFC跨版本迁移实战】:从VS2010到VS2022的15年技术演进总结(附兼容性解决方案)](https://img-blog.csdnimg.cn/c42da0d3603947558f729e652dae1dbd.png) # 摘要 随着Visual Studio与MFC框架的持续演进,跨版本迁移成为维护和升级传统MFC应用的关键挑战。本文系统梳理了MFC与Visual Studio各版本的发展脉络,深入分析了迁移过程中涉及的技术基础,包括编译器更新、库兼容性、框架结构变化等核心问题。结合从VS2010到VS2022的实际迁移案例,本文详细探讨了项目配置调整、编译错误修复及运行

Python元类(Metaclass)深度解析:掌握类创建机制与高级编程技巧

# 摘要 本文系统探讨了Python中元类的基本概念、工作机制及其在软件开发中的高级应用。从类的创建过程入手,分析了type函数在类动态生成中的核心作用,并深入探讨了自定义元类的构建方法及其在继承体系中的行为表现。文章重点展示了元类在设计模式、代码生成、接口约束等方面的应用场景,结合ORM框架、序列化机制及插件系统的实际案例,说明了元类在大型项目中的实战价值。同时,本文也评估了元类使用的复杂性与潜在风险,提出了合理使用元类的最佳实践,为开发者提供理论支持与实践指导。 # 关键字 元类;type函数;类创建;设计模式;ORM框架;最佳实践 参考资源链接:[深入解析Python类和对

DMA中断与SPI外设冲突排查实战:快速定位问题的6大技巧

![stm32F407 SPI1/SPI2 DMA 方式读写 CH376S](https://img-blog.csdnimg.cn/direct/10c17a74ab934a1fa68313a74fae4107.png) # 摘要 本文系统性地探讨了DMA与SPI技术的基础原理、协同工作机制及其在实际应用中可能出现的中断冲突问题。通过对DMA传输机制与SPI通信协议的深入解析,结合嵌入式系统中的典型应用场景,文章重点分析了中断优先级配置、资源竞争以及时序不匹配等引发冲突的关键因素。在此基础上,提出了基于日志分析、逻辑波形捕获和分段隔离法的高效问题排查技巧,并结合实际案例展示了中断优先级

非平稳信号处理进阶:红白噪声检验的核心作用与Matlab应用

![非平稳信号处理进阶:红白噪声检验的核心作用与Matlab应用](https://img-blog.csdnimg.cn/2020112915251671.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NodWlkaWRlaHVheWlyZW4=,size_16,color_FFFFFF,t_70) # 摘要 红白噪声检验在非平稳信号处理中具有重要作用,是识别信号中噪声成分、提升分析精度的关键技术。本文系统阐述了红白噪声的基本

高并发场景下稳定性如何保障?PowerBuilder正则表达式多线程实战解析

![高并发场景下稳定性如何保障?PowerBuilder正则表达式多线程实战解析](https://ask.qcloudimg.com/http-save/yehe-4337369/ygstpaevp5.png) # 摘要 在高并发场景下,系统稳定性成为软件架构设计中的核心挑战。本文围绕高并发系统的基本理论、多线程编程实践以及正则表达式的高效应用展开研究,系统分析了并发模型、线程调度、资源竞争、限流降级、熔断机制等关键技术点。以PowerBuilder平台为实践基础,深入探讨了多线程任务的创建、同步与优化策略,并结合正则表达式的高级应用,提出在高并发环境下提升文本处理效率的优化方案。通过