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