Theano重塑

时间:2015-08-04 00:23:24

标签: reshape theano

我无法清楚地理解theano的{​​{1}}。我有一个形状的图像矩阵:

reshape

,其中有 [batch_size, stack1_size, stack2_size, height, width] 个图像堆栈,每个图像都有stack2_size个通道。我现在想将它们转换成以下形状:

stack1_size

这样所有堆栈将组合在一起成为所有通道的一个堆栈。我不确定重塑是否会为我做这件事。我看到重塑似乎没有按字典顺序排列像素,如果它们在中间的尺寸混合。我一直试图通过 [batch_size, stack1_size*stack2_size, 1 , height, width] dimshufflereshape的组合实现这一目标,但无济于事。我将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:5)

Theano reshape的工作方式与numpy reshape一样,默认为order,即'C'

  

'C'表示使用类似C的索引顺序读/写元素   最后一个轴索引变化最快,回到第一个轴索引   改变最慢。

这是一个示例,显示图像像素在通过numpy或Theano重塑后保持相同的顺序。

import numpy
import theano
import theano.tensor


def main():
    batch_size = 2
    stack1_size = 3
    stack2_size = 4
    height = 5
    width = 6
    data = numpy.arange(batch_size * stack1_size * stack2_size * height * width).reshape(
        (batch_size, stack1_size, stack2_size, height, width))
    reshaped_data = data.reshape([batch_size, stack1_size * stack2_size, 1, height, width])
    print data[0, 0, 0]
    print reshaped_data[0, 0, 0]

    x = theano.tensor.TensorType('int64', (False,) * 5)()
    reshaped_x = x.reshape((x.shape[0], x.shape[1] * x.shape[2], 1, x.shape[3], x.shape[4]))
    f = theano.function(inputs=[x], outputs=reshaped_x)
    print f(data)[0, 0, 0]


main()