【问题标题】:Keras Hidden State and Cell State have the wrong shapeKeras Hidden State 和 Cell State 形状错误
【发布时间】:2019-01-16 05:29:00
【问题描述】:

有很多关于如何从 LSTM 中获取 c 和 h 的资源。它的返回值都设置为 true,并且我将 h 和 c 存储在变量中,如下面的代码所示。这是在训练网络后的推理过程中。我的模型的编码器一半应该吐出长度为 hidden_​​dim 的 h 和 c,但正如您将在下面看到的那样,情况并非如此:

    self.enc1 = LSTM(hidden_dim, return_sequences=True, return_state=True, name='enc1')
    self.emb_A = Embedding(output_dim = emb_dim, input_dim = vocabulary, input_length = None, mask_zero=True, name='embA')
               ...
    inference_encInput = Input(shape=(None,), dtype="int32", name="input_seq")

    temp = self.emb_A(inference_encInput)
    temp, h, c = self.enc1(temp)
    encoder_states = [h, c]
    enc_model = Model(inputs = inference_encInput, outputs = encoder_states)
        ...
    predicted_states = enc_model.predict(indices_arr)
    print("encoder states are "+str(predicted_states))

该打印语句的结果是:

    encoder states are [array([[-0.3114952 , -0.19627409],
   [ 0.16007528,  0.72028404],
   [-0.7607165 ,  0.5128824 ]], dtype=float32), array([[-0.8645954 , -0.90217674],
   [ 0.31057465,  0.9236232 ],
   [-0.99791354,  0.99934816]], dtype=float32)]

我的隐藏维度只有 2,因为我只是对极其简单的训练数据进行基本测试。二维向量的数量始终与我尝试编码的序列的长度相同,在本例中为 3,这表明我可能以某种方式获得了一系列状态?但是 h 和 c 应该是最终的隐藏和单元状态。我也不认为只取最后一个是正确的,肯定还有其他事情发生。我不知道我在这里做错了什么,特别是因为解码器的状态在每个时间步都正确获得:

    new states for decoder are [array([[ 0.19158483, -0.16113694]], dtype=float32), array([[ 0.19398187, -0.37419504]], dtype=float32)]

【问题讨论】:

  • 您可以查看这篇文章:machinelearningmastery.com/…
  • 是的,我确实做到了,据我所知,这就是我在这里的原因,状态仍然不对

标签: python keras lstm encoder decoder


【解决方案1】:

如果有人看到这篇文章,我想通了。我将 model.predict() 作为列表传递给 model.predict([1 15 14 2]),但它认为这是我想要预测的事物的列表。对于 lstm,我们希望发送所有四个时间步以进行预测,因此它需要是列表的列表,如 model.predict([[1 15 14 2]])。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-31
    • 2010-09-21
    • 2019-03-28
    • 1970-01-01
    • 2021-01-03
    • 2022-07-27
    • 1970-01-01
    相关资源
    最近更新 更多