“视图"如何显示? PyTorch中的方法工作? [英] How does the "view" method work in PyTorch?

查看:70
本文介绍了“视图"如何显示? PyTorch中的方法工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在以下代码片段中,我对方法view()感到困惑.

I am confused about the method view() in the following code snippet.

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool  = nn.MaxPool2d(2,2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1   = nn.Linear(16*5*5, 120)
        self.fc2   = nn.Linear(120, 84)
        self.fc3   = nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 16*5*5)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

net = Net()

我对以下内容感到困惑.

My confusion is regarding the following line.

x = x.view(-1, 16*5*5)

tensor.view()函数的作用是什么?我已经在很多地方看到了它的用法,但是我不明白它是如何解释其参数的.

What does tensor.view() function do? I have seen its usage in many places, but I can't understand how it interprets its parameters.

如果我给view()函数提供负值作为参数会怎样?例如,如果我叫tensor_variable.view(1, 1, -1),会发生什么?

What happens if I give negative values as parameters to the view() function? For example, what happens if I call, tensor_variable.view(1, 1, -1)?

有人可以举例说明view()函数的主要原理吗?

Can anyone explain the main principle of view() function with some examples?

推荐答案

view函数用于重塑张量.

The view function is meant to reshape the tensor.

说你有张量

import torch
a = torch.range(1, 16)

a是具有1到16(包括)的16个元素的张量.如果要重塑此张量以使其为4 x 4张量,则可以使用

a is a tensor that has 16 elements from 1 to 16(included). If you want to reshape this tensor to make it a 4 x 4 tensor then you can use

a = a.view(4, 4)

现在a将是4 x 4张量. 请注意,在重塑后,元素总数必须保持不变.将张量a重塑为3 x 5张量是不合适的.

Now a will be a 4 x 4 tensor. Note that after the reshape the total number of elements need to remain the same. Reshaping the tensor a to a 3 x 5 tensor would not be appropriate.

如果在某些情况下您不知道要多少行,但是确定了列数,则可以将其指定为-1. (请注意,您可以将其扩展到具有更大尺寸的张量.只有一个轴值可以为-1 ).这是一种告诉库的方式:给我一个具有这么多列的张量,然后您就可以计算出实现此目的所需的适当行数".

If there is any situation that you don't know how many rows you want but are sure of the number of columns, then you can specify this with a -1. (Note that you can extend this to tensors with more dimensions. Only one of the axis value can be -1). This is a way of telling the library: "give me a tensor that has these many columns and you compute the appropriate number of rows that is necessary to make this happen".

这可以在上面给出的神经网络代码中看到.在前进功能中的x = self.pool(F.relu(self.conv2(x)))行之后,您将拥有一个16深度特征图.您必须将其展平以将其分配给完全连接的层.因此,您告诉pytorch重塑所获得的张量,使其具有特定的列数,并告诉它自己决定行数.

This can be seen in the neural network code that you have given above. After the line x = self.pool(F.relu(self.conv2(x))) in the forward function, you will have a 16 depth feature map. You have to flatten this to give it to the fully connected layer. So you tell pytorch to reshape the tensor you obtained to have specific number of columns and tell it to decide the number of rows by itself.

在numpy和pytorch之间具有相似之处,view与numpy的

Drawing a similarity between numpy and pytorch, view is similar to numpy's reshape function.

这篇关于“视图"如何显示? PyTorch中的方法工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