直接说结论,view()和flatten都是和输入共享内存的,flatten的好处是不用输入形状参数,直接指定维度,在这之后的都被拉平。view则是更加灵活
示验证代码:
import torch
t = torch.tensor([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
# ---flatten用法----
print('flatten1')
print(torch.flatten(t))
print('flatten3')
print(torch.flatten(t, start_dim=1))
# ---证明内存共享----
b = torch.flatten(t)
b[1] += 1
print('ori')
print(t)
print('change after flatten')
print(b)
t = torch.tensor([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
# ---flatten and view 的对比----
print('view')
s1, s2, s3 = t.size()
print(t.view(s1 * s2 * s3))
print('flatten')
print(torch.flatten(t))
# ---内存共享----
b = t.view(s1 * s2 * s3)
b[1] += 1
print('ori')
print(t)
print('change after view')
print(b)