lasagne.layers.DenseLayer:" __ init __()至少需要3个参数"

时间:2016-09-29 15:25:24

标签: python deep-learning theano lasagne

我使用Lasagne + Theano创建了一个ResNet,并且正在努力使用DenseLayer。如果我使用http://lasagne.readthedocs.io/en/latest/modules/layers/dense.html上的示例,则可以使用。

l_in = InputLayer((100, 20))
l1 = DenseLayer(l_in, num_units=50)

但如果我想在我的项目中使用它:

#other layers

resnet['res5c_branch2c'] = ConvLayer(resnet['res5c_branch2b'], num_filters=2048, filter_size=1, pad=0, flip_filters=False)
resnet['pool5'] = PoolLayer(resnet['res5c'], pool_size=7, stride=1, mode='average_exc_pad', ignore_border=False)
resnet['fc1000'] = DenseLayer(resnet['pool5'], num_filter=1000)

Traceback (most recent call last):File "convert_resnet_101_caffe.py", line 167, in <module>
resnet['fc1000'] = DenseLayer(resnet['pool5'], num_filter=1000)TypeError: __init__() takes at least 3 arguments (2 given)

1 个答案:

答案 0 :(得分:1)

DenseLayer有两个位置参数:incoming, num_units。你正在实例化它:

DenseLayer(resnet['pool5'], num_filter=1000)

请注意,这与示例代码不同:

DenseLayer(l_in, num_units=50)

由于您传递的是 not num_units的关键字参数作为第二个参数,我认为num_filter被解释为**kwargs之一,和DenseLayer is still wanting that num_units`参数,并且由于您没有提供错误而引发错误。

您可以在num_units之前提供num_filter参数,或者如果这只是一个拼写错误,请将num_filter更改为num_units。 (第二个选项似乎对我来说更有可能,因为虽然我不熟悉您正在使用的库,但我在您链接的文档中没有看到num_filter的任何引用,尽管有些类似乎需要{ {1}} - 请注意尾随的num_filters - 参数。)