简单来说,例如nn.Pixelshuffle(2),他会将前4个通道,拼在第一个通道的空间中,然后将接下来4个通道拼在输出的第二个通道的空间中,依次类推,见下面的实验就懂了
实验代码
import torch
import torch.nn as nn
ps = nn.PixelShuffle(2)
c=8
h=4
w=4
input = torch.range(1,c*h*w).view(1,c,h,w)
print(input.shape)
output = ps(input)
print("output:",output.size())
print(input)
print(output)
输出
torch.Size([1, 8, 4, 4])
output: torch.Size([1, 2, 8, 8])
tensor([[[[ 1., 2., 3., 4.],
[ 5., 6., 7., 8.],
[ 9., 10., 11., 12.],
[ 13., 14., 15., 16.]],
[[ 17., 18., 19., 20.],
[ 21., 22., 23., 24.],
[ 25., 26., 27., 28.],
[ 29., 30., 31., 32.]],
[[ 33., 34., 35., 36.],
[ 37., 38., 39., 40.],
[ 41., 42., 43., 44.],
[ 45., 46., 47., 48.]],
[[ 49., 50., 51., 52.],
[ 53., 54., 55., 56.],
[ 57., 58., 59., 60.],
[ 61., 62., 63., 64.]],
[[ 65., 66., 67., 68.],
[ 69., 70., 71., 72.],
[ 73., 74., 75., 76.],
[ 77., 78., 79., 80.]],
[[ 81., 82., 83., 84.],
[ 85., 86., 87., 88.],
[ 89., 90., 91., 92.],
[ 93., 94., 95., 96.]],
[[ 97., 98., 99., 100.],
[101., 102., 103., 104.],
[105., 106., 107., 108.],
[109., 110., 111., 112.]],
[[113., 114., 115., 116.],
[117., 118., 119., 120.],
[121., 122., 123., 124.],
[125., 126., 127., 128.]]]])
tensor([[[[ 1., 17., 2., 18., 3., 19., 4., 20.],
[ 33., 49., 34., 50., 35., 51., 36., 52.],
[ 5., 21., 6., 22., 7., 23., 8., 24.],
[ 37., 53., 38., 54., 39., 55., 40., 56.],
[ 9., 25., 10., 26., 11., 27., 12., 28.],
[ 41., 57., 42., 58., 43., 59., 44., 60.],
[ 13., 29., 14., 30., 15., 31., 16., 32.],
[ 45., 61., 46., 62., 47., 63., 48., 64.]],
[[ 65., 81., 66., 82., 67., 83., 68., 84.],
[ 97., 113., 98., 114., 99., 115., 100., 116.],
[ 69., 85., 70., 86., 71., 87., 72., 88.],
[101., 117., 102., 118., 103., 119., 104., 120.],
[ 73., 89., 74., 90., 75., 91., 76., 92.],
[105., 121., 106., 122., 107., 123., 108., 124.],
[ 77., 93., 78., 94., 79., 95., 80., 96.],
[109., 125., 110., 126., 111., 127., 112., 128.]]]])
|