如果您想了解torch.stack和和torch.cat的知识,那么本篇文章将是您的不二之选。我们将深入剖析torch.stack的各个方面,并为您解答和torch.cat的疑在这篇文章中,我们将为您
如果您想了解torch.stack和和torch.cat的知识,那么本篇文章将是您的不二之选。我们将深入剖析torch.stack的各个方面,并为您解答和torch.cat的疑在这篇文章中,我们将为您介绍torch.stack的相关知识,同时也会详细的解释和torch.cat的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- torch.stack()和torch.cat()函数之间有什么区别?(torch.vstack)
- 'torch.backends.cudnn.deterministic=True' 和 'torch.set_deterministic(True)' 之间有什么区别?
- bool()和operator.truth()之间有什么区别?
- clock(),gettickcount(),QueryPerformanceCounter()和QueryPerformanceFrequency()之间有什么区别?
- Django post()定义中的.get()和get_object_or_404()有什么区别?
torch.stack()和torch.cat()函数之间有什么区别?(torch.vstack)
OpenAI的强化学习的REINFORCE和actor-critic示例具有以下代码:
加强:
policy_loss = torch.cat(policy_loss).sum()
演员评论家:
loss = torch.stack(policy_losses).sum() + torch.stack(value_losses).sum()
一种正在使用torch.cat
,另一种正在使用torch.stack
。
据我所知,文档没有对它们之间进行任何明确的区分。
我很高兴知道这些功能之间的区别。
答案1
小编典典stack
沿着 新的维度 连接张量序列。
cat
在给 定维度上 连接给定序列张量的序列。
因此,如果A
和B
具有形状(3,4),torch.cat([A, B], dim=0)
则将具有形状(6,4),torch.stack([A,B], dim=0)
并将具有形状(2,3,4)。
'torch.backends.cudnn.deterministic=True' 和 'torch.set_deterministic(True)' 之间有什么区别?
如何解决''torch.backends.cudnn.deterministic=True'' 和 ''torch.set_deterministic(True)'' 之间有什么区别??
我的网络包括“torch.nn.MaxPool3d”,根据 PyTorch 文档(版本 1.7 - https://pytorch.org/docs/stable/generated/torch.set_deterministic.html#torch.set_deterministic),当 cudnn 确定性标志打开时,它会抛出 RuntimeError,但是,当我插入代码“torch.backends”时.cudnn.deterministic=True'' 在我的代码开头,没有 RuntimeError。为什么该代码不抛出 RuntimeError? 我想知道该代码是否能保证我的训练过程的确定性计算。
解决方法
function getAnnotationsFromDocument(docId,callback){
initDB();
var async = require(''async'');
async.waterfall([
function authorize(callback){
//checkAuthorization
(...)
},function getRfpdocAnnotations(auth,metadata,callback){
//call to DB
(...)
},function processRfpdocAnnotations(rfpDocAnnotations,callback){
(...)
callback(null,annotationsList);
}
],function (err,result) {
if(err) {
callback(err);
} else {
callback(null,result);
}
});
}
仅适用于 CUDA 卷积运算,仅此而已。因此,不,它不能保证您的训练过程是确定性的,因为您还使用了 torch.backends.cudnn.deterministic=True
,其后向函数对于 CUDA 是不确定的。
torch.nn.MaxPool3d
会影响此处列出的所有正常非确定性操作(请注意,torch.set_deterministic()
在 1.8 中已重命名为 set_deterministic
):https://pytorch.org/docs/stable/generated/torch.use_deterministic_algorithms.html?highlight=use_deterministic#torch.use_deterministic_algorithms
正如文档所述,某些列出的操作没有确定性的实现。因此,如果设置了 use_deterministic_algorithms
,它们将抛出错误。
如果您需要使用诸如 torch.use_deterministic_algorithms(True)
之类的非确定性操作,那么目前,您的训练过程无法确定性——除非您自己编写自定义确定性实现。或者您可以打开一个 GitHub 问题请求确定性实现:https://github.com/pytorch/pytorch/issues
此外,您可能想查看此页面:https://pytorch.org/docs/stable/notes/randomness.html
bool()和operator.truth()之间有什么区别?
bool()
和operator.truth()
两个测试值是否
truthy 或 falsy ,他们似乎从文档颇为相似,它甚至说,在truth()
文档是:
这等效于使用bool构造函数。
但是,truth()
速度bool()
是简单测试的两倍(显示了Python 3.6的计时,但2.7相似):
from timeit import timeitprint(timeit(''bool(1)'', number=10000000))# 2.180289956042543print(timeit(''truth(1)'', setup=''from operator import truth'', number=10000000))# 0.7202018899843097
那有什么区别呢?我应该使用truth()
代替bool()
吗?
答案1
小编典典虽然bool()
并operator.truth()
输出 为主要用途的情况下相同的结果他们的 实现
实际上是相当不同的。bool()
是一个类或类型的构造函数,同时truth()
是一个狭窄的优化正则函数。
实际上,还有两个区别:1)bool()
在不带参数的情况下调用return
sFalse
whiletruth()
需要一个参数。2)bool()
接受x
关键字参数,例如bool(x=1)
,而truth()
没有关键字参数。bool()
对于常规用例,这两者都会增加开销。
关键字的实现很奇怪,因为可能没有人需要它,而且名称x
几乎没有描述性。Issue29695涵盖了这一点,实际上,该问题不仅影响到bool()
其他类,例如int()
或list()
。但是,从Python
3.7开始,这些关键字参数将被删除,并且速度应会提高。尽管如此,我还是在最新的Python
3.8分支上测试了时序,并且bool()
比以前更快,但仍比以前快两倍truth()
,这可能是由于的实现更为通用bool()
。
因此,如果您的任务非常重视速度,那么我建议您在需要函数的情况下使用truth()
overbool()
(例如,解析为的键sorted()
)。但是,正如khelwood所指出的那样,bool()
有时还是会更快filter(bool,iterable)
,所以最好将您的用例确定为最佳选择。
当然,如果您不需要功能,而只想测试值是 真 还是 假 ,则应使用惯用语if
或ifnot
语句,如khelwood和ser2357112所评论的那样,这是最快的。
clock(),gettickcount(),QueryPerformanceCounter()和QueryPerformanceFrequency()之间有什么区别?
他们都提供毫秒分辨率吗?
Linux clock_gettime(CLOCK_MONOTONIC)奇怪的非单调行为
C:Windows和其他操作系统中clock()的不同实现?
了解clock_gettime的问题
如何查看用户是否设置时钟?
在linux的进程间通信应该使用哪个时钟?
不,他们没有毫秒精度。 clock和GetTickCount在大多数系统上具有4到15毫秒的精度。 QueryPerformanceCounter的精度在微秒到纳秒范围内。
clock是GetTickCount一个包装,如果你使用微软的C运行时库,如果你使用的是MS编译器,你可能是。 GetTickCount返回一个以毫秒为单位的值,但在一毫秒后它不会增加1毫秒。 只有当系统时钟中断发生时才会增加,这个时间间隔是每4到15毫秒 – 通常是15ms,但是它可以被应用程序改变。 这会影响整个计算机:它影响线程调度,并且更频繁的中断的开销也会使实际运行的程序代码的cpu时间更少,所以除非真的需要,否则不要这样做。 如果你的计算机的打勾时间比15ms多一些,其他一些应用程序已经修改了打勾中断频率。
QueryPerformanceCounter使用系统上可用的任何高分辨率计时器。 在过去,通常是基于处理器内部的时钟周期计数,所以计算在2-3GHz或约0.5ns。 不幸的是,一些处理器会改变计数器在处于低功耗状态时的速率,而在多cpu系统(即多处理器插槽)中,如果cpu速度并不一样,则会出现问题。 Windows现在使用其他更可靠的来源,但它们的分辨率不如处理器那么高。 QueryPerformanceFrequency告诉您一秒钟内有多少个刻度。 要获得毫秒,将QPC样本的差值乘以1000,除以QueryPerformanceFrequency的结果。
clock
一个C ++函数 它会返回自应用程序启动以来cpu的滴答数。 要将其转换为秒,请用CLOCKS_PER_SEC分隔。
GetTickCount
一个Win32 API函数。 返回系统启动以来的毫秒数。
QueryPerformanceCounter
一个Win32 API函数。 性能计数器是随着时间的推移而增加的高分辨率计数器 。 要将其转换为以秒为单位按QueryPerformanceFrequency划分。
Django post()定义中的.get()和get_object_or_404()有什么区别?
如何解决Django post()定义中的.get()和get_object_or_404()有什么区别??
我在基于类的视图中具有以下代码:
def post(self,request,pk,slug,**kwargs):
self.page = Post.objects.get(pk=pk)
通过给定的pk,模板可以从Post模型中访问对象的属性。
但是,当我这样做时:
def post(self,**kwargs):
self.page = get_object_or_404(Post,pk=pk)
模板无法识别页面变量。感谢您的解释。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
我们今天的关于torch.stack和和torch.cat的分享就到这里,谢谢您的阅读,如果想了解更多关于'torch.backends.cudnn.deterministic=True' 和 'torch.set_deterministic(True)' 之间有什么区别?、bool()和operator.truth()之间有什么区别?、clock(),gettickcount(),QueryPerformanceCounter()和QueryPerformanceFrequency()之间有什么区别?、Django post()定义中的.get()和get_object_or_404()有什么区别?的相关信息,可以在本站进行搜索。
本文标签: