【发布时间】:2021-01-04 12:06:19
【问题描述】:
当我想使用 model.save 方法保存我的 keras 模型时遇到问题:
IndexError: list index out of range
这是模型:
### 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")
这是完整的错误:
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
我也尝试过使用model.get_config或者使用json来保存模型,但是还是报错。
有谁知道如何解决这个问题以及如何成功保存模型? 谢谢。
【问题讨论】:
标签: python tensorflow keras