Определить пользовательскую функцию с моделью mxnet - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь использовать пользовательскую функцию с моделью нейронной сети mxnet.Предполагается, что эта пользовательская функция создает нечеткое представление вектора активации конечного слоя.

Я запутался, как заставить эту работу работать, поскольку обычные функции python работают императивно, в то время как mxnet работает декларативно (то есть символы).Когда я пытаюсь использовать мою функцию с определенной моделью, возникает исключение, так как параметр представляет собой символ, а не реальный массив при объявлении модели.

Любые идеи относительно того, как заставить мою пользовательскую функцию работать декларативно (например как mxnet.sym.concat)?

Вот мое определение пользовательской функции:

def getFuzzyRep(arr):
    fuzzRep = ""
    x_qual = np.arange(0, 11, 0.1)
    qual_lo = fuzz.trimf(x_qual, [0, 0, 0.5])
    qual_md = fuzz.trimf(x_qual, [0, 0.5, 1.0])
    qual_hi = fuzz.trimf(x_qual, [0.5, 1.0, 1.0])
    FuzzVals=["Low","Medium","High"]
    i =0
    for val in arr:
        if i == 0:
            fuzzRep = FuzzVals[np.argmax([fuzz.interp_membership(x_qual, qual_lo, val),fuzz.interp_membership(x_qual, qual_md, val),fuzz.interp_membership(x_qual, qual_hi, val)])]
        else:
            fuzzRep = fuzzRep +","+FuzzVals[np.argmax([fuzz.interp_membership(x_qual, qual_lo, val),fuzz.interp_membership(x_qual, qual_md, val),fuzz.interp_membership(x_qual, qual_hi, val)])]
        i+=1
    return fuzzRep 

1 Ответ

0 голосов
/ 27 декабря 2018

Вам нужно будет реализовать свою пользовательскую функцию как пользовательскую HybridBlock и использовать только методы из внутреннего интерфейса (параметр F метода hybrid_forward, который необходимо переопределить).Если вы это сделаете, MXNet позаботится об императивной / декларативной разнице для вас.

Посмотрите здесь (более подробное описание) и здесь (подробнееподробное описание).

...