使用Transpose有什么区别?

时间:2016-06-28 08:55:21

标签: python theano transpose conv-neural-network

我正在学习卷积是如何工作的,然后我遇到了这个......当我尝试这个

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, :, :])

After convolution

当我没有转置输入图像,即......

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

Without Tanspose

有人可以解释一下有什么区别吗?

1 个答案:

答案 0 :(得分:0)

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