Variant AutoEncoder(VAE)和 VQVAE 学习笔记和代码

参考:
[1] VAE1
[2] https://lilianweng.github.io/posts/2018-08-12-vae/
[3] VAE Code

进食顺序

  • 1 VAE
    • 1.1 VAE的直观理解
    • 1.2 VAE数学推导
      • 1.2.1 混合高斯模型角度理解VAE(李宏毅ML课的说法)
      • 1.2.2 隐空间角度理解以及ELBO(变分下界)
      • 1.2.3 Encoder
      • 1.2.4 Decoder
    • 1.3 VAE代码和细节实现
  • 2 VQVAE

1 VAE

1.1 VAE的直观理解

在这里插入图片描述
最直观的图莫过于[李宏毅ML18讲]以上这幅图。 对于AutoEncoder模型,模型其实是在拟合一个identity function,也就是对于每个输入 x x x,在隐空间(latant space)都有唯一的隐变量 z z z与之对应,那么生成的 x ′ x' x同理可知也是和 x 、 z x、z xz唯一对应的。

那么问题来了,在采样过程中,由于隐变量 z z z所在的分布是连续的,我们的数据集 { x } \{x\} {x}又是有限的,所以不可能将所有的 z z z都和 x 或 x ′ x或x' xx对应上。而神经网络通常又是非线性的,对于一些从来没有见过的隐变量,也不可能通常线性关系去推导它对应的 x ′ x' x是啥样的(比如上图中,满月和半月之间的 z z z对应的月亮大概率不是一个 2 3 \frac{2}{3} 32月亮,因为non-linear的原因)

而VAE机智的地方在于,它让每一个 x x x都对应一个随机分布,而不再是对应一个隐变量,那么上面提到的 2 3 \frac{2}{3} 32个月亮,可能就是两个分布的重叠部分,那么可以根据权值或者什么方式得到相应的月亮图。总之,观测数据 x x x不再是对应于一个值,而是对应于一个分布,我们在这个分布里采样,就可以得到不同的图像,此时模型就变成了生成模型。

1.2 VAE数学推导

1.2.1 混合高斯模型角度理解VAE(李宏毅ML课的说法)

混合高斯模型(mixture-gaussian model)可以简单定义为: 任何分布 p ( x ) p(x) p(x)都可以由多个不同均值和方差的高斯模型进行加权和进行拟合。(类似于傅里叶定理:不同信号都可以由多个正弦信号去进行拟合一样)

假设 z z 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 ( z ) p(z) p(z)可以理解为第z个高斯分布的权值(概率分布), x ∣ z ∼ N ( μ z , Σ z ) x|z \sim N(\mu_z,\Sigma_z) xzN(μz,Σz), 则 p ( x ∣ z ) p(x|z) p(xz)为高斯分布。这是从混合高斯模型的角度来理解的VAE。

总结来说就是:我们要预测 p ( x ) p(x) p(x),但是模型很难直接预测出 p ( x ) p(x) p(x),因为分布未知并且分布复杂。但是我们可以通过预测很多个高斯分布去拟合 p ( x ) p(x) p(x)。VAE就是先预测 p ( z ) p(z) p(z),再去预测 p ( x ∣ z ) p(x|z) p(xz),从而预测出最终目标。

1.2.2 隐空间角度理解以及ELBO(变分下界)

这个 z z z又叫隐变量,为什么要用隐变量:我们可以理解为 p ( x ) p(x) p(x)很难直接求出,但是我们可以先求 p ( z ) p(z) p(z),然后通过 p ( z ) p(z) p(z)去求得 p ( x ) p(x) p(x),这样就方便多了,其中 p ( z ) p(z) p(z)可以是任意我们自定义的分布,VAE中使用的是 p ( z ) = N ( z ; 0 , I ) p(z)=N(z;0,I) p(z)=N(z;0,I)

