2016-11-11 2 views
1

Я использую класс CustomOp в MXNet для создания нового слоя преобразования. Этот слой имеет output_dimensionality как гиперпараметр для слоя. Эта размерность не может быть автоматически выведена из данных, но должна быть выбрана абонентом, который строит сетевой график, поэтому он должен быть конструктор аргументом для нового символа, какПередача дополнительных аргументов конструктора на пользовательский уровень в MXNet

net = mx.symbol.Custom(data=data, op_type='mycustomop', output_dimensionality=1024) 

, который будет потребляемый конструктором __init__ моего подкласса CustomOp. Но когда я пытаюсь это, я получаю:

Traceback (most recent call last): File "_ctypes/callbacks.c", line 314, in 'calling callback function' File "python/mxnet/operator.py", line 602, in creator op_prop = prop_cls(**kwargs) TypeError: __init__() got an unexpected keyword argument 'output_dimensionality' Segmentation fault (core dumped)

ответ

1

Это не должно быть проблемой, но вам нужно будет указать свой параметр как в классе CustomOp и класса CustomOpProps.

Адрес example how to do that. Есть 2 пользовательских параметра, переданных в init: pos_grad_scale и neg_grad_scale, и они принимаются как в CustomOp, так и в CustomOpProps.

Также обратите внимание, что есть преобразование в поплавок с помощью функции float(). Это делается потому, что такие параметры всегда передаются как строки (даже если это массив), поэтому вам нужно будет преобразовать целое число обратно из строки.