VAE模型及pytorch实现

VAE模型及pytorch实现

    • VAE模型推导部分
    • 最小化KL散度推导
    • 代码部分
      • 损失函数
      • Encoder部分
      • Decoder部分
      • VAE整体架构
    • VAE问题
    • 参考资料

VAE(变分自编码器)是一种生成模型,结合了自编码器和概率图模型的思想。它通过学习数据的潜在分布,可以生成新的数据样本。VAE通过将输入数据映射到潜在空间中的分布,并在训练过程中最大化数据与潜在变量之间的条件概率来实现。其关键思想在于编码器将输入数据编码成潜在分布的参数,解码器则从这个分布中采样生成新的数据。这种生成方式不仅能够生成新的数据,还能够在潜在空间中进行插值和操作,提供了强大的特征学习和数据生成能力。

AE论文:Auto-Encoding Variational Bayes

VAE论文:Semi-supervised Learning with Deep Generative Models

2023-11-28_16-06-34

VAE模型推导部分

2023-11-28_10-05-53

假设 P ( z ) P(z) P(z)是一个正态分布, x ∣ z ∼ N ( μ ( z ) , σ ( z ) ) x|z \sim N(\mu(z),\sigma(z)) xzN(μ(z),σ(z))是x从z分布中进行采样得到的。
P ( x ) = ∫ z P ( z ) P ( x ∣ z ) d z P(x)=\int_zP(z)P(x|z)dz P(x)=zP(z)P(xz)dz
为了最大化 P ( x ) P(x) P(x),我们采用极大似然估计
L = ∑ x l o g P ( x ) M a x i m i z i n g t h e l i k e l i h o o d o f t h e o b s e r v e d x L=\sum_{x}logP(x)\quad\mathrm{Maximizing~the~likelihood~of~the~observed~x} L=xlogP(x)Maximizing the likelihood of the observed x
l o g P ( x ) logP(x) logP(x)进一步进行变形
l o g P ( x ) = ∫ z q ( z ∣ x ) l o g P ( x ) d z q ( z ∣ x ) c a n b e a n y d i s t r i b u t i o n = ∫ z q ( z ∣ x ) l o g ( P ( z , x ) P ( z ∣ x ) ) d z = ∫ z q ( z ∣ x ) l o g ( P ( z , x ) q ( z ∣ x ) q ( z ∣ x ) P ( z ∣ x ) ) d z = ∫ z q ( z ∣ x ) l o g ( P ( z , x ) q ( z ∣ x ) ) d z + ∫ z q ( z ∣ x ) l o g ( q ( z ∣ x ) P ( z ∣ x ) ) d z ≥ ∫ z q ( z ∣ x ) l o g ( P ( x ∣ z ) P ( z ) q ( z ∣ x ) ) d z \begin{aligned} logP(x)=&\int_{z}q(z|x)logP(x)dz\quad\mathrm{q(z|x)~can~be~any~distribution} \\ &=\int_{z}q(z|x)log\left(\frac{P(z,x)}{P(z|x)}\right)dz=\int_{z}q(z|x)log\left(\frac{P(z,x)}{q(z|x)}\frac{q(z|x)}{P(z|x)}\right)dz \\ &=\int_{z}q(z|x)log\left(\frac{P(z,x)}{q(z|x)}\right)dz+\int_{z}q(z|x)log\left(\frac{q(z|x)}{P(z|x)}\right)dz \\ &\geq \int_{z}q(z|x)log\left(\frac{P(x|z)P(z)}{q(z|x)}\right)dz \end{aligned} logP(x)=zq(zx)logP(x)dzq(z∣x) can be any distribution=zq(zx)log(P(zx)P(z,x))dz=zq(zx)log(q(zx)P(z,x)P(zx)q(zx))dz=zq(zx)log(q(zx)P(z,x))dz+zq(zx)log(P(zx)q(zx))dzzq(zx)log(q(zx)P(xz)P(z))dz
因为 K L ( q ( z ∣ x ) ∣ ∣ P ( z ∣ x ) ) = ∫ z q ( z ∣ x ) l o g ( q ( z ∣ x ) P ( z ∣ x ) ) d z KL\left(q(z|x)||P(z|x)\right)=\int_{z}q(z|x)log\left(\frac{q(z|x)}{P(z|x)}\right)dz KL(q(zx)∣∣P(zx))=zq(zx)log(P(zx)q(zx))dz是大于0的数,所以,上述式子大于等于前面那一项。

