PyTorch中unbind()函数是否返回张量的视图?
关于
torch.unbind()是否返回视图的解答 结论:torch.unbind()返回的是原张量的视图,而非独立副本。
验证代码
可以通过修改原张量来直观验证这一点:
import torch my_tensor = torch.tensor([[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]) # 获取unbind后的张量元组 unbound_tuple = torch.unbind(my_tensor) # 修改原张量的某个元素 my_tensor[0, 0] = 99 # 查看unbind后的第一个张量,会发现其值已同步变化 print(unbound_tuple[0]) # 输出: tensor([99, 1, 2, 3])
补充说明
虽然unbind()的官方文档没有像split()、chunk()等同类函数那样明确标注返回视图,但从PyTorch的设计逻辑来看:
unbind()本质是沿指定维度对原张量进行切片拆分,这类基于维度的拆分操作默认都是返回视图,不会额外分配内存创建副本。- 如果需要获取独立的张量副本,可以对unbind后的张量调用
.clone()方法。
内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito
相关产品推荐
相关产品推荐

