我无法清楚地理解theano
的{{1}}。我有一个形状的图像矩阵:
reshape
,其中有 [batch_size, stack1_size, stack2_size, height, width]
个图像堆栈,每个图像都有stack2_size
个通道。我现在想将它们转换成以下形状:
stack1_size
这样所有堆栈将组合在一起成为所有通道的一个堆栈。我不确定重塑是否会为我做这件事。我看到重塑似乎没有按字典顺序排列像素,如果它们在中间的尺寸混合。我一直试图通过 [batch_size, stack1_size*stack2_size, 1 , height, width]
,dimshuffle
和reshape
的组合实现这一目标,但无济于事。我将不胜感激。
感谢。
答案 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()