ValueError:保存张量流模型时无法创建数据集(名称已存在)

问题描述 投票:0回答:1

我正在尝试保存下面训练好的模型。

resnet = ResNet50V2(input_shape=(im_size,im_size,3), weights='imagenet', include_top=False)
headModel = AvgPool2D(pool_size=(3,3))(resnet.output)
headModel = Flatten(name="flatten")(headModel)
headModel = Dense(256, activation="relu")(headModel)
headModel = Dropout(0.5)(headModel)
headModel = Dense(1, activation="sigmoid")(headModel)
resnet50v2 = Model(inputs=resnet.input, outputs=headModel)


resnet50v2.compile(loss='binary_crossentropy', optimizer=opt, metrics=METRICS)

history = resnet50v2.fit(
        datagen.flow(X_train, y_train, batch_size=32, subset='training'),
        batch_size=batch_size,
        epochs=150,
        steps_per_epoch=steps_per_epoch,    
        validation_data=datagen.flow(X_train, y_train, batch_size=8, subset='validation'))

但是,每当我尝试使用以下命令保存它时:

resnet50v2.save('Saved_Models/resnet50.h5', save_format='h5')

我收到错误


ValueError                                Traceback (most recent call last)
/tmp/ipykernel_3252071/2034094124.py in <module>
----> 1 resnet50v2.save('Saved_Models/resnet50.h5', save_format='h5')

~/.local/lib/python3.8/site-packages/keras/utils/traceback_utils.py in error_handler(*args, **kwargs)
     65     except Exception as e:  # pylint: disable=broad-except
     66       filtered_tb = _process_traceback_frames(e.__traceback__)
---> 67       raise e.with_traceback(filtered_tb) from None
     68     finally:
     69       del filtered_tb

~/.local/lib/python3.8/site-packages/h5py/_hl/group.py in create_dataset(self, name, shape, dtype, data, **kwds)
    147                     group = self.require_group(parent_path)
    148 
--> 149             dsid = dataset.make_new_dset(group, shape, dtype, data, name, **kwds)
    150             dset = dataset.Dataset(dsid)
    151             return dset

~/.local/lib/python3.8/site-packages/h5py/_hl/dataset.py in make_new_dset(parent, shape, dtype, data, name, chunks, compression, shuffle, fletcher32, maxshape, compression_opts, fillvalue, scaleoffset, track_times, external, track_order, dcpl, allow_unknown_filter)
    140 
    141 
--> 142     dset_id = h5d.create(parent.id, name, tid, sid, dcpl=dcpl)
    143 
    144     if (data is not None) and (not isinstance(data, Empty)):

h5py/_objects.pyx in h5py._objects.with_phil.wrapper()

h5py/_objects.pyx in h5py._objects.with_phil.wrapper()

h5py/h5d.pyx in h5py.h5d.create()

ValueError: Unable to create dataset (name already exists)

如何保存我的模型?

python tensorflow keras save resnet
1个回答
0
投票

当层名称在预训练模型和下游任务网络的命名空间中重复时,就会出现此错误。如果您选择使用唯一的名称来调用下游任务网络的每一层,这可能会很有用。

resnet = tf.keras.applications.ResNet50V2(input_shape=(224, 224, 3), weights='imagenet', include_top=False)
headModel = tf.keras.layers.AvgPool2D(pool_size=(3,3), name='my_avg_2d_pool')(resnet.output)
headModel = tf.keras.layers.Flatten(name="my_flatten")(headModel)
headModel = tf.keras.layers.Dense(256, activation="relu", name='my_hidden_1')(headModel)
headModel = tf.keras.layers.Dropout(0.5)(headModel)
headModel = tf.keras.layers.Dense(1, activation="sigmoid", name='my_output_1')(headModel)
resnet50v2 = tf.keras.Model(inputs=resnet.input, outputs=headModel)
© www.soinside.com 2019 - 2024. All rights reserved.