​ 对于给定的 P ( x ∣ z ) P(x|z) P(xz),让KL尽可能小,就是让 L b L_b Lb最大。同时,当 K L KL KL尽可能小,也就是说明 q ( z ∣ x ) q(z|x) q(zx) p ( z ∣ x ) p(z|x) p(zx)这两个分布的相似度越高。

2023-11-28_10-09-17

​ 接下来我们就对 L b L_b Lb进行最大化变形处理,变形后左侧为,右侧为
L b = ∫ z q ( z ∣ x ) l o g ( P ( z , x ) q ( z ∣ x ) ) d z = ∫ z q ( z ∣ x ) l o g ( P ( x ∣ z ) P ( z ) q ( z ∣ x ) ) d z = ∫ z q ( z ∣ x ) log ⁡ ( P ( z ) q ( z ∣ x ) ) d z + ∫ z q ( z ∣ x ) l o g P ( x ∣ z ) d z = K L ( q ( z ∣ x ) ∣ ∣ P ( z ) ) + E q ( z ∣ x ) [ l o g P ( x ∣ z ) ] \begin{aligned} L_b&=\int_zq(z|x)log\left(\frac{P(z,x)}{q(z|x)}\right)dz=\int_zq(z|x)log\left(\frac{P(x|z)P(z)}{q(z|x)}\right)dz\\ &=\int_z q(z|x)\log (\frac{P(z)}{q(z|x)})dz+\int_zq(z|x)logP(x|z)dz\\ &=KL(q(z|x)||P(z))+E_{q(z|x)}[logP(x|z)] \end{aligned} Lb=zq(zx)log(q(zx)P(z,x))dz=zq(zx)log(q(zx)P(xz)P(z))dz=zq(zx)log(q(zx)P(z))dz+zq(zx)logP(xz)dz=KL(q(zx)∣∣P(z))+Eq(zx)[logP(xz)]

​ 如下所示,我们需要做的就是最小化 K L ( q ( z ∣ x ) ∣ ∣ P ( z ) ) KL(q(z|x)||P(z)) KL(q(zx)∣∣P(z))并最大化 E q ( z ∣ x ) [ l o g P ( x ∣ z ) ] E_{q(z|x)}[logP(x|z)] Eq(zx)[logP(xz)]。对于最小化KL,我们可以理解为输入一个 x x x,然后通过神经网络调参输出 μ ( x ) , σ ( x ) \mu_(x),\sigma(x) μ(x),σ(x),也就是让这个数值尽可能和 P ( z ) P(z) P(z)这个分布接近。这部分相当于Encoder部分。

​ 在Encoder部分结束后,对于第2项,从已知的 z z z,也就是数据的隐式特征表示,去采样出 x x x,相当于模型的Decoder部分,输出一个均值使之尽可能接近原始的 x x x,因为对于这种条件概率,均值最大的时候就是 x x x

2023-11-28_10-17-39

最小化KL散度推导

