我正在使用 LSTM 层在多个存储单元之间进行多路复用。也就是说,有几个输入选项,我只想将其中一个输入隐藏层。我以这种方式安排了 LSTM 的输入,因此它会根据我传递给它的 input_gate、forget_gate 和 output_gate 以及 cell_input 来选择一个适当的单元格。
但是,LSTM 层似乎转换了记忆单元的值,而我希望它按原样将它们传递给输出。
例如,我传递了以下输入,为了方便起见,我将其打印在与 input_gate、forget_gate、cell_input 和 output_gate 相对应的组中:
ig: [ 0. 1. 0. 0. 0. 0.]
fg: [ 0. 0. 0. 0. 0. 0.]
ci: [ 0.5 0.5 0.5 0.5 0.5 0. ]
og: [ 1. 1. 0. 0. 0. 1.]
我希望 LSTM 层仅将ci[0]
、ci[1]
和传递ci[5]
到og
组指示的输出。但是,我在输出缓冲区中看到的是不同的:
LSTM out: [ 0.16597414 0.23799096 0.1135163 0.1135163 0.1135163 0.]
虽然对我来说不是绝对没有意义(第 0 和第 1 项略大于其余项),但此输出不是[.5 .5 0. 0. 0.]
我所期望的。
根据我对 LSTM 的了解,似乎没有任何从记忆单元到实际输出的转换函数。