python - PyTorch:tensor.cuda() 和 tensor.to(torch.device("cuda:0")) 有什么区别?
问题描述
在 PyTorch 中,以下两种向 GPU 发送张量(或模型)的方法有什么区别:
设置:
X = np.array([[1, 3, 2, 3], [2, 3, 5, 6], [1, 2, 3, 4]]) # X = model()
X = torch.DoubleTensor(X)
方法一 | 方法二 |
---|---|
X.cuda() |
device = torch.device("cuda:0") X = X.to(device) |
(我真的不需要详细解释后端发生的事情,只是想知道它们是否本质上都在做同样的事情)
解决方案
两者没有区别。
pytorch 的早期版本具有将张量和模型从 cpu 移动到 gpu 并返回的方法.cuda()
。.cpu()
但是,这使得代码编写有点麻烦:
if cuda_available:
x = x.cuda()
model.cuda()
else:
x = x.cpu()
model.cpu()
后来引入.to()
的版本基本上以优雅的方式处理所有事情:
device = torch.device('cuda') if cuda_available else torch.device('cpu')
x = x.to(device)
model = model.to(device)
推荐阅读
- javascript - 在页面函数中调用插件函数不起作用
- citrus-framework - Citrus TestNG 测试数据提供者不匹配
- python - 在这种情况下,如何在为同一个人存储多个面部编码时查找面部编码之间的距离......(Python)
- android - 如何使 PS4 和 Xbox One 控制器在 iOS 13 和 Android 上使用 SDL2 正常工作?
- bash - 使用 read 获取用户输入并稍后将其分配给变量会导致其丢失大小写
- python - __name__ 变量等于“wsgi”而不是“__main__”
- jira - Alexa 技能测试错误:错误处理:无法读取未定义的属性“值”
- spring - Kotlin init 没有从 @Value 获取价值
- php - 创建客户的PHP单元测试问题
- javascript - 如何在没有链接组件的情况下更改 gatsby 中的路线?