Python Theano重塑&x2013;索引ouf界限
我似乎无法让西亚诺按照自己的意愿重塑我的张量。下面代码波纹管中的重塑应该保持Python Theano重塑&x2013;索引ouf界限,python,debugging,reshape,theano,Python,Debugging,Reshape,Theano,我似乎无法让西亚诺按照自己的意愿重塑我的张量。下面代码波纹管中的重塑应该保持keep_dims维度,并将所有剩余维度展平为单个数组 如果我使用测试值运行该代码,则该代码会在重塑行上的索引器错误:索引超出界限。否则,函数似乎可以编译,但在第一次实际输入时失败,并出现ValueError:新数组的总大小必须保持不变 当我尝试对一个等价的代码使用justnumpy时,它工作正常。我做错什么了吗?或者是否有任何简单的方法可以查看用于重塑的结果尺寸(ipdb没有帮助,因为一切都是Theano变量) 问题与
keep_dims
维度,并将所有剩余维度展平为单个数组
如果我使用测试值运行该代码,则该代码会在重塑
行上的索引器错误:索引超出界限
。否则,函数似乎可以编译,但在第一次实际输入时失败,并出现ValueError:新数组的总大小必须保持不变
当我尝试对一个等价的代码使用justnumpy时,它工作正常。我做错什么了吗?或者是否有任何简单的方法可以查看用于重塑的结果尺寸(ipdb
没有帮助,因为一切都是Theano变量)
问题与如何组合新形状的两个组件有关。这个 由于您使用的是测试值机制,您可以通过简单地打印测试值位和片段来调试这个问题。例如,我使用
print inputs.shape.tag.test_value
print inputs.shape[0:keep_dims].tag.test_value
print inputs.shape[keep_dims:].tag.test_value
print T.prod(inputs.shape[keep_dims:]).tag.test_value
print (inputs.shape[0:keep_dims] + (T.prod(inputs.shape[keep_dims:]),)).tag.test_value
print T.concatenate([inputs.shape[0:keep_dims], [T.prod(inputs.shape[keep_dims:])]]).tag.test_value
这显示了问题的解决方法:使用
T.concatenate
将keep_dim
s与剩余dim的乘积组合起来。太好了,谢谢!不知何故,我错过了你也可以在形状上调用.tag.test\u value
。仅供参考,x.tag.test\u value.shape
和x.shape.tag.test\u value
将给出相同的结果。
print inputs.shape.tag.test_value
print inputs.shape[0:keep_dims].tag.test_value
print inputs.shape[keep_dims:].tag.test_value
print T.prod(inputs.shape[keep_dims:]).tag.test_value
print (inputs.shape[0:keep_dims] + (T.prod(inputs.shape[keep_dims:]),)).tag.test_value
print T.concatenate([inputs.shape[0:keep_dims], [T.prod(inputs.shape[keep_dims:])]]).tag.test_value