“观"是怎样炼成的方法在 PyTorch 中有效吗? [英] How does the "view" method work in PyTorch?

查看:28
本文介绍了“观"是怎样炼成的方法在 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()

我的困惑在于以下行.

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?

推荐答案

视图函数旨在重塑张量.

The view function is meant to reshape the tensor.

假设你有一个张量

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

a 是一个张量,它有 16 个元素,从 1 到 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".

这可以在您上面给出的神经网络代码中看到.在 forward 函数中的 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天全站免登陆