torch.Tensor.view()

可以从这个函数处理之后的数值要进行什么处理来理解该函数功能

   self.fc_unit = nn.Sequential(
            nn.Linear(in_features=6 * 6 * 248, out_features=1024),
            nn.Linear(in_features=1024, out_features=2)
        )

    def forward(self, x):
        x = self.conv_unit(x)     #进行卷积操作
        print("before:", x.size())
        x = x.view(x.size(0), -1)  # 维度变换
        print("after:", x.size())
        logits = self.fc_unit(x)    # 维度变换后要进入到self.fc_unit(x)
        pred = F.softmax(logits, dim=1)
        return pred

上面是我截取一部分神经网络中的代码片段,程序输出后会得到:

before: torch.Size([256, 248, 6, 6])
after: torch.Size([256, 8928])

在全连接 self.fc_unit 中,要求输入一个二维数据,在这里要求的输入特征数(可以理解为其中的一个维度值)是 6 * 6 * 248 ,每个特征包含若干参数(这里是256个参数,可看作另一个维度值),但全连接前面的卷积操作计算出的数据是一个四维([256, 248, 6, 6] )数据 ,通过 x.view(x.size(0), -1) 之后(x.size(0)表示第一维数据),保持第一维数据量不变,改变后面三个维度的数据,-1可以理解为将剩余维度压缩进一维,这里当然是将三维数据压缩成一维数据,最终就得到了我们想要的类型 [256, 8928] (248 * 6 * 6 = 8928)。

下面看一看 view() 不同操作对比:
随机产生一个四维数据,维度和上述相同。

import torch
x = torch.randn(256, 248,  6, 6)

x0 = x.view(x.size(0), -1)
x1 = x.view(x.size(1), -1)
x3 = x.view(x.size(3), -1)
x3_contrary = x.view(-1, x.size(3))
x4 = x.view(x.size(0), x.size(1), -1)

print("x0.size:", x0.size())
print("x1.size", x1.size())
print("x3.size", x3.size())
print("x3_contrary.size", x3_contrary.size())
print("x4.size", x4.size())

输出结果:

x0.size: torch.Size([256, 8928])
x1.size torch.Size([248, 9216])
x3.size torch.Size([6, 380928])
x3_contrary.size torch.Size([380928, 6])
x4.size torch.Size([256, 248, 36])

所以可以用该函数将不符合输入计算数据的 size 转换为我们想要的数据 size
具体可以查看官方文档:view

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值