1 torch.reshape
形式
torch.reshape(input, shape)
功能
返回一个与输入张量数据和元素数相同的,但是形状为shape的张量。
参数
- input:需要被重新定义形状的输入张量
- shape:新的形状
使用示例
import torch
if __name__ == '__main__':
a = torch.arange(0, 16)
print(a)
b = torch.reshape(a, shape=(4, 4))
print(b)
输出
tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
2 torch.view
形式
Tensor.view(*shape)
功能
返回一个新的张量,其数据与自张量相同,但形状不同。
返回的张量与输入向量共享相同的数据,具有相同数量的元素,但是可能拥有不同的形状。
参数
- shape:需要修改的形状
使用示例
import torch
if __name__ == '__main__':
a = torch.arange(0, 16)
print(a)
b = a.view(4, 4)
print(b)
输出
tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
3 reshape和view二者的区别
Pytorch的reshape
和view
这两个函数的作用是一模一样,但是两者还是有区别的。
在Pytorch的关于view的官方文档有这么一段话
When it is unclear whether a
view()
can be performed, it is advisable to usereshape()
, which returns a view if the shapes are compatible, and copies (equivalent to callingcontiguous()
) otherwise.
意思是当你搞不清是不是可以使用view
时,那么建议使用reshape
。
区别:
view
只能用在contiguous的张量上,但是reshape
没有这个限制;-
如果在
view
之前使用了transpose
或者permute
等操作,那么需要接一个.contiguous()
操作返回一个contiguous copy,才能使用view
算子。 -
view
输出的Tensor与输入Tensor共享内存。
简单的说,tensor.reshape
可以看做是tensor.contiguous().view
,所以尽可能的使用reshape
,而不是view
。
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:Pytorch – reshape和view的用法和区别
原文链接:https://www.stubbornhuang.com/2442/
发布于:2022年12月09日 9:58:05
修改于:2023年06月21日 17:44:35
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
52