我很好奇像这里的简单代码一样使用view(,-1(和flatten有什么区别:
因为我发现大小和数据都是一维的。
import torch
from torch import nn
from torch.utils.data import DataLoader
from torchvision import datasets
from torchvision.transforms import ToTensor, Lambda, Compose
import matplotlib.pyplot as plt
x = torch.rand(3,256,256)
x.size()
a = x.view(x.size(0), -1)
print('after view:',a.size())
m = nn.Sequential(nn.Flatten())
y = m(x)
print('after nn flatten:',y.size())
z = torch.flatten(x)
print('after torch flatten:',y.size())
而且,=和=之间似乎没有区别。contractive表示:返回内存中的连续张量,该张量包含与自身张量相同的数据。但对我来说,它似乎只是返回自张量,而不是具有相同数据的复制或新张量。
c = y
print(c)
b = y.contiguous()
print(b)
# change original data
y[0][0]=1
print(b)
print(c)
print(y)
视图是一种在不修改数据本身的情况下修改查看数据的方式:
torch.view
返回数据视图:数据不被复制,只有";窗口";查看数据更改- CCD_ 2从多维输入返回一维输出。如果
[输入]可以被视为扁平形状(源(
torch.nn.Flatten
只是围绕torch.flatten
的一个方便包装器
连续数据只是意味着数据在内存中是线性可寻址的,例如,对于二维数据,这意味着元素[i][j]
位于位置i * num_columns + j
。如果已经是这种情况,那么.contiguous
将不会更改您的数据或复制任何内容。