2017-02-19 58 views
1

我是CNTK的新手,並且正在關注CNTK的seq2seq tutorialCNTK序列2序列教程:placeholder_variable初始化

裏面的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))什麼是對dhdc價值?

當LSTM_layer函數被調用時,我沒有發現它們在任何地方被初始化。

回答

1

如果你看到下面幾行,你會發現佔位符被替換。在創建模型時,您可能不具備所需的所有值,但知道該功能可以使用的數據的形狀。您爲這些變量創建佔位符(容器)。在執行該函數之前,這些值被替換爲保存要計算的值的變量。

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

+0

進一步解釋,爲什麼我們要做這種方式在RNN,衛生署和直流實際上*不*具有值T = 1協議,因爲RNN/LSTM更新方程使用t-1中不存在的隱藏狀態值來定義。因此,對於通過RNN的第一次運行,網絡知道將該值替換爲默認的初始狀態。 –