2016-09-29 3 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 интерпретируется как один из аргументов num_units` **kwargs и DenseLayer is still wanting that num_units` и вызывает ошибку, так как вы ее не предоставляете.

Вы можете либо предоставить num_units аргумент перед тем num_filter, или если это просто опечатка, изменить num_filter к num_units. (Второй вариант кажется более вероятным для меня с тех пор, хотя я не знаком с библиотекой, которую вы используете, я не вижу ссылки на num_filter в документации, которую вы связали, хотя некоторые классы, похоже, принимают num_filters - обратите внимание на завершающий s - аргумент.)

+1

Спасибо, я не видел этого :) это была опечатка – TobSta

Смежные вопросы