为了最小化 q ( z ∣ x ) q(z|x) q(zx) P ( z ) P(z) P(z)的KL散度,首先,我们先对正态分布的KL散度计算进行推导。参考链接高斯分布的KL散度-CSDN博客
K L ( N ( μ 1 , σ 1 2 ) ∥ N ( μ 2 , σ 2 2 ) ) = ∫ x 1 2 π σ 1 e − ( x − μ 1 ) 2 2 σ 1 2 log ⁡ 1 2 π σ 1 e − ( x − μ 1 ) 2 2 σ 1 2 1 2 π σ 2 e − ( x − μ 2 ) 2 2 σ 2 2 d x = ∫ x 1 2 π σ 1 e − ( x − μ 1 ) 2 2 σ 1 2 [ log ⁡ σ 2 σ 1 − ( x − μ 1 ) 2 2 σ 1 2 + ( x − μ 2 ) 2 2 σ 2 2 ] d x \begin{aligned} \mathrm{KL}\left(\mathcal{N}\left(\mu_{1}, \sigma_{1}^{2}\right) \| \mathcal{N}\left(\mu_{2}, \sigma_{2}^{2}\right)\right) & =\int_{\mathrm{x}} \frac{1}{\sqrt{2 \pi} \sigma_{1}} \mathrm{e}^{-\frac{\left(x-\mu_{1}\right)^{2}}{2 \sigma_{1}^{2}}} \log \frac{\frac{1}{\sqrt{2 \pi} \sigma_{1}} e^{-\frac{\left(x-\mu_{1}\right)^{2}}{2 \sigma_{1}^{2}}}}{\frac{1}{\sqrt{2 \pi} \sigma_{2}} e^{-\frac{\left(x-\mu_{2}\right)^{2}}{2 \sigma_{2}^{2}}}} d x \\ & =\int_{x} \frac{1}{\sqrt{2 \pi} \sigma_{1}} e^{-\frac{\left(x-\mu_{1}\right)^{2}}{2 \sigma_{1}^{2}}}\left[\log \frac{\sigma_{2}}{\sigma_{1}}-\frac{\left(x-\mu_{1}\right)^{2}}{2 \sigma_{1}^{2}}+\frac{\left(x-\mu_{2}\right)^{2}}{2 \sigma_{2}^{2}}\right] d x \end{aligned}\\ KL(N(μ1,σ12)N(μ2,σ22))=x2π σ11e2σ12(xμ1)2log2π σ21e2σ22(xμ2)22π σ11e2σ12(xμ1)2dx=x2π σ11e2σ12(xμ1)2[logσ1σ22σ12(xμ1)2+2σ22(xμ2)2]dx

  1. 对于第1项,由于 σ 1 , σ 2 \sigma_1,\sigma_2 σ1,σ2与x无关,则可以直接提取到积分外面,该积分即为正态分布的全概率公式,也就是为1
    log ⁡ σ 2 σ 1 ∫ x 1 2 π σ 1 e − ( x − μ 1 ) 2 2 σ 1 2 d x = log ⁡ σ 2 σ 1 \log \frac{\sigma_{2}}{\sigma_{1}} \int_{\mathrm{x}} \frac{1}{\sqrt{2 \pi} \sigma_{1}} \mathrm{e}^{-\frac{\left(x-\mu_{1}\right)^{2}}{2 \sigma_{1}^{2}}} \mathrm{dx}=\log \frac{\sigma_{2}}{\sigma_{1}}\\ logσ1σ2x2π σ11e2σ12(xμ1)2dx=logσ1σ2

  2. 对于第2项,则是由方差定义式 D ( x ) = ∫ x ( x − μ ) 2 f ( x ) d x D(x)=\int_x(x-\mu)^2f(x)dx D(x)=x(xμ)2f(x)dx,可知这个积分的结果为 σ 1 2 \sigma_1^2 σ12
    − 1 2 σ 1 2 ∫ x ( x − μ 1 ) 2 1 2 π σ 1 e − ( x − μ 1 ) 2 2 σ 1 2 d x = − 1 2 σ 1 2 σ 1 2 = − 1 2 -\frac{1}{2 \sigma_{1}^{2}} \int_{\mathrm{x}}\left(\mathrm{x}-\mu_{1}\right)^{2} \frac{1}{\sqrt{2 \pi} \sigma_{1}} \mathrm{e}^{-\frac{\left(\mathrm{x}-\mu_{1}\right)^{2}}{2 \sigma_{1}^{2}}} \mathrm{dx}=-\frac{1}{2 \sigma_{1}^{2}} \sigma_{1}^{2}=-\frac{1}{2} 2σ121x(xμ1)22π σ11e2σ12(xμ1)2dx=2σ121σ12=21

  3. 对于第3项,首先将其展开,对于 x 2 x^2 x2,由均方值公式, E ( x 2 ) = D ( x ) + E ( x ) 2 E(x^2)=D(x)+E(x)^2 E(x2)=D(x)+E(x)2,后面两项则分别是通过均值公式以及全概率公式进行计算。
    1 2 σ 2 2 ∫ x ( x − μ 2 ) 2 1 2 π σ 1 e − ( x − μ 1 ) 2 2 σ 1 2 d x = 1 2 σ 2 2 ∫ x ( x 2 − 2 μ 2 x + μ 2 2 ) 1 2 π σ 1 e − ( x − μ 1 ) 2 2 σ 1 2 d x = σ 1 2 + μ 1 2 − 2 μ 1 μ 2 + μ 2 2 2 σ 2 2 = σ 1 2 + ( μ 1 − μ 2 ) 2 2 σ 2 2 \begin{aligned} \frac{1}{2 \sigma_{2}^{2}} \int_{\mathrm{x}}\left(\mathrm{x}-\mu_{2}\right)^{2} \frac{1}{\sqrt{2 \pi} \sigma_{1}} \mathrm{e}^{-\frac{\left(\mathrm{x}-\mu_{1}\right)^{2}}{2 \sigma_{1}^{2}}} \mathrm{dx} & =\frac{1}{2 \sigma_{2}^{2}} \int_{\mathrm{x}}\left(\mathrm{x}^{2}-2 \mu_{2} \mathrm{x}+\mu_{2}^{2}\right) \frac{1}{\sqrt{2 \pi} \sigma_{1}} \mathrm{e}^{-\frac{\left(\mathrm{x}-\mu_{1}\right)^{2}}{2 \sigma_{1}^{2}}} \mathrm{dx} \\ & =\frac{\sigma_{1}^{2}+\mu_{1}^{2}-2 \mu_{1} \mu_{2}+\mu_{2}^{2}}{2 \sigma_{2}^{2}}=\frac{\sigma_{1}^{2}+\left(\mu_{1}-\mu_{2}\right)^{2}}{2 \sigma_{2}^{2}}\\ \end{aligned} 2σ221x(xμ2)22π σ11e2σ12(xμ1)2dx=2σ221x(x22μ2x+μ22)2π σ11e2σ12(xμ1)2dx=2σ22σ12+μ122μ1μ2+μ22=2σ22σ12+(μ1μ2)2