我们可以通过边际化来表示 p ( x ) p(x) p(x)
p ( x ) = ∫ z p ( x , z ) d z p(x) = \int_zp(x,z)dz p(x)=zp(x,z)dz
又根据乘法公式: p ( x , z ) = p ( x ) p ( z ∣ x ) = p ( z ) p ( x ∣ z ) p(x,z)=p(x)p(z|x)=p(z)p(x|z) p(x,z)=p(x)p(zx)=p(z)p(xz)。根据贝叶斯公式,又有:
p ( z ∣ x ) = p ( x ∣ z ) p ( z ) p ( x ) p(z|x) = \frac{p(x|z)p(z)}{p(x)} p(zx)=p(x)p(xz)p(z)
其中 p ( z ∣ x ) p(z|x) p(zx)叫后验概率; p ( x ∣ z ) p(x|z) p(xz)叫似然概率(通过z我们似乎可以预测出x); p ( z ) p(z) p(z)叫先验概率(我们自定义); p ( x ) p(x) p(x)叫证据(evidence)
在这里插入图片描述

根据最大似然理论,我们要极大化:
l o g p ( x ) = l o g ∫ z p θ ( x , z ) d z = l o g ∫ z q ϕ ( z ∣ x ) p θ ( x , z ) q ϕ ( z ∣ x ) d z = l o g E z ∼ q ϕ ( z ∣ x ) [ p θ ( x , z ) q ϕ ( z ∣ x ) ] ≥ E z ∼ q ϕ ( z ∣ x ) [ l o g p θ ( x , z ) q ϕ ( z ∣ x ) ] = ∫ z q ϕ ( z ∣ x ) l o g p θ ( x , z ) d z − ∫ z q ϕ ( z ∣ x ) l o g q ϕ ( z ∣ x ) d z = E z ∼ q ϕ ( z ∣ x ) [ l o g p θ ( x , z ) ] − E z ∼ q ϕ ( z ∣ x ) [ l o g q ϕ ( z ∣ x ) ] = L ( q , θ ) \begin{aligned} logp(x) &= log\int_zp_\theta(x,z)dz\\ &=log\int_zq_\phi(z|x)\frac{p_\theta(x,z)}{q_\phi(z|x)}dz\\ &=logE_{z\sim q_\phi(z|x)}[\frac{p_\theta(x,z)}{q_\phi(z|x)}]\\ &\geq E_{z\sim q_\phi(z|x)}[log\frac{p_\theta(x,z)}{q_\phi(z|x)}]\\ &=\int_zq_\phi(z|x)logp_\theta(x,z)dz-\int_zq_\phi(z|x)logq_\phi(z|x)dz\\ &= E_{z\sim q_\phi(z|x)}[logp_\theta(x,z)] - E_{z\sim q_\phi(z|x)}[logq_\phi(z|x)]\\ &= L(q,\theta) \end{aligned} logp(x)=logzpθ(x,z)dz=logzqϕ(zx)qϕ(zx)pθ(x,z)dz=logEzqϕ(zx)[qϕ(zx)pθ(x,z)]Ezqϕ(zx)[logqϕ(zx)pθ(x,z)]=zqϕ(zx)logpθ(x,z)dzzqϕ(zx)logqϕ(zx)dz=Ezqϕ(zx)[logpθ(x,z)]Ezqϕ(zx)[logqϕ(zx)]=L(q,θ)
其中:

  • 第二行上下同乘一个数,结果不变;
  • 第四行是根据詹森不等式;
  • 我们称 L ( q , θ ) L(q,\theta) L(q,θ)为ELBO(evidence lower bound,也是因为 p ( x ) p(x) p(x)为evidence),我们可以i通过最大化ELBO,去近似最大化似然函数。

我们刚刚用乘法定理得到: p ( x , z ) = p ( x ) p ( z ∣ x ) = p ( z ) p ( x ∣ z ) p(x,z)=p(x)p(z|x)=p(z)p(x|z) p(x,z)=p(x)p(zx)=p(z)p(xz),我们可以代入进去来看看ELBO的本质是什么:

