2021年1月3日星期日

Keras "list index out of range" when saving a model

I'm getting a problem when I want to save my keras model using the model.save method :

IndexError: list index out of range  

Here is the model :

    ### Model ###      # 3 inputs      inputA = tf.keras.layers.Input(shape=(100,))      inputB = tf.keras.layers.Input(shape=(100,))      inputC = tf.keras.layers.Input(shape=(4,))        # First branch      x = tf.keras.models.Sequential()(inputA)      x = tf.keras.layers.Dense(350, activation="relu")(x)      x = tf.keras.layers.Dropout(0.2)(x)      x = tf.keras.layers.Dense(250, activation="relu")(x)      x = tf.keras.layers.Dropout(0.2)(x)      x = tf.keras.layers.Dense(150, activation="relu")(x)      x = tf.keras.layers.Dropout(0.2)(x)      x = tf.keras.layers.Dense(100, activation="relu")(x)      x = tf.keras.layers.Dropout(0.2)(x)      x = tf.keras.layers.Dense(50, activation="relu")(x)      x = tf.keras.layers.Dropout(0.2)(x)      x = tf.keras.layers.Dense(25, activation="relu")(x)      x = tf.keras.layers.Dropout(0.2)(x)      x = tf.keras.layers.Dense(10, activation="relu")(x)      x = tf.keras.layers.Dropout(0.2)(x)      x = tf.keras.layers.Dense(1, activation="sigmoid")(x)      x = tf.keras.models.Model(inputs=inputA, outputs=x)        # Second branch      y = tf.keras.models.Sequential()(inputB)      y = tf.keras.layers.Dense(350, activation="relu")(y)      y = tf.keras.layers.Dropout(0.2)(y)      y = tf.keras.layers.Dense(250, activation="relu")(y)      y = tf.keras.layers.Dropout(0.2)(y)      y = tf.keras.layers.Dense(150, activation="relu")(y)      y = tf.keras.layers.Dropout(0.2)(y)      y = tf.keras.layers.Dense(100, activation="relu")(y)      y = tf.keras.layers.Dropout(0.2)(y)      y = tf.keras.layers.Dense(50, activation="relu")(y)      y = tf.keras.layers.Dropout(0.2)(y)      y = tf.keras.layers.Dense(25, activation="relu")(y)      y = tf.keras.layers.Dropout(0.2)(y)      y = tf.keras.layers.Dense(10, activation="relu")(y)      y = tf.keras.layers.Dropout(0.2)(y)      y = tf.keras.layers.Dense(1, activation="sigmoid")(y)      y = tf.keras.models.Model(inputs=inputB, outputs=y)        # Third branch      w = tf.keras.models.Sequential()(inputC)      w = tf.keras.layers.Dense(200, activation="relu")(w)      w = tf.keras.layers.Dropout(0.2)(w)      w = tf.keras.layers.Dense(200, activation="relu")(w)      w = tf.keras.layers.Dropout(0.2)(w)      w = tf.keras.layers.Dense(150, activation="relu")(w)      w = tf.keras.layers.Dropout(0.2)(w)      w = tf.keras.layers.Dense(100, activation="relu")(w)      w = tf.keras.layers.Dropout(0.2)(w)      w = tf.keras.layers.Dense(50, activation="relu")(w)      w = tf.keras.layers.Dropout(0.2)(w)      w = tf.keras.layers.Dense(1, activation="sigmoid")(w)      w = tf.keras.models.Model(inputs=inputC, outputs=w)        # Concatenate outputs      combined = tf.keras.layers.Concatenate(axis=1)([x.output, y.output, w.output])        # Last branch with combined      z = tf.keras.layers.Dense(200, activation="relu")(combined)      z = tf.keras.layers.Dropout(0.2)(z)      z = tf.keras.layers.Dense(200, activation="relu")(z)      z = tf.keras.layers.Dropout(0.2)(z)      z = tf.keras.layers.Dense(150, activation="relu")(z)      z = tf.keras.layers.Dropout(0.2)(z)      z = tf.keras.layers.Dense(100, activation="relu")(z)      z = tf.keras.layers.Dropout(0.2)(z)      z = tf.keras.layers.Dense(50, activation="relu")(z)      z = tf.keras.layers.Dropout(0.2)(z)      z = tf.keras.layers.Dense(25, activation="relu")(z)      z = tf.keras.layers.Dropout(0.2)(z)      z = tf.keras.layers.Dense(1, activation="sigmoid")(z) #softmax ou sigmoid        model = tf.keras.models.Model(inputs=[x.input, y.input, w.input], outputs=z)      model.compile(optimizer='adam', loss='binary_crossentropy')      model.fit(x=[X1, X2, X3], y=y1, batch_size=128, epochs=nb_epoch, verbose=2)        # Evaluation on test set      ...        # Sauvegarde du model      model.save("path/to/my/model/location")  

Here is the complete error :

Traceback (most recent call last):    File "reseauNeurone.py", line 230, in MLP      model.save("/Users/x/Documents/Cours/DI5/S9/Projet IA/Model")    File "/Users/x/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py", line 1979, in save      signatures, options)    File "/Users/x/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/saving/save.py", line 134, in save_model      signatures, options)    File "/Users/x/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/saving/saved_model/save.py", line 80, in save      save_lib.save(model, filepath, signatures, options)    File "/Users/x/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/saved_model/save.py", line 976, in save      obj, export_dir, signatures, options, meta_graph_def)    File "/Users/x/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/saved_model/save.py", line 1076, in _build_meta_graph      asset_info.asset_index)    File "/Users/x/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/saved_model/save.py", line 721, in _serialize_object_graph      saveable_view.function_name_map)    File "/Users/x/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/saved_model/save.py", line 761, in _write_object_proto      metadata=obj._tracking_metadata)    File "/Users/x/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer.py", line 3011, in _tracking_metadata      return self._trackable_saved_model_saver.tracking_metadata    File "/Users/x/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/saving/saved_model/base_serialization.py", line 54, in tracking_metadata      return json_utils.Encoder().encode(self.python_properties)    File "/Users/x/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/saving/saved_model/layer_serialization.py", line 41, in python_properties      return self._python_properties_internal()    File "/Users/x/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/saving/saved_model/model_serialization.py", line 35, in _python_properties_internal      metadata = super(ModelSavedModelSaver, self)._python_properties_internal()    File "/Users/x/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/saving/saved_model/layer_serialization.py", line 59, in _python_properties_internal      metadata.update(get_config(self.obj))    File "/Users/x/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/saving/saved_model/layer_serialization.py", line 118, in get_config      config = generic_utils.serialize_keras_object(obj)['config']    File "/Users/x/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/utils/generic_utils.py", line 245, in serialize_keras_object      config = instance.get_config()    File "/Users/x/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/engine/functional.py", line 598, in get_config      return copy.deepcopy(get_network_config(self))    File "/Users/x/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/engine/functional.py", line 1261, in get_network_config      kept_nodes = 1 if _should_skip_first_node(layer) else 0    File "/Users/x/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/engine/functional.py", line 1033, in _should_skip_first_node      isinstance(layer._layers[0], input_layer_module.InputLayer))  IndexError: list index out of range  

I have also tried using model.get_config or using json to save the model, but the error remains the same.

Does anyone know how to fix this problem and therefore how to successfully save the model ? Thanks.

https://stackoverflow.com/questions/65552663/keras-list-index-out-of-range-when-saving-a-model January 04, 2021 at 01:12AM

没有评论:

发表评论