对上述式子进行汇总:
K L ( N ( μ 1 , σ 1 2 ) ∥ N ( μ 2 , σ 2 2 ) ) = log ⁡ σ 2 σ 1 − 1 2 + σ 1 2 + ( μ 1 − μ 2 ) 2 2 σ 2 2 = 1 2 ( σ 1 2 + μ 1 2 − log ⁡ σ 1 2 − 1 ) \begin{aligned} \mathrm{KL}\left(\mathcal{N}\left(\mu_{1}, \sigma_{1}^{2}\right) \| \mathcal{N}\left(\mu_{2}, \sigma_{2}^{2}\right)\right) &=\log{\frac{\sigma_2}{\sigma_1}-\frac{1}{2}+\frac{\sigma_1^2+(\mu_1-\mu_2)^2}{2\sigma_2^2}} \\&=\frac{1}{2}(\sigma_1^2+\mu_1^2-\log^{\sigma_1^2}-1) \end{aligned} KL(N(μ1,σ12)N(μ2,σ22))=logσ1σ221+2σ22σ12+(μ1μ2)2=21(σ12+μ12logσ121)

代码部分

损失函数

通过上述推导,我们知道了需要最小化散度,然后最大化那个均值。所以可以得到如下的损失函数。

    def loss_fn(recon_x, x, mean, log_var):BCE = torch.nn.functional.binary_cross_entropy(recon_x.view(-1, 28*28), x.view(-1, 28*28), reduction='sum')KLD = -0.5 * torch.sum(1 + log_var - mean.pow(2) - log_var.exp())return (BCE + KLD) / x.size(0)