1) 先代入 p ( x , z ) = p ( x ) p ( z ∣ x ) p(x,z)=p(x)p(z|x) p(x,z)=p(x)p(zx)
L ( q , θ ) = E z ∼ q ϕ ( z ∣ x ) [ l o g p ( x ) ] + E z ∼ q ϕ ( z ∣ x ) [ l o g p θ ( z ∣ x ) ] − E z ∼ q ϕ ( z ∣ x ) [ l o g q ϕ ( z ) ] = E z ∼ q ϕ ( z ∣ x ) [ l o g p ( x ) ] − K L ( q ϕ ( z ∣ x ) ∣ ∣ p θ ( z ∣ x ) ) = l o g p ( x ) − K L ( q ϕ ( z ∣ x ) ∣ ∣ p θ ( z ∣ x ) ) \begin{aligned} L(q,\theta) &= E_{z\sim q_\phi(z|x)}[logp(x)]+E_{z\sim q_\phi(z|x)}[logp_\theta(z|x)]-E_{z\sim q_\phi(z|x)}[logq_\phi(z)] \\ &=E_{z\sim q_\phi(z|x)}[logp(x)] - KL(q_\phi(z|x)||p_\theta(z|x))\\ &= logp(x) - KL(q_\phi(z|x)||p_\theta(z|x)) \end{aligned} L(q,θ)=Ezqϕ(zx)[logp(x)]+Ezqϕ(zx)[logpθ(zx)]Ezqϕ(zx)[logqϕ(z)]=Ezqϕ(zx)[logp(x)]KL(qϕ(zx)∣∣pθ(zx))=logp(x)KL(qϕ(zx)∣∣pθ(zx))

所以我们可以得到(移位):
l o g p ( x ) = L ( q , θ ) + K L ( q ϕ ( z ∣ x ) ∣ ∣ p θ ( z ∣ x ) ) logp(x) = L(q,\theta)+ KL(q_\phi(z|x)||p_\theta(z|x)) logp(x)=L(q,θ)+KL(qϕ(zx)∣∣pθ(zx))
我们可以发现,当我们将最小化KL散度让其接近于0,也就是使得 q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx) p ( z ∣ x ) p(z|x) p(zx)分布靠近,那么我们就等近似将对数似然看作是ELBO。而 q ϕ q_\phi qϕ可以看作是encoder,我们使用NN来拟合 p θ ( z ∣ x ) p_\theta(z|x) pθ(zx)

2) 代入 p ( x , z ) = p ( z ) p ( x ∣ z ) p(x,z)=p(z)p(x|z) p(x,z)=p(z)p(xz)
L ( q , θ ) = E z ∼ q ϕ ( z ∣ x ) [ l o g p ( z ) ] + E z ∼ q ϕ ( z ∣ x ) [ l o g p θ ( x ∣ z ) ] − E z ∼ q ϕ ( z ∣ x ) [ l o g q ϕ ( z ∣ x ) ] = E z ∼ q ϕ ( z ∣ x ) [ l o g p θ ( x ∣ z ) ] − K L ( q ϕ ( z ∣ x ) ∣ ∣ p ( z ) ) \begin{aligned} L(q,\theta) &= E_{z\sim q_\phi(z|x)}[logp(z)]+E_{z\sim q_\phi(z|x)}[logp_\theta(x|z)]-E_{z\sim q_\phi(z|x)}[logq_\phi(z|x)]\\ &= E_{z\sim q_\phi(z|x)}[logp_\theta(x|z)]- KL(q_\phi(z|x)||p(z)) \end{aligned} L(q,θ)=Ezqϕ(zx)[logp(z)]+Ezqϕ(zx)[logpθ(xz)]Ezqϕ(zx)[logqϕ(zx)]=Ezqϕ(zx)[logpθ(xz)]KL(qϕ(zx)∣∣p(z))
其中第一项可以认为模型的decoder,既根据隐变量 z z z得到 x x x的概率分布对数似然最大化;第二项是最大化负的KL散度,既最小化KL散度,既使得 q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx) p ( z ) p(z) p(z)更接近。这里可以认为我们希望encoder预测出来的 q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx)和我们自定义的 p ( z ) p(z) p(z)越接近越好,此处KL散度相当于约束项。

