将初始_状态传递给Keras中的双向RNN层

将初始_状态传递给Keras中的双向RNN层,keras,recurrent-neural-network,encoder-decoder,Keras,Recurrent Neural Network,Encoder Decoder,我正在尝试用双向GRU在Keras中实现编码器-解码器类型的网络 下面的代码似乎正在运行 src_input = Input(shape=(5,)) ref_input = Input(shape=(5,)) src_embedding = Embedding(output_dim=300, input_dim=vocab_size)(src_input) ref_embedding = Embedding(output_dim=300, input_dim=vocab_size)(ref_i

我正在尝试用双向GRU在Keras中实现编码器-解码器类型的网络

下面的代码似乎正在运行

src_input = Input(shape=(5,))
ref_input = Input(shape=(5,))

src_embedding = Embedding(output_dim=300, input_dim=vocab_size)(src_input)
ref_embedding = Embedding(output_dim=300, input_dim=vocab_size)(ref_input)

encoder = Bidirectional(
                GRU(2, return_sequences=True, return_state=True)
        )(src_embedding)

decoder = GRU(2, return_sequences=True)(ref_embedding, initial_state=encoder[1])
但当我将解码更改为使用
双向
包装器时,它将停止在
model.summary()中显示
编码器
src\u输入
层。新解码器如下所示:

decoder = Bidirectional(
                GRU(2, return_sequences=True)
        )(ref_embedding, initial_state=encoder[1:])
带有双向解码器的
model.summary()
的输出

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_2 (InputLayer)         (None, 5)                 0         
_________________________________________________________________
embedding_2 (Embedding)      (None, 5, 300)            6610500   
_________________________________________________________________
bidirectional_2 (Bidirection (None, 5, 4)              3636      
=================================================================
Total params: 6,614,136
Trainable params: 6,614,136
Non-trainable params: 0
_________________________________________________________________

问题:当我在双向译码器中通过
initial_state
时,是否遗漏了什么?我怎样才能解决这个问题?有没有其他方法可以让它工作呢?

这是一个bug。
RNN
层实现了
\uuuuu调用
,以便可以将处于
初始状态的张量收集到模型实例中。但是,
双向
包装器没有实现它。因此,关于
初始状态
张量的拓扑信息丢失,并且发生了一些奇怪的错误


当我为
双向
实现
初始状态时,我没有意识到这一点。现在应该修好,以后再修好。您可以在GitHub上安装最新的主分支来修复它。

谢谢,它成功了!:)顺便说一句,次要问题是,KERA的预期发布周期是什么?什么时候发布?我不确定。Keras似乎没有一个固定的时间框架来发布新版本(或者只是我不知道)。我认为这取决于项目业主的决定。谢谢。另外,不确定这是否是正确的位置,但双向包装器可能还应该支持RNN支持的
常量
参数。我完全同意。但是我现在还没有计划(和时间)去实现它,因为这个特性对我自己的项目来说并不是那么重要(因为我只注意使用单向解码器)。如果您觉得很紧急,也许您可以在Keras发行板上提交功能请求。实施它并向Keras提交PR会更好:)当然!我将尝试添加一个PR:)