Hi @ptrblck,
I just created a very simple snippet like below:
p = torch.ones((3,4), requires_grad = True)

p1 = p.permute(1,0).flatten()
p2 = p.transpose(1,0).flatten()
p3 = p.T.reshape(-1)

p4 = torch.empty(12)
for i in range(4):
    for j in range(3):
        p4[i*3 + j] = p[j,i]

print(p1, p2, p3, p4)

output
----------------------
tensor([1., 1., ... 1.], grad_fn=<UnsafeViewBackward>)
tensor([1., 1., ... 1.], grad_fn=<UnsafeViewBackward>)
tensor([1., 1., ... 1.], grad_fn=<UnsafeViewBackward>)
tensor([1., 1., ... 1.], grad_fn=<CopySlices>)

seems if we change the shape of original tensor then apply flatten, the grad_fn will become 
so if I am going to use p1~p3 as convolution weight and apply F.conv2d to a tensor x, which p should I use?
F.conv2d(x, p1), or F.conv2d(x, p2), or F.conv2d(x, p3) or F.conv2d(x, p4)???