关于pytorch中view的用法

在读dcgan代码的过程中看到了一个nn.upsample的函数,于是打开函数释义看了一下,发现了一个view(1,1,2,2)的用法,不知其意,所以简单做了个试验(学习进度就是这样被落下的……)

释义中的代码为:

>>> input = torch.arange(1, 5, dtype=torch.float32).view(1, 1, 2, 2)
>>> input
tensor([[[[ 1.,  2.],
          [ 3.,  4.]]]])

首先试验一下view(a,b),也就是括号内有两个参数的情况,这个很容易理解,就是将张量reshape为a*b的形式

>>>input=torch.arange(1,5,dtype=torch.float32)
>>>input
Out[5]: tensor([1., 2., 3., 4.])
>>>input=torch.arange(1,5,dtype=torch.float32).view(2,2)
>>>input
Out[7]: 
tensor([[1., 2.],
        [3., 4.]])

输出的结果为一个2*2的矩阵,最小组成单元为1*2的行向量

 

那我们再试一下view(a,b,c)

>>>input=torch.arange(1,5,dtype=torch.float32).view(2,2,3)
Traceback (most recent call last):
  File "D:\Anaconda\envs\pytorch\lib\site-packages\IPython\core\interactiveshell.py", line 2862, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-8-961814ca6dc5>", line 1, in <module>
    input=torch.arange(1,5,dtype=torch.float32).view(2,2,3)
RuntimeError: shape '[2, 2, 3]' is invalid for input of size 4
>>>input=torch.arange(1,5,dtype=torch.float32).view(2,2,1)
>>>input
Out[10]: 
tensor([[[1.],
         [2.]],
        [[3.],
         [4.]]])

这里可以看到,view(2,2,3)报错了,理由是view中参数的乘积不等于4,也就是tensor的大小

改为view(2,2,1)时,输出的结果为4*1的矩阵,但最小组成单元为1*1的元素

 大师,我好像悟了

从左往右开始读,view(2,2,1),一共3层

第一个数字为2,说明最外面这层是2行

第二个数字为2,说明行向量内部也是2行

第三个数字为1,说明行向量的行向量内部为1行(搁着套娃呢),也就是最里面这层就1个元素

对于view(2,2),一共2层

第一个数字为2,说明最外面这层是2行

第二个数字为2,说明最里面这层行向量有2个元素

 那我们再大胆猜一个view(4,1,1),一共3层

第一个数字为4,说明最外面这层是4行

第二个数字为1,说明行向量内部是1行

第三个数字为1,说明最里面这层只有一个元素

表现出来应该就是

 让我们用代码试一下

>>>input=torch.arange(1,5,dtype=torch.float32).view(4,1,1)
>>>input
Out[12]: 
tensor([[[1.]],
        [[2.]],
        [[3.]],
        [[4.]]])

 果然!!!嘿嘿嘿

那么让我们回到源代码上

>>> input = torch.arange(1, 5, dtype=torch.float32).view(1, 1, 2, 2)
>>> input
tensor([[[[ 1.,  2.],
          [ 3.,  4.]]]])

不难理解,view(1,1,2,2)的意思是一共4层:

第一个数字为1,说明最外面这层是1行

第二个数字为1,说明行向量内部是1行

第三个数字为2,说明行向量的行向量内部为2行

第四个数字为2,说明最里面这层有两个元素,然而已经没有第5层了,说明没有2个以上的行向量了,只能是1*2的形式

也就是

 

总结一下,view括号内数字的个数,代表层数,每一层的组成单元一定是行向量,即行数为1的向量

数字从左到右对应从外往内的每一层行向量的个数,最后一个数字对应的是最内层行向量的列数

 

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值