Encoder部分

class Encoder(nn.Module):def __init__(self, layer_sizes, latent_size):super(Encoder, self).__init__()self.MLP = nn.Sequential()for i, (in_size, out_size) in enumerate(zip(layer_sizes[:-1], layer_sizes[1:])):self.MLP.add_module(name="L{:d}".format(i), module=nn.Linear(in_size, out_size))self.MLP.add_module(name="A{:d}".format(i), module=nn.ReLU())# 首先对图像特征进行一些变换处理,然后将其展开成一维向量,然后通过全连接层得到均值和方差self.linear_means = nn.Linear(layer_sizes[-1], latent_size)self.linear_log_var = nn.Linear(layer_sizes[-1], latent_size)def forward(self, x):x = self.MLP(x)means = self.linear_means(x)log_vars = self.linear_log_var(x)return means, log_vars

Decoder部分

class Decoder(nn.Module):def __init__(self, layer_sizes, latent_size):super(Decoder, self).__init__()self.MLP = nn.Sequential()input_size = latent_sizefor i, (in_size, out_size) in enumerate(zip([input_size] + layer_sizes[:-1], layer_sizes)):self.MLP.add_module(name="L{:d}".format(i), module=nn.Linear(in_size, out_size))if i + 1 < len(layer_sizes):self.MLP.add_module(name="A{:d}".format(i), module=nn.ReLU())else:self.MLP.add_module(name="sigmoid", module=nn.Sigmoid())def forward(self, z):#对输入的z进行全接连操作,最后输出一个重构的xx = self.MLP(z)return x

VAE整体架构

class VAE(nn.Module):def __init__(self, encoder_layer_sizes, latent_size, decoder_layer_sizes):super(VAE, self).__init__()self.latent_size = latent_sizeself.encoder = Encoder(encoder_layer_sizes, latent_size)self.decoder = Decoder(decoder_layer_sizes, latent_size)def forward(self, x):if x.dim() > 2:x = x.view(-1, 28 * 28)means, log_var = self.encoder(x)z = self.reparameterize(means, log_var)recon_x = self.decoder(z)return recon_x, means, log_var, zdef reparameterize(self, mu, log_var):"""用于对encoder部分输出的均值方差进行重参数化,采样得到隐式表示部分z:param mu::param log_var::return:"""std = torch.exp(0.5 * log_var)eps = torch.randn_like(std)return mu + eps * stddef inference(self, z):recon_x = self.decoder(z)return recon_x

VAE问题

vae只是记住图片,而不是生成图片

2023-11-28_11-50-38

再产生图片时,只是通过像素差异进行评估,则对于关键点像素和可忽略像素之间的图片,两者在vae看来是一致的,但是不是理想的产生图片,因此出现了GAN

参考资料

VAE 模型基本原理简单介绍_vae模型-CSDN博客

高斯分布的KL散度-CSDN博客

ML Lecture 18: Unsupervised Learning - Deep Generative Model (Part II)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/203977.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能|机器学习——机器学习如何判断模型训练是否充分

一、查看训练日志 训练日志是机器学习中广泛使用的训练诊断工具&#xff0c;每个 epoch 或 iterator 结束后&#xff0c;在训练集和验证集上评估模型&#xff0c;并以折线图的形式显示模型性能和收敛状况。训练期间查看模型的训练日志可用于判断模型训练时的问题&#xff0c;例…

【Android知识笔记】性能优化专题(四)

