经典网络解(三) 生成模型VAE | 自编码器、变分自编码器|有监督,无监督
文章目录
- 1 有监督与无监督
- 2 生成模型
- 2.1 重要思路
- 3 VAE
- 编码器怎么单独用?
- 解码器怎么单独用?
- 为什么要用变分
- 变分自编码器推导
- 高斯混合模型
- 4 代码实现
之前我们的很多网络都是有监督的
生成网络都是无监督的(本质就是密度估计),我们首先来讲有监督学习,无监督学习
1 有监督与无监督
有监督学习
目标学习X到Y的映射,有正确答案标注
示例
分类回归
目标检测
语义分割
无监督学习
没有标记,找出隐含在数据里的模型或者结构
示例
聚类
降维 1 线性降维:PCA主成分分析 2 非线性降维:特征学习(自编码)
密度估计
当谈论有监督学习和无监督学习时,你可以将其比喻为烹饪和探险两种不同的方式:
有监督学习就像是在烹饪中的烹饪食谱。你有一本详细的烹饪书(类似于带标签的训练数据),书中告诉你每一步应该怎么做,包括每个食材的量和准备方式(就像标签指导模型的输出)。你只需按照指示的步骤执行,最终会得到一道美味的菜肴。在这个过程中,你不需要创造新的食谱,只需遵循已有的指导。
无监督学习则类似于一场探险,你被带到一个未知的地方,没有地图或导航,只有一堆不同的植物和动物(类似于未标记的数据)。你的任务是探索并发现任何可能的规律、相似性或特征,以确定它们之间的关系(就像从未标记的数据中发现模式)。在这个过程中,你可能会发现新的物种或新的地理特征,而无需事先知道要找什么。
2 生成模型
学习训练模型的分布,然后产生自己的模型!给定训练集,产生与训练集同分布的新样本!
生成模型应用
图像合成 图像属性编辑 图片风格转移等
2.1 重要思路
显示密度估计
显示定义并求解分布
又可以分为
1 可以求解的
PixelRNN
2 不可以求解的
VAE
隐示密度估计:学习一个模型,而无需定义它
GAN
3 VAE
变分自编码器
我们先介绍自编码器和解码器
编码器
编码器的作用一般都是提取压缩特征,降低维度,保证数据里最核心最重要的信息被保留
解码器
但是只有编码器是不行的,我不知道编码器提取的特征怎么样,所以我们需要加上解码器,解码器就可以利用提取到的特征进行重构原始数据,这样的话重构出来的图像越像原图说明编码器越好
编码器怎么单独用?
做分类或其他有监督任务
对于输入数据,利用编码器提取特征,然后输出预测标签,根据真实标签进行计算损失函数,微调网络,这种情况可以适用于少量的数据标记情况

但是这样的效果往往不如在有监督网络微调的方式
解码器怎么单独用?
做图像生成
比如给一个随机的二维编码,我就可以生成一个真实图像样本
讲完了编码器解码器,我们想问为什么要用变分?变分是什么
为什么要用变分
上面的我的自编码器的思想太死板了!他只能学到一些离散的编码,学到自己见过的内容,无法组合创新
VAE引入了概率分布的概念,它假设数据的潜在表示(潜在空间)是连续的,并使用概率分布来建模这个潜在空间。具体来说,VAE假设潜在表示服从一个潜在空间的高斯分布,其中编码器学习生成均值和方差,而解码器从这个分布中采样。这种建模方式允许VAE学习数据的连续、平滑的表示,而不仅仅是对数据的离散编码。

