GVKun编程网logo

torch.stack()和torch.cat()函数之间有什么区别?(torch.vstack)

8

如果您想了解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.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

在给 定维度上 连接给定序列张量的序列。

因此,如果AB具有形状(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.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()之间有什么区别?

bool()operator.truth()两个测试值是否
truthyfalsy ,他们似乎从文档颇为相似,它甚至说,在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()在不带参数的情况下调用returns
Falsewhiletruth()需要一个参数。2)bool()接受x关键字参数,例如bool(x=1),而truth()没有关键字参数。bool()对于常规用例,这两者都会增加开销。

关键字的实现很奇怪,因为可能没有人需要它,而且名称x几乎没有描述性。Issue29695涵盖了这一点,实际上,该问题不仅影响到bool()其他类,例如int()list()。但是,从Python
3.7开始,这些关键字参数将被删除,并且速度应会提高。尽管如此,我还是在最新的Python
3.8分支上测试了时序,并且bool()比以前更快,但仍比以前快两倍truth(),这可能是由于的实现更为通用bool()

因此,如果您的任务非常重视速度,那么我建议您在需要函数的情况下使用truth()over
bool()(例如,解析为的键sorted())。但是,正如khelwood所指出的那样,bool()有时还是会更快filter(bool,iterable),所以最好将您的用例确定为最佳选择。

当然,如果您不需要功能,而只想测试值是 还是 ,则应使用惯用语ififnot语句,如khelwood和ser2357112所评论的那样,这是最快的。

clock(),gettickcount(),QueryPerformanceCounter()和QueryPerformanceFrequency()之间有什么区别?

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()有什么区别?

如何解决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()有什么区别?的相关信息,可以在本站进行搜索。

本文标签: