我有一个数据集,我使用batch ['data']进行调用,并获取我的图像输出MxM。获得图像后,我想用一些numpy操作对其进行处理。在此过程中,我希望数据集使用GPU给我图像,然后将输出设备更改为CPU。
我的问题是,Python中函数的隐构化是否按顺序执行?我可以使用
进行此过程吗base = batch['data'].cuda().cpu()
这与:
base = batch['data'].cuda()
base.cpu()
谢谢!
答案 0 :(得分:3)
好吧,CPU会做同样的工作,但是结果不一样。
base = batch['data'].cuda().cpu()
在该行之后,您将cpu()
的输出存储在名为base
的变量中。
base = batch['data'].cuda()
base.cpu()
这两行之后,您将cuda()
的输出存储在名为base
的变量中,而忘记了cpu()
的结果。
答案 1 :(得分:1)
Python中的功能串联是否按顺序执行?
是的,当然:第一个方法返回某个对象,然后在该返回的对象上调用下一个方法。
不,这些代码段不相同:
cpu
的返回值分配给base
此外,如果您需要batch['data'].cuda()
返回的对象,则第一个代码将在其上调用cpu
,然后有可能将其丢弃。。第二个对象保存了该对象,但摆脱了调用cpu
的结果,这可能是不希望的
写batch['data'].cuda()
或tmp = batch['data']; base = tmp.cuda()
时也是如此:batch['data']
返回某个对象,然后可以在该对象上调用.cuda
。
只要函数返回具有您要调用的方法的对象,就可以链接任意数量的方法:thing().a().b().c().d()