PyTorch|view(),改变张量维度
2024-01-07 17:49:51

在构建自己的网络时,了解数据经过每个层后的形状变化是必须的,否则,网络大概率会出现问题。PyToch张量有一个方法,叫做view(),使用这个方法,我们可以很容易的对张量的形状进行改变,从而符合网络的输入要求。
view()的基本用法很简单,只需传入想要的形状即可,
就像这样:
import torchT1=torch.arange(0,16)print(T1)print(T1.size())tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])torch.Size([16])a=T1.view(4,4)b=T1.view(2,8)print(a)print(a.size())print(b)print(b.size())tensor([[ 0, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11],[12, 13, 14, 15]])torch.Size([4, 4])tensor([[ 0, 1, 2, 3, 4, 5, 6, 7],[ 8, 9, 10, 11, 12, 13, 14, 15]])torch.Size([2, 8])
当然,在看一些代码时,往往会发现view()中有参数-1。看下面几个例子???????
c=T1.view(-1,4,4)print(c)print(c.size())tensor([[[ 0, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11],[12, 13, 14, 15]]])torch.Size([1,?4,?4]???????
d=T1.view(-1,8)print(d)print(d.size())tensor([[ 0, 1, 2, 3, 4, 5, 6, 7],[ 8, 9, 10, 11, 12, 13, 14, 15]])torch.Size([2,?8])???????
e=T1.view(8,-1)print(e)print(e.size())tensor([[ 0, 1],[ 2, 3],[ 4, 5],[ 6, 7],[ 8, 9],[10, 11],[12, 13],[14, 15]])torch.Size([8, 2])
通过上述几个例子,view中一个参数定为-1,代表自动调整这个维度上的元素个数,同时保证元素的总个数不变。当然,我们也注意到了这个细节:传入几个参数,代表结果有几个维度。
对于这篇文章:张量扁平化——CNN的Flatten操作
保持batch轴不变,展平其它轴,我们采用的是flatten()方法,这里我们用view()方法。???????
t1=torch.rand([5,3,128,128])print(t1.size())torch.Size([5, 3, 128, 128])???????
t2=t1.view(5,-1)print(t2)print(t2.size())

结果符合我们的预期!
文章来源:https://blog.csdn.net/m0_57569438/article/details/135441436
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!