1

我从 Lasagne 的官方 github 加载了 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)

我知道它需要一个 4D 张量,但我不知道如何纠正它。

你能帮助我吗?谢谢

4

2 回答 2

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 张量,这将被千层面接口接受。

于 2015-07-19T11:14:30.257 回答
0

如您的错误消息中所述,输入应为 4D 张量,形状为(n_samples, n_channel, width, height)。在 MNIST 的情况下,n_channels是 1,width并且height是 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]应该工作。

于 2015-08-14T10:08:45.810 回答