2017-02-19 15 views
1

Ich bin neu in CNTK und folgte seq2seq tutorial von CNTK.CNTK Sequenz 2 Sequenz Tutorial: placeholder_variable Initialisierung

Innerhalb der LSTM_layer Funktion, gibt es folgenden Code:

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 

, jetzt in LSTM_Cell(input,(dh,dc)): was ist der Wert für dh und dc?

Ich finde nicht, dass sie überall initialisiert werden, wenn die LSTM_layer-Funktion aufgerufen wird.

Antwort

1

Wenn Sie unten ein paar Zeilen sehen, werden die Platzhalter ersetzt. Zum Zeitpunkt der Modellerstellung verfügen Sie möglicherweise nicht über alle erforderlichen Werte, kennen aber die Form der Daten, die für die Funktion benötigt werden. Sie erstellen Platzhalter (Container) für diese Variablen. Vor dem Ausführen der Funktion werden diese Werte durch Variablen ersetzt, die die zu berechnenden Werte enthalten.

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

+0

Und weiter erklären, warum wir es auf diese Weise in einem RNN, die AVW und dc tatsächlich * nicht * haben Werte für t = 1, weil der RNN/LSTM Update tun müssen Die Gleichung wird unter Verwendung des Wertes des verborgenen Zustands bei t-1 definiert, der nicht existiert. Daher weiß das Netzwerk für diesen ersten Durchlauf durch die RNN, diesen Wert durch einen Standard-Anfangszustand zu ersetzen. –