App 线程优化 线程调度原理 任意时刻,只有一个线程占用CPU,处于运行状态多线程并发:轮流获取CPU使用权JVM负责线程调度:按照特定机制分配CPU使用权线程调度模型 分时调度模型:轮流获取、均分CPU时间抢占式调度模型:优先级高的获取,JVM采用Android线程调度 nice值:Proc…

Linux Nmap命令解析(Nmap指令)(功能:主机发现、ping扫描、arp扫描、端口扫描、服务版本检测、操作系统识别等)

文章目录 Linux Nmap 命令解析简介Nmap 的核心功能主机发现端口扫描服务版本检测OS 指纹识别&#xff08;操作系统指纹识别&#xff09;脚本扫描 安装 NmapNmap 命令结构Nmap 命令文档英文中文 主机发现Ping 扫描ARP 扫描关于nmap -PR&#xff08;ARP Ping Scan&#xff09;和n…

Unity 关于生命周期函数的一些认识

Unity 生命周期函数主要有以下一些&#xff1a; Awake(): 在脚本被加载时调用。用于初始化对象的状态和引用。 OnEnable(): 在脚本组件被启用时调用。在脚本组件被激活时执行一次&#xff0c;以及在脚本组件被重新激活时执行。 Reset(): 在脚本组件被重置时调用。用于重置脚本…

卷积神经网络(CNN)识别验证码

文章目录 一、前言二、前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;2. 导入数据3. 查看数据4.标签数字化 二、构建一个tf.data.Dataset1.预处理函数2.加载数据3.配置数据 三、搭建网络模型四、编译五、训练六、模型评估七、保存和加载模型八、预测 …

Windows下Linkis1.5DSS1.1.2本地调试

1 Linkis: 参考&#xff1a; 单机部署 | Apache Linkis技术分享 | 在本地开发调试Linkis的源码 (qq.com)DataSphere Studio1.0本地调试开发指南 - 掘金 (juejin.cn) 1.1 后端编译 参考【后端编译 | Apache Linkis】】 修改linkis模块下pom.xml,将mysql.connetor.scope修改…

基于命令行模式设计退款请求处理

前言 这篇文章的业务背景是基于我的另一篇文章: 对接苹果支付退款退单接口-CSDN博客 然后就是说设计模式是很开放的东西,可能我觉得合适,你可能觉得不合适,这里只是做下讨论,没有一定要各位同意的意思.... 相关图文件 这里我先把相关的图文件放上来,可能看着会比较清晰点 代码逻…

从零开始的c语言日记day37——数组指针练习

一、 取地址数组储存在了*p里&#xff0c;里面储存的是整个数组的地址但本质也是第一个元素的地址解引用后1为4个字节所以就可以打印数组了。但一般不用这种方法 这样更方便一些 打印多维数组 如果不用这样传参&#xff0c;用指针传参怎么做呢&#xff1f; Main里函数的arr表示…

第1章 爬虫基础

目录 1. HTTP 基本原理1.1 URI 和 URL1.2 HTTP 和 HTTPS1.3 请求1.3.1 请求方法1.3.2 请求的网址1.3.3 请求头1.3.4 请求体 1.4 响应1.4.1 响应状态码1.4.2 响应头1.4.3 响应体 2. Web 网页基础2.1 网页的组成2.1.1 HTML2.1.2 CSS2.1.3 JavaScript 2.2 网页的结构2.3 节点树及节…

windows上 adb devices有设备 wsl上没有

终于解决了&#xff01;&#xff01;&#xff01;&#xff01; TAT&#xff0c;尝试了很多种办法。 比如WSL中的adb和Windows中的adb版本必须一致&#xff0c;一致也没用&#xff0c;比如使用 ln 建立链接也没用。 这个解决办法的前提是windows中的abd是好用的。 ●在windows…

JSP:JDBC

JDBC&#xff08;Java Data Base Connectivity的缩写&#xff09;是Java程序操作数据库的API&#xff0c;也是Java程序与数据库相交互的一门技术。 JDBC是Java操作数据库的规范&#xff0c;由一组用Java语言编写的类和接口组成&#xff0c;它对数据库的操作提供基本方法&#…

