2016-09-29 106 views
1

我正在使用Lasagne + Theano创建一个ResNet,并且正在努力使用DenseLayer。如果我使用http://lasagne.readthedocs.io/en/latest/modules/layers/dense.html上的示例,它可以工作。lasagne.layers.DenseLayer:“__init __()至少需要3个参数”

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

DenseLayer有两个位置参数:incoming, num_units。你是这样的实例是:

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

注意,这是比示例代码不同:

DenseLayer(l_in, num_units=50) 

既然你传递关键字参数是num_units作为第二个参数,我认为num_filter被解释为**kwargsDenseLayer is still wanting that num_units`参数之一,并且因为您没有提供错误而引发错误。

您可以num_filter之前提供num_units说法,或者如果这仅仅是一个错字,改变num_filternum_units。 (第二种选择对我来说似乎更有可能,因为尽管我对您使用的库不熟悉,但在链接的文档中没有提及num_filter,尽管某些类似乎需要num_filters--注意尾随s - 论据。)

+1

谢谢,我没有看到:)这是一个错字 – TobSta

相关问题