当前位置: 首页 > news >正文

【学习笔记8】阅读StyleID论文源码

论文【链接】
源码【链接】

一、DDIM eta

ddim_step表示执行几轮去噪迭代,eta表示DDPM和DDIM的插值系数。当eta=0时,为DDPM;当eta≠0时,为DDIM。

参考

DDIM 简明讲解与 PyTorch 实现:加速扩散模型采样的通用方法
【stable diffusion】两个与采样器有关的参数效果:eta大小与ddim插值方式

二、torch.permute()函数

作用:

用于对torch进行维度变换。

transpose与permute的异同:

同:都是对tensor维度进行转置
异:permute函数可以对任意高维矩阵进行转置,但没有torch.permute()这个调用方式
对比:permute,也可以多次使用transpose

# 例子
torch.randn(2,3,4,5).permute(3,2,0,1).shape

参考

Pytorch之permute函数

三、parser.add_argument(action=‘store_true’)

action=‘store_true’表示:只要运行时该变量有传参就将该变量设为True。

参考

python之parser.add_argument()用法——命令行选项、参数和子命令解析器

四、seed everything()

这是一个用于设置随机数种子的函数,它可以确保在每次运行程序时生成的随机数序列都是相同的。这对于需要重现实验结果或调试代码非常有用。该函数的参数是一个整数值,它可以是任何值,但通常使用当前时间戳或其他唯一的标识符作为种子值。

什么是随机种子

随机数,分为真随机数和伪随机数,真随机数需要自然界中真实的随机物理现象才能产生,而对于计算机来说生成这种随机数是很难办到的。而伪随机数是通过一个初始化的值,来计算来产生一个随机序列,如果初始值是不变的,那么多次从该种子产生的随机序列也是相同的。这个初始值一般就称为种子。

程序中的随机数:

np.random.seed只影响 NumPy 的随机过程,torch.manual_seed也只影响 PyTorch 的随机过程。

import torch
torch.manual_seed(777)print(torch.rand(1))  # 始终输出:tensor([0.0819])
print(torch.rand(1))  # 始终输出:tensor([0.4911])

CUDA 的随机数:

PyTorch 中,还有另一个设置随机种子的方法:torch.cuda.manual_seed_all,从名字可知这是设置显卡的随机种子。

import torch
torch.cuda.manual_seed_all(777)print(torch.rand(1))  # 多次调用都产生不同输出
print(torch.rand(1, device="cuda:0"))  # 始终输出 tensor([0.3530], device='cuda:0')
print(torch.rand(1, device="cuda:1"))  # 始终输出 tensor([0.3530], device='cuda:0')

不同设备之间的随机数:

在 CPU 上创建 Tensor,再切换到 GPU 上。只要不直接在 GPU 上创建随机变量,就可以在 CPU 和 GPU 上产出相同的结果。

import torchtorch.manual_seed(777)
print(torch.rand(1).to("cuda:0"))  # 输出 tensor([0.0819], device='cuda:0')

参数

Seed Everything - 可复现的 PyTorch(一)

五、Python getattr() 函数

getattr() 函数用于返回一个对象属性值。

参考

Python getattr() 函数

六、tensor.detach()

返回一个新的tensor,从当前计算图中分离下来的,但是仍指向原变量的存放位置,不同之处只是requires_grad为false,得到的这个tensor永远不需要计算其梯度,不具有grad。即使之后重新将它的requires_grad置为true,它也不会具有梯度grad。
这样我们就会继续使用这个新的tensor进行计算,后面当我们进行反向传播时,到该调用detach()的tensor就会停止,不能再继续向前进行传播。
注意:使用detach返回的tensor和原始的tensor共同一个内存,即一个修改另一个也会跟着改变。

参考

pytorch的两个函数 .detach() .detach_() 的作用和区别

七、torch.full()

用于创建全相同的张量。

## 例子
t = torch.full((3,3),10)
print("torch.full((3,3),10)的输出结果\n",t)
## 输出结果
torch.full((3,3),10)的输出结果
tensor([[10., 10., 10.],[10., 10., 10.],[10., 10., 10.]])

参考

PyTorch | torch.full()使用方法 | torch.full()如何使用? torch.full()例子说明 | 通过torch.full创建全相同的张量

http://www.lryc.cn/news/371709.html

相关文章:

  • wordpress旅游网站模板
  • vs2019 c++20规范 STL 库中头文件 <atomic> 源码注释及探讨几个知识点
  • Flink任务如何跑起来之 2.算子 StreamOperator
  • 学习笔记——路由网络基础——路由优先级(preference)
  • 数据预处理——调整方差、标准化、归一化(Matlab、python)
  • opencv_特征检测和描述
  • CID引流电商下的3C产品选品策略深度解析
  • DeepSORT(目标跟踪算法)中的状态向量与状态转移矩阵
  • 李宏毅深度学习01——基本概念简介
  • TcpClient 服务器、客户端连接
  • 13大最佳工程项目管理系统软件盘点
  • SpringMVC:拦截器(Interceptor)
  • 【Python】selenium使用find_element时解决【NoSuchWindowException】问题的方法
  • PTA:7-188 水仙花数
  • HTML静态网页成品作业(HTML+CSS+JS)—— 美食企业曹氏鸭脖介绍网页(4个页面)
  • SCI二区|鲸鱼优化算法(WOA)原理及实现【附完整Matlab代码】
  • 人脸匹配——OpenCV
  • 韩顺平0基础学java——第22天
  • 神经网络介绍及教程案例
  • 16个不为人知的资源网站,强烈建议收藏!
  • pandas获取某列最大值的所有数据
  • App UI 风格展现非凡创意
  • rocketmq-5.1.2的dleger高可用集群部署
  • 无线网络与物联网技术[1]之近距离无线通信技术
  • Codeforces Round 952 (Div. 4)
  • spark MLlib (DataFrame-based) 中的聚类算法Bisecting K-Means、K-Means、Gaussian Mixture
  • 天降流量于雀巢?元老品牌如何创新营销策略焕新生
  • 新疆在线测宽仪配套软件实现的9大功能!
  • 考研计组chap3存储系统
  • 杨氏矩阵和杨辉三角的空间复杂度较小的解题思路