至此我们可以发现ELBO的本质:(小小总结一下)

  1. 由第一项我们可以知道,我们可以用 q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx)来替代 p ( z ∣ x ) p(z|x) p(zx),训练模型去拟合该分布,这样对数似然可以等价于ELBO。为什么要替代 p ( z ∣ x ) p(z|x) p(zx),因为根据隐空间角度,我们不好直接求 p ( x ) p(x) p(x),所以设置隐变量 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,我们用模型去拟合后一项。
  2. 由第二项我们可以知道,ELBO实际包含了 p θ ( x ∣ z ) p_\theta(x|z) pθ(xz) q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx),正好对应了decoder和encoder,并且我们还要尽量让 q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx)去拟合 p ( z ) p(z) p(z),这也是一项约束项,否则我们只有重建损失( E z ∼ q ϕ ( z ∣ x ) [ l o g p θ ( x ∣ z ) ] E_{z\sim q_\phi(z|x)}[logp_\theta(x|z)] Ezqϕ(zx)[logpθ(xz)])就变回AE了。

在这里插入图片描述

1.2.3 Encoder

VAE里假设 z z z是一个高斯变量,那么后验分布 q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx)也是高斯分布,我们不知道的是均值和方差,那么我们只要让encoder去拟合均值和方差,我们便可以知道该后验分布了。既
q ϕ ( z ∣ x ) = N ( μ ϕ ( x ) , Σ ϕ ( x ) ) q_\phi(z|x)=N(\mu_\phi(x),\Sigma_\phi(x)) qϕ(zx)=N(μϕ(x),Σϕ(x))
从这里我们也可以看到, x x x对应的是一个高斯分布,而不是一个确定的 z z z值。

那么我们是如何衡量拟合的好坏的呢,根据上边的ELBO式子,我们有:
L = E z ∼ q ϕ ( z ∣ x ) [ l o g p θ ( x ∣ z ) ] − K L ( q ϕ ( z ∣ x ) ∣ ∣ p ( z ) ) L = E_{z\sim q_\phi(z|x)}[logp_\theta(x|z)]- KL(q_\phi(z|x)||p(z)) L=Ezqϕ(zx)[logpθ(xz)]KL(qϕ(zx)∣∣p(z))
也就是通过KL散度来衡量其与 p ( z ) p(z) p(z)的拟合近似程度。
两个高斯分布的KL散度是有已知公式的,直接带入即可:
K L ( N ( μ ϕ , Σ ϕ ) ∣ ∣ N ( 0 , 1 ) ) = 1 2 ( σ ϕ 2 + μ ϕ − 1 − l o g σ ϕ 2 ) KL(N(\mu_\phi,\Sigma_\phi)||N(0,1))=\frac{1}{2}(\sigma_\phi^2+\mu_\phi-1-log\sigma^2_\phi) KL(N(μϕ,Σϕ)∣∣N(0,1))=21(σϕ2+μϕ1logσϕ2)

这也就是我们的分布约束项,直觉上来说,当 μ ϕ = 0 , Σ ϕ = 1 \mu_\phi=0,\Sigma_\phi=1 μϕ=0Σϕ=1时,该KL散度会最小。

参数重整化(Reparameterization Trick)

我们已知 z z z是随机变量,既 z z z是从分布 q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx)随机采样出来的,那么对于输入同一个 x x x,可能每次采样的 z z z都是不一样的,所以这样是不可以梯度反传的。
这里使用参数重整化,既用一个确定值和随机值来代替一整个随机值,看下图
在这里插入图片描述
这里我们每次传入 x x x都生成均值和方差,这是确定的(因为传入的x不变,通过NN函数拟合当然是确定的),这里我们从 N ( 0 , 1 ) N(0,1) N(0,1)的正态分布中采样噪声,这是随机的,然后我们通过乘方差加均值的方法得到满足 N ( μ , Σ ) N(\mu,\Sigma) N(μ,Σ)的z,这样z就相当于从N(0,1)里采样,但是根据参数重整化得到与从后验概率分布中采样一样的道理,也就可以梯度反向传播了。

1.2.4 Decoder

