Python 3.x CNTK序列2序列教程:占位符变量初始化

Python 3.x CNTK序列2序列教程:占位符变量初始化,python-3.x,deep-learning,lstm,cntk,Python 3.x,Deep Learning,Lstm,Cntk,我是CNTK的新手,也是CNTK的追随者 在LSTM_层函数中,有以下代码: 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(

我是CNTK的新手,也是CNTK的追随者

在LSTM_层函数中,有以下代码:

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_单元(输入,(dh,dc))
dh和
dc
的值是多少


调用LSTM_layer函数时,我没有发现它们在任何地方被初始化。

如果您看到下面几行,您会发现占位符被替换。在创建模型时,您可能没有所需的所有值,但知道该函数工作所需的数据形状。您可以为这些变量创建占位符(容器)。在执行函数之前,这些值将替换为保存要计算的值的变量

replacements={dh:h.output,dc:c.output}

f_x_h_c.replace_占位符(replacements)
为了进一步解释为什么我们需要在RNN中这样做,dh和dc实际上没有t=1的值,因为RNN/LSTM更新方程是使用t-1处不存在的隐藏状态值定义的。因此,对于第一次运行RNN,网络知道用默认初始状态替换该值。