data = batch ['data']。cuda()。cpu()是否有意义?

时间:2019-12-06 14:41:46

标签: python numpy pytorch

我有一个数据集,我使用batch ['data']进行调用,并获取我的图像输出MxM。获得图像后,我想用一些numpy操作对其进行处理。在此过程中,我希望数据集使用GPU给我图像,然后将输出设备更改为CPU。

我的问题是,Python中函数的隐构化是否按顺序执行?我可以使用

进行此过程吗
base = batch['data'].cuda().cpu() 

这与:

base = batch['data'].cuda()
base.cpu()

谢谢!

2 个答案:

答案 0 :(得分:3)

好吧,CPU会做同样的工作,但是结果不一样。

base = batch['data'].cuda().cpu() 

在该行之后,您将cpu()的输出存储在名为base的变量中。

base = batch['data'].cuda()
base.cpu()

这两行之后,您将cuda()的输出存储在名为base的变量中,而忘记了cpu()的结果。

答案 1 :(得分:1)

  

Python中的功能串联是否按顺序执行?

是的,当然:第一个方法返回某个对象,然后在该返回的对象上调用下一个方法。

不,这些代码段不相同

  1. 第一个将cpu的返回值分配给base
  2. 第二个扔掉这个值

此外,如果您需要batch['data'].cuda()返回的对象,则第一个代码将在其上调用cpu,然后有可能将其丢弃。。第二个对象保存了该对象,但摆脱了调用cpu的结果,这可能是不希望的

batch['data'].cuda()tmp = batch['data']; base = tmp.cuda()时也是如此:batch['data']返回某个对象,然后可以在该对象上调用.cuda

只要函数返回具有您要调用的方法的对象,就可以链接任意数量的方法:thing().a().b().c().d()