当前位置: 首页 > 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创建全相同的张量

相关文章:

  • Mac vscode could not import github.com/gin-gonic/gin
  • 基于Pytorch框架的深度学习MobileViT神经网络鸟类识别分类系统源码
  • 【AI落地工程技术】-SSE协议
  • 【多线程】进程与线程
  • 计算机毕业设计Hadoop+Hive地震预测系统 地震数据分析可视化 地震爬虫 大数据毕业设计 Spark 机器学习 深度学习 Flink 大数据
  • WPF/C#:程序关闭的三种模式
  • 探索Dagster:现代数据编排的利器
  • Opus从入门到精通(一)简介
  • 深层网络:层数多真的更好吗?
  • 解锁ChatGPT:从原理探索到GPT-2的中文实践及性能优化
  • 【安装笔记-20240612-Linux-内网穿透服务之cpolar极点云】
  • Android 10.0 framework层禁止扫描5g wifi功能实现
  • Jtti:ubuntu文件系统根目录磁盘空间不足怎么办
  • 6月11号作业
  • 【数据结构】二叉树:一场关于节点与遍历的艺术之旅
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • flutter的key在widget list的作用以及必要性
  • Git初体验
  • IndexedDB
  • JAVA SE 6 GC调优笔记
  • java 多线程基础, 我觉得还是有必要看看的
  • js作用域和this的理解
  • node.js
  • Vue.js-Day01
  • 阿里云购买磁盘后挂载
  • 百度地图API标注+时间轴组件
  • 初探 Vue 生命周期和钩子函数
  • 深度学习在携程攻略社区的应用
  • NLPIR智能语义技术让大数据挖掘更简单
  • 阿里云服务器购买完整流程
  • ​iOS实时查看App运行日志
  • ​linux启动进程的方式
  • ## 1.3.Git命令
  • #《AI中文版》V3 第 1 章 概述
  • #pragam once 和 #ifndef 预编译头
  • #预处理和函数的对比以及条件编译
  • (11)MSP430F5529 定时器B
  • (39)STM32——FLASH闪存
  • (Python第六天)文件处理
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (一) 初入MySQL 【认识和部署】
  • .net framework4与其client profile版本的区别
  • .net 微服务 服务保护 自动重试 Polly
  • .Net接口调试与案例
  • .NET开源项目介绍及资源推荐:数据持久层
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • ?.的用法
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @Conditional注解详解
  • @SuppressWarnings(unchecked)代码的作用
  • [ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042