Keras load_model не работает, когда модель обучалась с помощью keras.utiles.Последовательность

#python #lstm #tensorflow2.0 #tf.keras

Вопрос:

У меня очень странная проблема. Мой код для загрузки и сохранения модели как h5 работал без проблем. Затем я изменил генерацию данных для обучения, теперь я создаю подклассы tf.keras.utils.Sequence , которые отлично подходят для обучения и сохранения модели(через tf.keras.callbacks.ModelCheckpoint , но я также пытался сделать это вручную). Но затем, когда я пытаюсь загрузить модель в другой проект(точно такие же версии tensorflow и keras) Я получаю эту ошибку:

 Traceback (most recent call last):
  File "/home/user/somefolder/main.py", line 89, in <module>
    main(sys.argv[1])
  File "/home/user/somefolder/main.py", line 18, in main
    model = load_model()
  File "/home/user/somefolder/main.py", line 49, in load_model
    model = tf.keras.models.load_model(path)
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/keras/saving/save.py", line 200, in load_model
    return hdf5_format.load_model_from_hdf5(filepath, custom_objects,
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/keras/saving/hdf5_format.py", line 180, in load_model_from_hdf5
    model = model_config_lib.model_from_config(model_config,
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/keras/saving/model_config.py", line 52, in model_from_config
    return deserialize(config, custom_objects=custom_objects)
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/keras/layers/serialization.py", line 208, in deserialize
    return generic_utils.deserialize_keras_object(
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/keras/utils/generic_utils.py", line 674, in deserialize_keras_object
    deserialized_obj = cls.from_config(
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/keras/engine/sequential.py", line 434, in from_config
    model.add(layer)
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/tensorflow/python/training/tracking/base.py", line 530, in _method_wrapper
    result = method(self, *args, **kwargs)
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/keras/engine/sequential.py", line 217, in add
    output_tensor = layer(self.outputs[0])
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/keras/layers/recurrent.py", line 659, in __call__
    return super(RNN, self).__call__(inputs, **kwargs)
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/keras/engine/base_layer.py", line 976, in __call__
    return self._functional_construction_call(inputs, args, kwargs,
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/keras/engine/base_layer.py", line 1114, in _functional_construction_call
    outputs = self._keras_tensor_symbolic_call(
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/keras/engine/base_layer.py", line 848, in _keras_tensor_symbolic_call
    return self._infer_output_signature(inputs, args, kwargs, input_masks)
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/keras/engine/base_layer.py", line 886, in _infer_output_signature
    self._maybe_build(inputs)
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/keras/engine/base_layer.py", line 2659, in _maybe_build
    self.build(input_shapes)  # pylint:disable=not-callable
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/keras/layers/recurrent.py", line 577, in build
    self.cell.build(step_input_shape)
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/keras/utils/tf_utils.py", line 259, in wrapper
    output_shape = fn(instance, input_shape)
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/keras/layers/recurrent.py", line 2354, in build
    self.kernel = self.add_weight(
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/keras/engine/base_layer.py", line 647, in add_weight
    variable = self._add_variable_with_custom_getter(
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/tensorflow/python/training/tracking/base.py", line 813, in _add_variable_with_custom_getter
    new_variable = getter(
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/keras/engine/base_layer_utils.py", line 117, in make_variable
    return tf.compat.v1.Variable(
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/tensorflow/python/ops/variables.py", line 266, in __call__
    return cls._variable_v1_call(*args, **kwargs)
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/tensorflow/python/ops/variables.py", line 212, in _variable_v1_call
    return previous_getter(
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/tensorflow/python/ops/variables.py", line 205, in <lambda>
    previous_getter = lambda **kwargs: default_variable_creator(None, **kwargs)
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/tensorflow/python/ops/variable_scope.py", line 2612, in default_variable_creator
    return resource_variable_ops.ResourceVariable(
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/tensorflow/python/ops/variables.py", line 270, in __call__
    return super(VariableMetaclass, cls).__call__(*args, **kwargs)
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/tensorflow/python/ops/resource_variable_ops.py", line 1602, in __init__
    self._init_from_args(
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/tensorflow/python/ops/resource_variable_ops.py", line 1740, in _init_from_args
    initial_value = initial_value()
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/keras/initializers/initializers_v2.py", line 499, in __call__
    fan_in, fan_out = _compute_fans(shape)
  File "/home/user/somefolder/venv/lib/python3.9/site-packages/keras/initializers/initializers_v2.py", line 1009, in _compute_fans
    return int(fan_in), int(fan_out)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
 

Изменение, которое я внес, в основном заключается в том, что до того, как я загрузил все данные прямо в массив numpy в ОЗУ, теперь я загружаю в ОЗУ одновременно только один пакет, используя tf.keras.utils.Sequence супер класс.
И модель каллинга.подходит не так

 model.fit(x=train_dfs[0], y=train_dfs[1] ...)
 

но вот так:

  model.fit(train_gen...)
 

Есть какие-нибудь идеи, в чем причина этого?