使用 Transpose 有什么不同?

What is the difference made by using Transpose?

我正在学习卷积的工作原理然后我遇到了这个..当我尝试这个时

rng = numpy.random.RandomState(23455)
input = T.tensor4(name='input')
w_shp = (2, 3, 9, 9)
w_bound = numpy.sqrt(3 * 9 * 9)
print w_bound
W = theano.shared( numpy.asarray(
            rng.uniform(
                low=-1.0 / w_bound,
                high=1.0 / w_bound,
                size=w_shp),
            dtype=input.dtype), name ='W')
b_shp = (2,)
b = theano.shared(numpy.asarray(
            rng.uniform(low=-.5, high=.5, size=b_shp),
            dtype=input.dtype), name ='b')
            
conv_out = conv2d(input, W,subsample=(2,2))
pooled=downsample.max_pool_2d(conv_out,(2,2),ignore_border=True)
output = T.nnet.sigmoid(pooled + b.dimshuffle('x', 0, 'x', 'x'))
f = theano.function([input], output)
img = Image.open('2.jpg')
img = numpy.asarray(img, dtype='float64') / 256.
l,w,r=img.shape
img_ = img.transpose(2, 0, 1).reshape(1, 3, l, w)
print img_.shape
filtered_img = f(img_)
pylab.subplot(1, 3, 1); pylab.axis('off'); pylab.imshow(img)
pylab.gray();
pylab.subplot(1, 3, 2); pylab.axis('off'); pylab.imshow(filtered_img[0, 1, :, :])
pylab.subplot(1, 3, 3); pylab.axis('off'); pylab.imshow(filtered_img[0, 0, :, :])

当我不转置输入图像时,即...

img_ = img.reshape(1, 3, l, w)

谁能解释一下有什么区别?

原始图像是一个 3d 数组,具有维度(像素行、像素列、通道)。通道是颜色通道(例如 RGB)。 img.transpose(2, 0, 1) 将数组的维度重新排序为(通道、像素行、像素列)。您的其余代码需要此初始排序。它确保卷积发生在每个通道的 space 像素上。如果省略转置,像素坐标和通道将相互混淆。