同理,decoder输出的也是一个概率分布,最后输出的 X X X是随机变量。这里我们同样也是通过预测均值和方差的方法来预测该概率分布,只不过VAE(大多数其他方法)会将方差固定为一个常数,所以用均值来等价于 X X X。既
μ x = d e c o d e r ( z ) \mu_x = decoder(z) μx=decoder(z)
在这里插入图片描述
我们根据ELBO公式已知,优化目标为:
E z ∼ q ϕ ( z ∣ x ) [ l o g p θ ( x ∣ z ) ] E_{z\sim q_\phi(z|x)}[logp_\theta(x|z)] Ezqϕ(zx)[logpθ(xz)]
但是我们encoder输出的是概率分布而不是 Z Z Z的具体数值,所以期望本身是不能解析的。我们可以借助马尔可夫链蒙特卡罗法(MCMC)去近似,既从后验概率中随机采样多个 z ^ \hat z z^去近似等价:
E z ∼ q ϕ ( z ∣ x ) [ l o g p θ ( x ∣ z ) ] ≈ 1 L ∑ l = 1 L [ l o g p θ ( x ∣ z l ) ] E_{z\sim q_\phi(z|x)}[logp_\theta(x|z)]\approx \frac{1}{L}\sum_{l=1}^L[logp_\theta(x|z^l)] Ezqϕ(zx)[logpθ(xz)]L1l=1L[logpθ(xzl)]
根据经验, L = 1 L=1 L=1即可。

最终ELBO的式子:
在这里插入图片描述

1.3 VAE代码和细节实现

2 VQVAE

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

登录页设计新选择:毛玻璃和新拟态风格,非2.5D和插画风

登录页给潜在用户传递了产品的品牌调性,是非常重要的一类页面,之前2.5D和插画风格的登录页流行一时,不过这阵风好像过去了,新的风格开始涌现了。 一、越来越流行的毛玻璃设计风格 毛玻璃风格是指将背景模糊处理,使得…

【算法】长短期记忆网络(LSTM,Long Short-Term Memory)

这是一种特殊的循环神经网络,能够学习数据中的长期依赖关系,这是因为模型的循环模块具有相互交互的四个层的组合,它可以记忆不定时间长度的数值,区块中有一个gate能够决定input是否重要到能被记住及能不能被输出output。 原理 黄…

Sophon AutoCV推动AI应用从模型生产到高效落地

随着技术市场和应用方向的逐渐成熟,人工智能与各行各业的结合和落地逐渐进入了深水区。 虽然由于行业规模化和应用普及度的限制,人工智能在“传统”行业的落地不如消费互联网行业,但是借助人工智能为“传统”行业的发展注入新能量一直是相关…

Windows系统x86机器安装龙芯(loongarch64)3A5000虚拟机系统详细教程