自编码器输入图像后,编码器会生成一个编码
而如图所示变分自编码器是输入图片,编码器输出一个分布(均值和方差)
生成图像的时候,从这个分布中采样送入解码器即可
两个损失函数
一个最小化重构误差
一个尽可能使得潜在表示的概率分布接近标准正态分布使得0均值1方差(损失函数一方面可以避免退化成自编码器,另一方面保证采样简单)
变分自编码器推导
高斯混合模型
用很多个简单高斯逼近最后的比较复杂的分布
优化解码器参数使得似然函数L最大, 但是实际中由于有隐变量的存在而无法积分,所以我们只能通过近似的方式
具体推导可以查看如下这篇博客
从零推导:变分自编码器(VAE) - 知乎 (zhihu.com)
4 代码实现
import torch
import torch.nn as nn
import torch.nn.functional as Fclass VAE(nn.Module):def __init__(self, input_dim, hidden_dim, latent_dim):super(VAE, self).__init__()self.fc1 = nn.Linear(input_dim, hidden_dim)self.fc21 = nn.Linear(hidden_dim, latent_dim)self.fc22 = nn.Linear(hidden_dim, latent_dim)self.fc3 = nn.Linear(latent_dim, hidden_dim)self.fc4 = nn.Linear(hidden_dim, input_dim)def encode(self, x):h1 = F.relu(self.fc1(x))mu = self.fc21(h1)log_var = self.fc22(h1)return mu, log_vardef reparameterize(self, mu, log_var):std = torch.exp(0.5*log_var)eps = torch.randn_like(std)z = mu + eps*stdreturn zdef decode(self, z):h3 = F.relu(self.fc3(z))recon_x = torch.sigmoid(self.fc4(h3))return recon_xdef forward(self, x):mu, log_var = self.encode(x)z = self.reparameterize(mu, log_var)recon_x = self.decode(z)return recon_x, mu, log_var# 定义损失函数,通常使用重建损失和KL散度
def loss_function(recon_x, x, mu, log_var):BCE = F.binary_cross_entropy(recon_x, x, reduction='sum')KLD = -0.5 * torch.sum(1 + log_var - mu.pow(2) - log_var.exp())return BCE + KLD# 创建VAE实例并进行训练
input_dim = 784 # 用于示例的MNIST数据集
hidden_dim = 400
latent_dim = 20
vae = VAE(input_dim, hidden_dim, latent_dim)# 定义优化器
optimizer = torch.optim.Adam(vae.parameters(), lr=1e-3)# 训练VAE
def train_vae(train_loader, vae, optimizer, num_epochs):vae.train()for epoch in range(num_epochs):for batch_idx, data in enumerate(train_loader):data = data.view(-1, input_dim)recon_batch, mu, log_var = vae(data)loss = loss_function(recon_batch, data, mu, log_var)optimizer.zero_grad()loss.backward()optimizer.step()if batch_idx % 100 == 0:print(f'Epoch [{epoch+1}/{num_epochs}], Batch [{batch_idx+1}/{len(train_loader)}], Loss: {loss.item()}')# 使用MNIST数据集示例
from torchvision import datasets, transforms
from torch.utils.data import DataLoadertransform = transforms.Compose([transforms.ToTensor()])
train_dataset = datasets.MNIST(root='./data', train=True, transform=transform, download=True)
train_loader = DataLoader(train_dataset, batch_size=128, shuffle=True, num_workers=4)num_epochs = 10
train_vae(train_loader, vae, optimizer, num_epochs)相关文章:
经典网络解(三) 生成模型VAE | 自编码器、变分自编码器|有监督,无监督
文章目录 1 有监督与无监督2 生成模型2.1 重要思路 3 VAE编码器怎么单独用?解码器怎么单独用?为什么要用变分变分自编码器推导高斯混合模型 4 代码实现 之前我们的很多网络都是有监督的 生成网络都是无监督的(本质就是密度估计)&a…...
gif怎么转换成视频MP4?
gif怎么转换成视频MP4?GIF动图已成为一种风靡网络的流行的特殊图片文件,其循环播放和逐帧呈现的特点使其在社交媒体、聊天应用等场合广泛应用,平时我们进行群聊是,大家总会一些gif动态表情的出现而感觉非常的开行,gif动…...
标准化、逻辑回归、随机梯度参数估计
机器学习入门 数据预处理: 将?替换为缺失值 data data.replace(to_replace"?",valuenp.nan)丢掉缺失值 data.dropna(how"any) #howall删除全是缺失值的行和列 #haowany删除有缺失值的行和列将数据集划分成测试集和训练集 data[colu…...
【数据结构】【C++】封装哈希表模拟实现unordered_map和unordered_set容器
【数据结构】&&【C】封装哈希表模拟实现unordered_map和unordered_set容器 一.哈希表的完成二.改造哈希表(泛型适配)三.封装unordered_map和unordered_set的接口四.实现哈希表迭代器(泛型适配)五.封装unordered_map和unordered_set的迭代器六.解决key不能修改问题七.实…...
26967-2011 一般用喷油单螺杆空气压缩机
声明 本文是学习GB-T 26967-2011 一般用喷油单螺杆空气压缩机. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了一般用喷油单螺杆空气压缩机(以下简称"单螺杆空压机")的术语和定义、型号、基本 参数、要求、试验方法、…...
Opengl之模板测试
当片段着色器处理完一个片段之后,模板测试(Stencil Test)会开始执行,和深度测试一样,它也可能会丢弃片段。接下来,被保留的片段会进入深度测试,它可能会丢弃更多的片段。模板测试是根据又一个缓冲来进行的,…...
iPhone苹果手机复制粘贴内容提示弹窗如何取消关闭提醒?
经常使用草柴APP查询淘宝、天猫、京东商品优惠券拿购物返利的iPhone苹果手机用户,复制商品链接后打开草柴APP粘贴商品链接查券时总是弹窗提示粘贴内容,为此很多苹果iPhone手机用户联系客服询问如何关闭iPhone苹果手机复制粘贴内容弹窗提醒功能的方法如下…...
释放潜力:人工智能对个性化学习的影响
人工智能有潜力通过使个性化学习成为一种实用且可扩展的方法来彻底改变教育。它使教育工作者能够满足每个学生的独特需求,促进参与并提高整体学习成果。然而,必须解决道德问题,并确保技术仍然是教育工作者手中的工具,为学生创造更…...
什么是Local Storage和Session Storage?它们之间有什么区别?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是 Local Storage 和 Session Storage?Local Storage(本地存储)Session Storage(会话存储) ⭐ 区别⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的…...
单样本T检验|独立样本T检验|配对样本T检验(绘图)
学生 t 检验的基本思想是通过比较两组数据的均值以及它们的方差来判断是否存在显著差异。下面更详细地解释了学生 t 检验的基本思想: 均值比较:学生 t 检验的首要目标是比较两组数据的均值。我们通常有一个零假设(null hypothesis)…...
全面解读 SQL 优化 - 统计信息
一、简介 数据库中的优化器(optimizer)是一个重要的组件,用于分析 SQL 查询语句,并生成执行计划。在生成执行计划时,优化器需要依赖数据库中的统计信息来估算查询的成本,从而选择最优的执行计划。以下是关…...
Spring整合RabbitMQ——生产者
1.生产者整合步骤 添加依赖坐标,在producer和consumer模块的pom文件中各复制一份。 配置producer的配置文件 配置producer的xml配置文件 编写测试类发送消息...
Spring的注解开发-Bean基本注解开发
Bean基本注解开发 Spring除了xml配置文件进行配置之外,还可以使用注解方式进行配置,注解方式慢慢成为xml配置的替代方案。我们有了xml开发的经验,学习注解开发就会方便很多,注解开发更加快捷方便。Spring提供的注解有三个版本 2.…...
【Ubuntu18.04】Autoware.ai安装
Autoware.ai安装 引言1 ROS安装2 Ubuntu18.04安装Qt5.14.23 安装GCC、G4 Autoware.ai-1.14.0安装与编译4.1 源码的编译4.1.1 python2.7环境4.1,2 针对Ubuntu 18.04 / Melodic的依赖包安装4.1.3 先安装一些缺的ros依赖4.1.4 安装eigen3.3.74.1.5 安装opencv 3.4.164.1.6 编译4.1…...
SpringMVC 学习(一)Servlet
本系列文章为【狂神说 Java 】视频的课堂笔记,若有需要可配套视频学习。 1. Hello Servlet (1) 创建父工程 删除src文件夹 引入一些基本的依赖 <!--依赖--> <dependencies><dependency><groupId>junit</groupId><artifactId>…...
26943-2011 升降式高杆照明装置 课堂随笔
声明 本文是学习GB-T 26943-2011 升降式高杆照明装置. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了升降式高杆照明装置的技术要求、试验方法、检验规则以及标志、包装、运输及贮 存等。 本标准适用于公路、广场、机场、港口、…...
洛谷题解 | AT_abc321_c Primes on Interval
目录 题目翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 样例 #3样例输入 #3样例输出 #3 题目简化题目思路AC代码 题目翻译 【题目描述】 你决定用素数定理来做一个调查. 众所周知, 素数又被称为质数,其含义就是除了数…...
Quartus医院病房呼叫系统病床呼叫Verilog,源代码下载
名称:医院病房呼叫系统病床呼叫 软件:Quartus 语言:Verilog 要求: 1、用1~6个开关模拟6个病房的呼叫输入信号,1号优先级最高;1~6优先级依次降低; 2、 用一个数码管显示呼叫信号的号码;没信号呼叫时显示0;有多个信号呼叫时,显…...
ip的标准分类---分类的Ip
分类的 IP 即将 IP 地址划分为若干个固定类,每一类地址都由两个固定长度的字段组成。 其中第一个字段是网络号(net-id),它标志主机或路由器所连接的网络。一个网络号在整个因特网内必须是唯一的。 第二个字段是主机号…...
理解并掌握C#的Channel:从使用案例到源码解读(一)
引言 在C#的并发编程中,Channel是一种非常强大的数据结构,用于在生产者和消费者之间进行通信。本文将首先通过一个实际的使用案例,介绍如何在C#中使用Channel,然后深入到Channel的源码中,解析其内部的实现机制。 使用案…...
MicroOS:Arduino轻量级任务调度内核详解
1. MicroOS:面向Arduino的轻量级任务管理内核概述MicroOS是一个专为Arduino平台设计的极简型实时任务管理器,其核心定位并非替代FreeRTOS或Zephyr等完整RTOS,而是填补Arduino原生loop()单线程模型在多任务调度、精确定时与事件解耦方面的空白…...
告别Python环境依赖!用PyInstaller打包Tkinter/Selenium程序的最佳实践
告别Python环境依赖!用PyInstaller打包Tkinter/Selenium程序的最佳实践 你是否遇到过这样的尴尬场景?精心开发的Python程序在本地运行完美,但分享给同事或客户时,对方却因为缺少Python环境或依赖库而无法使用。尤其当程序涉及图形…...
【人物传记】唯一一位两次获得诺贝尔物理学奖-约翰·巴
1 约翰巴丁简介 约翰巴丁(英语:John Bardeen,1908年5月23日—1991年1月30日[6])是一名美国物理学家和工程师。他是唯一一个两度获得诺贝尔物理学奖的人:第一次是在1956年与威廉肖克利和沃尔特布拉顿一起发明晶体管&am…...
Llama-3.2V-11B-cot从零部署:Docker镜像运行与端口映射详解
Llama-3.2V-11B-cot从零部署:Docker镜像运行与端口映射详解 1. 项目概述 Llama-3.2V-11B-cot是基于Meta Llama-3.2V-11B-cot多模态大模型开发的高性能视觉推理工具。它针对双卡4090环境进行了深度优化,特别适合想要体验Llama多模态大模型但缺乏专业部署…...
你用AI写代码时,是不是总觉得“它懂语法,却搞不定真实工程”?Composer 2的答案在这里
很多开发者都有过这种体验:把一个真实项目需求甩给AI,它能秒出语法完美的代码片段,可一到大型代码库、遗留系统、多文件联动的时候,就开始原地打转。改了半天核心逻辑没动,引入新问题,或者干脆在长链条任务…...
Wan2.2-I2V-A14B文生视频入门必看:WebUI可视化操作+命令行示例详解
Wan2.2-I2V-A14B文生视频入门必看:WebUI可视化操作命令行示例详解 1. 快速了解Wan2.2-I2V-A14B Wan2.2-I2V-A14B是一款强大的文生视频模型,能够根据文本描述生成高质量视频内容。这个私有部署镜像专为RTX 4090D 24GB显存显卡优化,内置完整运…...
QGIS 3.28 保姆级配置指南:从中文界面到高德底图,手把手搞定智驾地图工作流
QGIS 3.28 智能驾驶地图工程师开箱指南:从零构建高精度工作流 刚拿到工牌的智能驾驶地图工程师小李,面对全新的QGIS界面有些手足无措。作为空间数据处理的核心工具,QGIS的配置直接决定了后续高精地图生产的效率与精度。本文将带你完成从软件…...
从AlexNet到MobileNet:深度可分离卷积如何用1/4参数量实现高效推理?
从AlexNet到MobileNet:深度可分离卷积如何用1/4参数量实现高效推理? 在移动互联网时代,AI模型部署正经历从云端到边缘的范式转移。当我们谈论"高效推理"时,实际上是在探讨一个核心矛盾:如何在有限的硬件资源…...
探索Unity全功能的开源方案:UniHacker跨平台功能扩展工具深度指南
探索Unity全功能的开源方案:UniHacker跨平台功能扩展工具深度指南 【免费下载链接】UniHacker 为Windows、MacOS、Linux和Docker修补所有版本的Unity3D和UnityHub 项目地址: https://gitcode.com/GitHub_Trending/un/UniHacker Unity作为游戏开发领域的行业标…...
如何突破Windows权限壁垒?系统管理专家的秘密武器
如何突破Windows权限壁垒?系统管理专家的秘密武器 【免费下载链接】NSudo [Deprecated, work in progress alternative: https://github.com/M2Team/NanaRun] Series of System Administration Tools 项目地址: https://gitcode.com/gh_mirrors/ns/NSudo 在W…...