anaconda换源安装pytorch(附带bug解决办法)

1.安装anaconda 如何安装anaconda可以看这篇文章:如何安装anaconda 2.换源安装pytorch: 首先进入到pytorch官网&#xff0c;选对好参数之后复制命令进入到anaconda prompt即可: 然后进入自己的环境之后输入该命令(即conda install …)&#xff0c;则可以进行下载。下载完成…

pandas教程:USDA Food Database USDA食品数据库

文章目录 14.4 USDA Food Database&#xff08;美国农业部食品数据库&#xff09; 14.4 USDA Food Database&#xff08;美国农业部食品数据库&#xff09; 这个数据是关于食物营养成分的。存储格式是JSON&#xff0c;看起来像这样&#xff1a; {"id": 21441, &quo…

入侵redis之准备---Linux关于定时任务crontab相关知识了解配合理解shell反弹远程控制

入侵redis之准备—Linux关于定时任务crontab相关知识了解配合理解shell反弹远程控制 几点需要知道的信息 【1】crontab一般来说服务器都是有的&#xff0c;依赖crond服务&#xff0c;这个服务也是必须安装的服务&#xff0c;并且也是开机自启动的服务&#xff0c;也就是说&…

C语言做一个恶作剧关机程序

一、项目介绍 C语言实现一个简单的"流氓软件"&#xff0c;一个可以强制关机恶作剧关机程序&#xff0c;输入指定指令可以解除 二、运行截图 然后当你输入“n”才可以解锁关机。 三、完整源码 #include <stdlib.h> #include <stdio.h> #include <s…

机器学习8:在病马数据集上进行算法比较(ROC曲线与AUC)

ROC曲线与AUC。使用不同的迭代次数&#xff08;基模型数量&#xff09;进行 Adaboost 模型训练&#xff0c;并记录每个模型的真阳性率和假阳性率&#xff0c;并绘制每个模型对应的 ROC 曲线&#xff0c;比较模型性能&#xff0c;输出 AUC 值最高的模型的迭代次数和 ROC 曲线。 …

【传智杯】儒略历、评委打分、萝卜数据库题解

&#x1f34e; 博客主页&#xff1a;&#x1f319;披星戴月的贾维斯 &#x1f34e; 欢迎关注&#xff1a;&#x1f44d;点赞&#x1f343;收藏&#x1f525;留言 &#x1f347;系列专栏&#xff1a;&#x1f319; 蓝桥杯 &#x1f319;请不要相信胜利就像山坡上的蒲公英一样唾手…

Vue框架学习笔记——事件scroll和wheel的区别

文章目录 前文提要滚动条滚动事件 scroll鼠标滚动事件 wheel二者不同点 前文提要 本人仅做个人学习记录&#xff0c;如有错误&#xff0c;请多包涵 滚动条滚动事件 scroll scroll事件绑定html页面中的指定滚动条&#xff0c;无论你拖拽滚动条&#xff0c;选中滚动条之后按键盘…

【深度学习】CNN中pooling层的作用

1、pooling是在卷积网络&#xff08;CNN&#xff09;中一般在卷积层&#xff08;conv&#xff09;之后使用的特征提取层&#xff0c;使用pooling技术将卷积层后得到的小邻域内的特征点整合得到新的特征。一方面防止无用参数增加时间复杂度&#xff0c;一方面增加了特征的整合度…

揭秘周杰伦《最伟大的作品》MV,绝美UI配色方案竟然藏在这里

色彩在UI设计的基本框架中占据着举足轻重的位置。实际上&#xff0c;精心挑选和组合的色彩配色&#xff0c;往往就是UI设计成功的不二法门。在打造出一个实用的UI配色方案过程中&#xff0c;我们需要有坚实的色彩理论知识&#xff0c;同时还需要擅于从生活中观察和提取灵感。以…