CNTK: применение среднего пула к выходным данным LSTM

Я пытаюсь применить функцию среднего пула к выходным данным LSTM для последовательности:

  Sequential([
            Embedding(emb_dim),
            pooling(Recurrence(LSTM(hidden_dim), go_backwards=False), PoolingType_Average, (hidden_dim,)),
            Dense(num_labels)
        ])

Когда я просто использовал последний элемент последовательности, он работал без проблем:

Sequential([
            Embedding(emb_dim),
            sequence.last(Recurrence(LSTM(hidden_dim), go_backwards=False)),
            Dense(num_labels)
        ])

а. Правильно ли добавлено объединение в определение сети и описывает ли установленная форма операцию, которую я пытаюсь выполнить? (т. е. усреднить векторы, поступающие из LSTM, для каждого образца в последовательности) b. Формат моих входных данных, который работал при использовании sequence.last, следующий (для 1 последовательности). Нужно ли это изменить, чтобы применить средний пул?

1       |x 5:1  |y 1 0 0 0 0
1       |x 414:1
1       |x 8:1

Ошибка, которую я получаю:

Файл .../model_training.py", строка 55, критерий поезда.placeholders[1]: Input(num_labels, dynamic_axes=[Axis.default_batch_axis()])}) File ".../anaconda3/envs/cntk- py35/lib/python3.5/site-packages/cntk/utils/swig_helper.py", строка 58, в обертке result = f(*args, **kwds) File ".../anaconda3/envs/cntk-py35 /lib/python3.5/site-packages/cntk/ops/functions.py", строка 449, в replace_placeholders возвращает super(Function, self).replace_placeholders(substitutions) File ".../anaconda3/envs/cntk-py35 /lib/python3.5/site-packages/cntk/cntk_py.py", строка 1246, в replace_placeholders возвращает _cntk_py.Function_replace_placeholders(self, placeholderReplacements) RuntimeError: в настоящее время, если операнд поэлементной операции имеет какие-либо динамические оси, они должны совпадать динамические оси других операндов


person malex    schedule 25.01.2017    source источник


Ответы (1)


Объединение работает только со статическими осями. Существует ветка с операцией sequence.pooling, которая должна быть доступна в мастере примерно в конце января (2017 г.). Вы также можете сделать средний пул с повторением. В этом примере пулы с "обученным" средним пулом через повторение.

person Nikos Karampatziakis    schedule 26.01.2017