Diffusion模型

news/2024/10/8 8:34:11

参数说明

beta_schedule = np.linspace(0.0001, 0.02, 1000)  # 示例 beta schedule

alpha_hat = np.cumprod(1 - beta_schedule)  # 计算 alpha_hat


具体例子

让我们通过一个具体的例子展示如何计算 Beta Schedule 和 Alpha_hat:

import numpy as np# 定义 Beta Schedule
beta_schedule = np.linspace(0.1, 0.2, 10)  # 从0.1到0.2等间隔分成10个值# 计算 Alpha_hat
alpha_hat = np.cumprod(1 - beta_schedule)# 打印结果
print("Beta schedule:", beta_schedule)
print("Alpha_hat:", alpha_hat)

在代码中的应用

def encode(x_0, t, alpha_hat):alpha_hat_t = alpha_hat[t]  # 获取时间步 t 的 alpha_hatepsilon = torch.randn_like(x_0)  # 生成标准正态分布噪声epsilon_prime = torch.sign(x_0) * torch.abs(epsilon)  # 计算符号噪声x_t = torch.sqrt(alpha_hat_t) * x_0 + torch.sqrt(1 - alpha_hat_t) * epsilon_prime  # 计算时间步 t 的特征向量return x_tfor t in range(num_steps):x_t = encode(x_0, t, alpha_hat)node_features.append(x_t.numpy())print(f"Node features at time step {t+1} (x_{t+1}):", x_t.numpy())

反向扩散过程和损失计算

for t in range(num_steps-1, -1, -1):x_t = torch.tensor(node_features[t+1])mu_theta, sigma_t = model.decode(x_t, t, alpha_hat)print(f"Reconstructed features at time step {t} (mu_theta_{t}):", mu_theta.detach().numpy())

完整的代码

import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np定义模型类
class DiffusionModel(nn.Module):def __init__(self, d):super(DiffusionModel, self).__init__()self.epsilon_predictor = nn.Sequential(nn.Linear(d, d),nn.ReLU(),nn.Linear(d, d))def decode(self, x_t, t, alpha_hat):alpha_hat_t = alpha_hat[t]mu_theta = self.epsilon_predictor(x_t)sigma_t = torch.sqrt(1 - alpha_hat_t)return mu_theta, sigma_tdef encode(x_0, t, alpha_hat):alpha_hat_t = alpha_hat[t]epsilon = torch.randn_like(x_0)epsilon_prime = torch.sign(x_0) * torch.abs(epsilon)x_t = torch.sqrt(alpha_hat_t) * x_0 + torch.sqrt(1 - alpha_hat_t) * epsilon_primereturn x_t, epsilondef compute_total_loss(model, x_0, alpha_hat):num_steps = len(alpha_hat)x_t = x_0epsilon_list = []多步噪声传递过程for t in range(num_steps):x_t, epsilon = encode(x_t, t, alpha_hat)epsilon_list.append(epsilon)total_loss = 0反向扩散过程for t in range(num_steps-1, -1, -1):mu_theta, sigma_t = model.decode(x_t, t, alpha_hat)epsilon_t = epsilon_list[t]total_loss += F.mse_loss(mu_theta, epsilon_t)更新 x_t 为上一步的特征x_t = (x_t - torch.sqrt(1 - alpha_hat[t]) * epsilon_t) / torch.sqrt(alpha_hat[t])return total_loss初始化参数
d = 5  # 特征向量维度
beta_schedule = np.linspace(0.1, 0.2, 10)  # 示例 beta 计划
alpha_hat = np.cumprod(1 - beta_schedule)  # 计算 alpha_hat初始化节点特征向量
x_0 = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
print("Initial node features (x_0):", x_0.numpy())初始化模型
model = DiffusionModel(d)计算总损失
total_loss = compute_total_loss(model, x_0, alpha_hat)
print("Total loss:", total_loss.item())

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

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

相关文章

NSCC集群使用笔记

1. 账号申请 如果是 NUS,NTU 或者 ASTAR 的学生,可以直接用自己的学校 ID 登录。登录不上的话可以发邮件联系 nscc 工作人员即可,基本上第二天就会回复解决。 2. VSCode 连接 账号申请下来后进官网设置你的 ssh key 之类的东西就可以登录了。第一次登录成功后,可以参考这篇…

OOP4-6作业总结性Blog

这三次大作业经历了一次题型的更新,不管过程是怎么说的,结果是试卷批改程序退出出题的视野了,取而代之的是电路设计题。对于电路设计题我认为出的更加合理些,不像试卷批改题难点都在写正则表达式上,多了对类间关系的考察。 这三次题目集期间,我们在课上主要学习了一系列设…

.NET借助虚拟网卡实现一个简单异地组网工具

由于工作需要,经常需要远程客户的服务器,但是并不是所有服务器都能开外网端口,使用向日葵等软件终究还是不太方便,于是找了很多工具,包括zerotier 等,但是由于服务器在国外等有时候还不同, 于是开始自己想办法研究一个属于自己的组网工具,最后找到snltty大佬的 https:/…

BUUCTF-Misc(131-140)

[ACTF新生赛2020]剑龙 打开pwd.txt发现是颜文字然后打开随波逐流,AAencode颜文字解密得到welcom3! 看一下这个图片的详细信息,发现然后用颜文字结出来的那个密码,去steghide解密U2FsdGVkX1/7KeHVl5984OsGUVSanPfPednHpK9lKvp0kdrxO4Tj/Q==又是U2f然后这次我还以为是AES加密,…

2024-06-09 闲话

2024-06-09 闲话看老友记看到这里。 诶这个名字好熟悉,诶这个小人物也好熟悉。 诶 Bidirectional Encoder Representations from transformers 也是 BERT 诶我草,这是芝麻街。

[AI资讯0609] SamAltman建立了庞大投资帝国,通义千问Qwen2发布即爆火,OpenAI泄密者公布165页文件,奥特曼百万年薪挖角谷歌TPU人才……

SamAltman建立了庞大投资帝国,但不持OpenAI股票;个人资产包括房产和多家公司股权。他曾在YCombinator担任总裁,并投资40家公司,有五家估值增长100倍以上。尽管他不参与OpenAI决策,但其利益与公司业务存在复杂关系,引发监督和透明度争议……AI资讯奥特曼28亿「投资帝国」曝…

oop 4~6总结

oop 4~6总结 前言知识点继承:第四次作业中新增的ChoiceQuestion和GapFillingQuestion继承Question类;第五次作业中Switch, SteppedSpeedController, ContinuousSpeedController, IncandescentLamp, FluorescentLamp, 和 CeilingFan 都继承Device 类,从而共享其属性和方法。 …

23201630徐弘-第二次blog作业

前言 本次大作业是前一次blog中前三次大作业的迭代,加一个新的两次迭代作业。 设计与分析 第四次大作业 第四次大作业比上一次作业增加了题目类型不同的迭代,通过增加选择题类和填空题类解决,两个都继承自题目信息类,所有信息(题目信息,试卷信息,答卷信息,学生信息 ,删…