2017-02-04 11 views
0

Я пытаюсь реализовать модель базового вариант перевода, где вход и выход предложение на разных языках в CNTK использования LSTMs.Seq2Seq в CNTK: Run Time Error Функция только поддерживает 2 оси динамической

enter image description here

Для достижения этой цели я создаю модель следующим образом:

def create_model(x): 
    with c.layers.default_options(): 
     m = c.layers.Recurrence(c.layers.LSTM(input_vocab_size))(x) 
     m = sequence.last(m) 
     y = c.layers.Recurrence(c.layers.LSTM(label_vocab_size))(m) 
     return m 

batch_axis = Axis.default_batch_axis() 
input_seq_axis = Axis('inputAxis') 
input_dynamic_axes = [batch_axis, input_seq_axis] 
raw_input = input_variable(shape = (input_vocab_dim), dynamic_axes = input_dynamic_axes, name = 'raw_input') 
z= create_model(raw_input) 

Но я получаю следующее сообщение об ошибке:

RuntimeError: Currently PastValue/FutureValue Function only supports input operand with 2 dynamic axis (1 sequence-axis and 1 batch-axis) 

Согласно Я понимаю, динамическая ось в основном те, ось, которая определяется после загрузки данных, в этом случае размер партии и длина входного предложения. Я не думаю, что меняю динамическую ось ввода в любом месте.

Любая помощь очень ценится.

ответ

1

Операции last() полосы динамической оси , так как он сводит входную последовательность к одному значению (вектору мысли).

Вектор мысли должен стать исходным состоянием для второго повторения. Поэтому он не должен передаваться как аргумент данных для второго повторения.

В текущей версии аргумент initial_state функции Recurrence() не может быть зависимым от данных. Это будет возможно в ближайшее время, оно уже находится под обзором кода и вскоре будет объединено.

До тех пор существует более сложный способ передать исходное состояние, зависящее от данных, где вы вручную создаете повторяемость (без слоя Recurrence()) и вручную добавляете начальное скрытое состояние в повторение. Это проиллюстрировано в примере последовательности-2-последовательности.

+0

Спасибо за ваш ответ. Я прошел один и тот же учебник Seq2Seq и хотел избежать этой сложной функции LSTM_Layer. У меня возникло множество сомнений относительно этой функции. Я, вероятно, опубликую их как отдельный вопрос. –

+0

«В текущей версии аргумент initial_state в Recurrence() не может быть зависимым от данных». Теперь поддерживается? Любое обновление об этом? –

0

Это может быть:

input_dynamic_axes= [Axis.default_batch_axis(), Axis.default_dynamic_axis()] 

Первых из них будет количество образца в вашей minibatch, вторая будет длиной последовательности автомагический презюмирован на CNTK

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

  • Нет связанных вопросов^_^