本次介绍在window系统x86机器上安装loongarch64系统的详细教程。 1.安装环境准备。 首先,你得有台电脑。 配置别太差,至少4核8G内存,安装window10或者11都行(为啥不能是Window7,你要用也不是不行,你先解决…

边缘计算与任务卸载基础知识

目录 边缘计算简介任务卸载简介参考文献 边缘计算简介 边缘计算是指利用靠近数据生成的网络边缘侧的设备(如移动设备、基站、边缘服务器、边缘云等)的计算能力和存储能力,使得数据和任务能够就近得到处理和执行。 一个典型的边缘计算系统为…

未来已来:智慧餐饮点餐系统引领餐饮业的数字化转型

时下,智慧餐饮点餐系统正在引领着餐饮业迈向更高的位置。今天,小编将与大家共同探讨智慧餐饮点餐系统的发展趋势、优势以及对餐饮业的影响。 一、智慧餐饮点餐系统的发展趋势 智慧餐饮点餐系统的出现填补了这一空白,它通过引入数字化技术&a…

学习助手:借助AI大模型,学习更高效!

在当今的数字时代,人工智能(AI)的崛起已经彻底改变了我们获取信息、处理数据以及学习新知识的方式。AI大模型,特别是如OpenAI开发的GPT-4这类先进的技术,已成为学习和教育领域的一大助力。本文旨在探索如何借助AI大模型…

5G时代对于工业化场景应用有什么改善

5G 不仅仅是 4G 的技术升级,而是将平板电脑和智能手机的技术升级。除了更好的高清视频流和其他高带宽应用,消费者不会注意到很多性能差异。然而,在工业领域,5G 代表着巨大的飞跃。 在工厂和厂房内, 设备的Wi-Fi 网络经…

Python+Selenium+Unittest 之Unittest1--简介

Unittest属于是一种单元测试框架,主要用于对代码中写好的单元内容进行验证,比如写好一个函数,可以使用unittest去进行验证该函数的代码逻辑是否有问题,对于自动化来说,可以去检验每条用例的内容是否符合预期。 Unittes…

Goose:Golang中的数据库迁移工具

Goose:Golang中的数据库迁移工具 在Golang开发中,数据库迁移是一个常见的任务,用于管理数据库模式的演化和版本控制。Goose是一个轻量级的、易于使用的数据库迁移工具,专为Golang开发者设计。本文将介绍Goose的基本概念、用法和优…

php基础学习之错误处理(其二)

在实际应用中,开发者当然不希望把自己开发的程序的错误暴露给用户,一方面会动摇客户对己方的信心,另一方面容易被攻击者抓住漏洞实施攻击,同时开发者本身需要及时收集错误,因此需要合理的设置错误显示与记录错误日志 一…

代码随想录-回溯算法

组合 //未剪枝 class Solution {List<List<Integer>> ans new ArrayList<>();Deque<Integer> path new LinkedList<>();public List<List<Integer>> combine(int n, int k) {backtracking(n, k, 1);return ans;}public void back…

Python:关于数据服务中的Web API的设计

搭建类似joinquant、tushare类似的私有数据服务应用&#xff0c;有以下一些点需要注意&#xff1a; 需要说明的是&#xff0c;这里讨论的是web api前后端&#xff0c;当然还有其它方案&#xff0c;thrift&#xff0c;grpc等。因为要考虑到一鱼两吃&#xff0c;本文只探讨web ap…

Android之UI Automator框架源码分析(第九篇:UiDevice获取UiAutomation对象的过程分析)

前言 学习UiDevice对象&#xff0c;就需要看它的构造方法&#xff0c;构造方法中有UiDevice对象持有一些对象&#xff0c;每个对象都是我们分析程序的重点&#xff0c;毕竟UiDevice对象的功能&#xff0c;依赖这些组合的对象 备注&#xff1a;当前对象持有的对象&#xff0c;初…

Linux调试器-gdb使用与冯诺依曼体系结构

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 Linux调试器-gdb使用 1. 背景 2. 开始使用 冯诺依曼体系结构 总结 前言 世上有两种耀眼的光芒&#xff0c;一种是正在升起的太阳&#xff0c;一种是正在努力学…

k8s部署mysql

&#xff08;作者&#xff1a;陈玓玏&#xff09; 一、前置条件 已部署k8s&#xff0c;服务端版本为1.21.14 二、部署mysql 拉取镜像&#xff1b; docker pull mysql将账号密码等信息写到configmap&#xff0c;创建configmap&#xff1b; apiVersion: v1 kind: ConfigMap m…

视觉AIGC识别——人脸伪造检测、误差特征 + 不可见水印

视觉AIGC识别——人脸伪造检测、误差特征 不可见水印 前言视觉AIGC识别【误差特征】DIRE for Diffusion-Generated Image Detection方法扩散模型的角色DIRE作为检测指标 实验结果泛化能力和抗扰动 人脸伪造监测&#xff08;Face Forgery Detection&#xff09;人脸伪造图生成 …

android TextView 实现富文本显示

android TextView 实现富文本显示&#xff0c;实现抖音直播间公屏消息案例 使用&#xff1a; val tvContent: TextView helper.getView(R.id.tvContent)//自己根据UI业务要求&#xff0c;可以控制 图标显示 大小val levelLabel MyImgLabel( bitmap 自己业务上的bitmap )va…

卷积神经网络基本概念补充

卷积&#xff08;convolution&#xff09;、通道&#xff08;channel&#xff09; 卷积核大小一般为奇数&#xff0c;有中心像素点&#xff0c;便于定位卷积核。 步长&#xff08;stride&#xff09;、填充&#xff08;padding&#xff09; 卷积核移动的步长&#xff08;stride…

FPGA之带有进位逻辑的加法运算

module ADDER&#xff08; input [5&#xff1a;0]A&#xff0c; input [5&#xff1a;0]B&#xff0c;output[6&#xff1a;0]Q &#xff09;&#xff1b; assign Q AB&#xff1b; endmodule 综合结果如下图所示&#xff1a; 使用了6个Lut&#xff0c;&#xff0c;6个LUT分布…