ValueError: can‘t optimize a non-leaf Tensor 数据在cpu 和gpu之间转换的时候涉及到requires_grad和is_leaf的趣事
当我生成一个可导类型的cpu张量的时候,判断其是否为叶子节点,显示为True ,如下面的代码所示:x = torch.randn(750,2048,requires_grad=True)print(x.is_leaf)#输出为:True但是当我直接把这个生成的cpu类型迁移到gpu上时,有意思的事情发生了:x = torch.randn(750,2048,requires_grad=True).c
·
当我生成一个可导类型的cpu张量的时候,判断其是否为叶子节点,显示为True ,如下面的代码所示:
x = torch.randn(750,2048,requires_grad=True)
print(x.is_leaf)
#输出为:True
但是当我直接把这个生成的cpu类型迁移到gpu上时,有意思的事情发生了:
x = torch.randn(750,2048,requires_grad=True).cuda()
print(x.is_leaf)
#输出为 False
很蒙蔽吧,那么如何让一个生成的张量迁移到gpu上,并且在gpu上也为叶子节点呢?先将数据迁移到gpu上,然后再设置gpu上面的张量的requires_grad为True ,这样就可以了:
x = torch.randn(750,2048).cuda()
x.requires_grad = True
print(x.is_leaf)
#输出结果为: True
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)