【生成模型之六】DDPM模型详解

Denoising Diffusion Probabilistic Models

参考理解DDPM
生成式扩散模型详解:从DDPM到GLIDE

关于Stable diffusion的各种模型,看这篇就可以了!

AIGC中U-Net结构

生成对抗网络(GANs)、自回归模型(AR)、流(FLows)和变分自编码器(VAEs)已经合成了引人注目的图像和音频样本,基于能量的建模和分数匹配取得了显著进展,产生了与GANs相当的图像。

在这里插入图片描述
扩散概率模型(为简洁起见,我们称之为“扩散模型”)是一个参数化的马尔可夫链,使用变分推理训练,在有限时间后产生与数据匹配的样本。学习该链的转换以逆转扩散过程,这是一个马尔可夫链,它在采样的相反方向上逐渐向数据中添加噪声,直到信号被破坏。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

代码阅读理解

DDPM-UNet代码详解
1.选择数据

选一个数据集,本例采用sklearn自带数据集:

import  matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import make_s_curve
import torch
 
# TODO 实验数据
s_curve , _  = make_s_curve(10**4 , noise = 0.1)
s_curve = s_curve[:,[0,2] ]/10.0
 
print("shape of moons :",np.shape(s_curve))
plt.scatter(s_curve[:,0],s_curve[:,1], color='red',edgecolor='white')
plt.savefig('s_curve.png')

在这里插入图片描述

2.计算参数

计算前向过程中需要的常数:

# 准备好alpha(αt), beta(βt), αt^, 根号下αt^, 根号下(1-αt^)等值
num_steps = 100  # 设置步长

# 制定每一步的beta
betas = torch.linspace(-6, 6, num_steps)  # 逐渐递增
betas = torch.sigmoid(betas)*(0.5e-2 - 1e-5)+1e-5  # β0,β1,...,βt

# 计算alpha、alpha_prod、alpha_prod_previous、alpha_bar_sqrt等变量的值
alphas = 1 - betas  # αt = 1 - βt
alphas_prod = torch.cumprod(alphas,0)  # αt^ = αt的累乘
# αt^往右平移一位, 原第t步的值维第t-1步的值, 第0步补1
alphas_prod_p = torch.cat([torch.tensor([1]).float(), alphas_prod[:-1]], 0)  # αt-1 ^
alphas_bar_sqrt = torch.sqrt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jeremy-Sky

你的鼓励是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值