ConvLSTM2D initial_state断言错误

时间:2018-05-09 12:13:23

标签: python keras

the latest version of Keras存在问题。我想为ConvLSTM2D提供一个辅助输入,作为图层内存的初始化器。

应该实现此功能,但是,以下代码

from keras.layers import Input
from keras.models import Model
from keras.layers.convolutional_recurrent import ConvLSTM2D

latent_dim, mesh_size = 10, (20, 20)
prior_in = Input(shape=mesh_size + (latent_dim, ))
core_in = Input(shape=(None, ) + mesh_size + (1, ))
core_out = ConvLSTM2D(latent_dim, activation='elu', kernel_size=(3, 3),
                    padding='same')(core_in, initial_state=[prior_in, prior_in])
model = Model([prior_in, core_in], core_out)

加注

  File "tst.py", line 9, in <module>
    padding='same')(core_in, initial_state=[prior_in, prior_in])
  File "python-3.5.4.amd64\lib\site-packages\keras\layers\convolutional_recurrent.py", line 320, in __call__
    output = super(ConvRNN2D, self).__call__(full_input, **kwargs)
  File "python-3.5.4.amd64\lib\site-packages\keras\layers\recurrent.py", line 497, in __call__
    inputs, initial_state, constants, self._num_constants)
  File "python-3.5.4.amd64\lib\site-packages\keras\layers\recurrent.py", line 2247, in _standardize_args
    assert initial_state is None and constants is None

AssertionError

另一方面,此功能似乎是unit tested

经过一些调试后,我发现单元测试的代码与我的代码之间的区别是K.is_keras_tensor(initial_state)仅对上面发布的代码为True。当程序达到convolutional_recurrent.py line 313时,这很重要。如果我通过将行313更改为

来手动禁用if子句
if False and K.is_keras_tensor(additional_inputs[0]):

不会引发错误,可以训练,保存,加载模型并将其用于预测而不会出现任何问题。

问题是:有人观察到同样的行为吗?您是否有任何建议如何在客户端解决问题(不修改Keras源代码)?任何人都可以解释* if子句中的代码段是什么吗?

*)展望history,它是从LSTM实施中here复制粘贴的。

0 个答案:

没有答案