#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...)
Есть какие-нибудь идеи, в чем причина этого?