2015-07-19 93 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]也應該工作。