CNTK Sequence 2 Sequence Tutorial: инициализация placeholder_variable

Я новичок в CNTK и следил за учебником по seq2seq CNTK. .

Внутри функции LSTM_layer есть следующий код:

dh = placeholder_variable(shape=(output_dim), dynamic_axes=input.dynamic_axes)
dc = placeholder_variable(shape=(output_dim), dynamic_axes=input.dynamic_axes)
LSTM_cell = LSTM(output_dim)    
f_x_h_c = LSTM_cell(input, (dh, dc))
h_c = f_x_h_c.outputs

Теперь в LSTM_Cell(input,(dh,dc)):какое значение для dh и dc?

Я нигде не нахожу, чтобы они инициализировались при вызове функции LSTM_layer.


person pseudo_teetotaler    schedule 19.02.2017    source источник


Ответы (1)


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

    replacements = { dh: h.output, dc: c.output }
    f_x_h_c.replace_placeholders(replacements)

person Sayan Pathak    schedule 19.02.2017
comment
И чтобы дополнительно объяснить, почему нам нужно делать это таким образом в RNN, dh и dc фактически не имеют значения для t=1, потому что уравнение обновления RNN/LSTM определяется с использованием скрытого состояния значение в t-1, которого не существует. Следовательно, для этого первого запуска через RNN сеть знает, что нужно заменить это значение начальным состоянием по умолчанию. - person William Darling; 19.02.2017