【问题标题】:lasagne.layers.DenseLayer: "__init__() takes at least 3 arguments"lasagne.layers.DenseLayer:“__init__() 至少需要 3 个参数”
【发布时间】:2017-02-08 00:24:25
【问题描述】:

我正在使用 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)

【问题讨论】:

    标签: python deep-learning theano lasagne


    【解决方案1】:

    DenseLayer 接受两个位置参数:incoming, num_units。您正在像这样实例化它:

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

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

    DenseLayer(l_in, num_units=50)
    

    由于您传递的关键字参数 not num_units 作为第二个参数,我认为 num_filter 被解释为 **kwargsDenseLayer is still wanting thatnum_units 之一参数,并引发错误,因为您没有提供它。

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

    【讨论】:

    • 谢谢,我没看到 :) 是错字
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多