DDPM玩具代码调试过程(一)

本文介绍了在使用DDPM代码时遇到的四个常见问题:1.import错误关于相对引用的修正;2.wandb初始化时ValueError和project_name未设置;3.wandb实体参数引发的错误;4.multiprocessing导致的AttributeError。通过修改配置和代码片段,解决了这些问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DDPM玩具代码来源:https://github.com/abarankab/DDPM

1.import报错:

不能用相对引用,需要把from .ema impot xxx 改成 from ema import xxx。所有类似的相对引用都需要修改。

2.报错:ValueError: args.log_to_wandb set to True but args.project_name is None

该报错信息是因为wandb没有注册的原因,参考链接wandb使用方法以及具体设置_wandb.init_神晟的光辉的博客-优快云博客icon-default.png?t=N7T8https://blog.youkuaiyun.com/weixin_43164054/article/details/124156206

注册wandb账号并在当前虚拟环境下输入wandb login,将key复制后输入即可正常运行

3.wandb初始化报错

将初始化步骤中的entity参数删除就可以了,参考使用wandb报错:ERROR Error while calling W&B API: project not found (<Response [404]>)_error error while calling w&b api: user is not log_菜包好次的博客-优快云博客icon-default.png?t=N7T8https://blog.youkuaiyun.com/weixin_43835996/article/details/126955917

wandb.init(entity='',
            project='',
            name=args.exp_name,
            config=args)
改为:

wandb.init(project='',
            name=args.exp_name,
            config=args)

4.报错:AttributeError: Can't pickle local object 'BaseDataset.img_transformer.<locals>.<lambda>'.............
EOFError: Ran out of input

搜索项目里的所有.py代码文件,一个文件的Ctrl+F搜索,看代码里面是否含有workers、mutilprocessing这两个关键字。搜索到workers将其值改为0即可,参考AttributeError: Can't pickle local object 'BaseDataset.img_transformer..'_weixin_39450145的博客-优快云博客icon-default.png?t=N7T8https://blog.youkuaiyun.com/weixin_39450145/article/details/104901193

train_loader = script_utils.cycle(DataLoader(
    train_dataset,
    batch_size=batch_size,
    shuffle=True,
    drop_last=True,
    num_workers=2,
))

将其中的num_workers=0,问题解决


 

### DDPM (Diffusion Probabilistic Models) 的实现代码及相关资源 扩散概率模型(Denoising Diffusion Probabilistic Models, DDPM)是种基于变分自编码器理论的生成模型,其核心思想是通过逐步向数据中添加噪声来学习逆过程中的去噪分布。这种技术近年来因其高质量图像生成能力而备受关注。 #### 官方与社区实现 种广泛使用的官方实现可以参考 labML 提供的开源项目[^1]。该项目不仅提供了详细的文档说明,还包含了多种深度学习算法的实现,其中包括扩散模型的相关部分。labML 的实现注重可读性和教育意义,适合初学者深入理解模型的工作机制。 对于更具体的 DDPM 实现,GitHub 用户 **yuyongsheng1990** 提供了个专注于扩散模型的学习仓库[^2]。此仓库涵盖了多个版本的 DDPM 模型及其改进版,例如条件扩散模型和分类引导方法。这些代码通常基于 PyTorch 构建,并附带训练脚本以及预处理工具。 以下是基于上述两个引用的个简单 DDPM 训练框架示例: ```python import torch from torch import nn from torchvision.utils import save_image class UNet(nn.Module): """定义 U-Net 结构作为 DDPM 中的核心网络""" def __init__(self, channels=3): super(UNet, self).__init__() # 这里省略具体层结构... def forward(self, x, timesteps): return x # 返回预测的噪声 def sample_timesteps(batch_size, max_steps): """随机采样时间步用于训练""" return torch.randint(low=1, high=max_steps, size=(batch_size,)) # 初始化模型和其他组件 model = UNet() optimizer = torch.optim.Adam(model.parameters(), lr=1e-4) for epoch in range(num_epochs): for images in dataloader: optimizer.zero_grad() # 前向传播计算损失函数 t = sample_timesteps(images.size(0), T) loss = compute_loss(model, images, t) loss.backward() # 反向传播 optimizer.step() # 更新参数 if epoch % log_interval == 0: print(f'Epoch {epoch}, Loss: {loss.item()}') ``` 以上代码片段展示了如何构建个基础的 DDPM 训练循环。注意实际应用时可能需要调整超参数并引入更多复杂的正则化手段。 #### 推荐阅读的论文 除了实践外,了解原始理论同样重要。Ho et al. 在《Denoising Diffusion Probabilistic Models》文中首次提出了经典的 DDPM 方法。该文章详细描述了前向扩散过程、反向生成过程的设计原理及优化技巧。另篇值得研究的是 Dhariwal 和 Nichol 发表于 NeurIPS 2021 的工作——他们提出的 EDM(Efficient Denoising Model),进步提升了效率与效果。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值