ConvLSTM2D начальная_утверждение об ошибке - PullRequest
0 голосов
/ 09 мая 2018

У меня проблема с последней версией 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

С другой стороны, эта функция, похоже, проверена на .

После некоторой отладки я обнаружил разницу между кодом, который тестируется модулем, и моим кодом является то, что K.is_keras_tensor(initial_state) имеет значение True только для кода, опубликованного выше. Это важно, когда программа достигает строки convolutional_recurrent.py 313 . Если я вручную отключу условие if, изменив строку 313 на

if False and K.is_keras_tensor(additional_inputs[0]):

Ошибка не возникает, и можно обучить, сохранить, загрузить модель и использовать ее для прогнозирования без каких-либо проблем.

Вопрос: кто-нибудь наблюдает такое же поведение? Есть ли у вас какие-либо предложения, как решить проблему на стороне клиента (без изменения исходного кода Keras)? Кто-нибудь может объяснить, что такое кусок кода в предложении if для *)?

*) Если посмотреть в историю , то она была скопирована из введенной реализации LSTM здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...