2015-07-19 38 views
1

我从官方的烤宽面条加载了mnist_conv.py示例。从千层面(蟒蛇深度神经网络框架)获取输出

在和,我想预测我自己的例子。我看到“lasagne.layers.get_output()”应该处理来自官方文档的numpy数组,但它不起作用,我无法弄清楚我该怎么做。

这里是我的代码:

if __name__ == '__main__': 
    output_layer = main() #the output layer from the net 
    exampleChar = np.zeros((28,28)) #the example I would predict 
    outputValue = lasagne.layers.get_output(output_layer, exampleChar) 
    print(outputValue.eval()) 

,但它给了我:

TypeError: ConvOp (make_node) requires input be a 4D tensor; received "TensorConstant{(28, 28) of 0.0}" (2 dims) 

我明白,它需要一个四维张量,但我没有任何想法如何纠正它。

你能帮我吗?谢谢

+0

该示例是一个空白图像?因为np.zeros((28,28))意味着。 – Geeocode

+0

你在输入形状中设置了什么 – Geeocode

+0

是的,因为只是一个例子。我会用我的意图使用其他阵列。 – Jlearner

回答

0

首先,您尝试将一个“图片”传递到您的网络,因此它的尺寸为(256,256)

但是它需要一个3维数据的列表,即图像,它在theano中被实现为4D张量。

我没有看到您的完整代码,您打算如何使用烤宽面条界面,但是如果您的代码编写得当,从我目前看到的情况来看,我认为您应该先将您的(256,256)数据转换为单一通道像(1,256,256)这样的图像,然后通过使用更多的(1,256,256)列表中的数据来列表,例如[(1,256,256), (1,256,256), (1,256,256)],或者从[(1,256,256)]这个单例中列出一个列表。 先前你得到,然后通过(3,1,256,256),后一个(1,1,256,256)4D张量,这将被烤宽面界面接受。

0

正如您的错误消息中所写,预计输入是4D张量,形状为(n_samples, n_channel, width, height)。在MNIST情况下,n_channels是1,以及widthheight是28.

但是正在输入2D张量,形状(28, 28)的。您需要添加新的坐标轴,您可以用exampleChar = exampleChar[None, None, :, :]

exampleChar = np.zeros(28, 28) 
print exampleChar.shape 
exampleChar = exampleChar[None, None, :, :] 
print exampleChar.shape 

输出

(28, 28) 
(1, 1, 28, 28) 

注意做到:我认为你可以使用np.newaxis,而不是None添加一个轴。并且exampleChar = exampleChar[None, None]也应该工作。