我之前运行过一个类似的模型(但略有不同)并且只保存了重量。我在修改模型后删除了所有 h5 文件,并引发了这个错误。我已经搜索了所有可能的答案,但找不到解决方案。 我现在有点沮丧。我能做些什么来解决这个问题?
我的模型是
model_Unet_input = UNet(Input_layer)
model_SegNet_input = SegNet(Input_layer)
model_Unet_output = UNet.layers[-3].output
model_Segnet_output = SegNet.layers[-3].output
avg = tf.keras.layers.Average()([model_Unet_output,model_Segnet_output])
data_output1 = layers.Conv2D(2, 1, strides=1,kernel_initializer="he_normal")(avg)
data_ouput2 = layers.BatchNormalization()(data_output1)
model_Unet_SegNet = Model([UNet.input, SegNet.input],data_ouput2)
model_Unet_SegNet.summary()
model_Unet_SegNet_dir="/nobackup/projects/bddur22/eunji/dissertation/model/saved_models/Unet_SegNet_avg"
model_Unet_SegNet.compile(adam_optimizer, total_loss, metrics=metrics)
model_Unet_SegNet_checkpoint = ModelCheckpoint(os.path.join(model_Unet_SegNet_dir,'ckpt', 'unet_seg_model-{epoch:03d}-{iou_score:03f}-{val_iou_score:03f}-{loss:03f}-{val_loss:03f}.h5'), monitor="val_loss", verbose=1, save_best_only=True, mode="min")
print('model compile completed, model training starts',end='\n')
model_Unet_SegNet_history=model_Unet_SegNet.fit([x_train_processed_res,x_train_processed_res],
y_train, verbose=1,batch_size = batch_size,
epochs = epochs,validation_data([x_val_processed_res,x_val_processed_res], y_val),
callbacks =[model_Unet_SegNet_checkpoint])
错误看起来像
Traceback (most recent call last):
File "/nobackup/projects/bddur22/eunji/dissertation/data/model_UNet_SegNet_avg_test.py", line 199, in <module>
model_Unet_SegNet_history=model_Unet_SegNet.fit([x_train_processed_res,x_train_processed_res],
File "/users/eunji/miniconda/envs/tf-env/lib/python3.9/site-packages/keras/utils/traceback_utils.py", line 67, in error_handler
raise e.with_traceback(filtered_tb) from None
File "/users/eunji/miniconda/envs/tf-env/lib/python3.9/site-packages/h5py/_hl/group.py", line 148, in create_dataset
dsid = dataset.make_new_dset(group, shape, dtype, data, name, **kwds)
File "/users/eunji/miniconda/envs/tf-env/lib/python3.9/site-packages/h5py/_hl/dataset.py", line 137, in make_new_dset
dset_id = h5d.create(parent.id, name, tid, sid, dcpl=dcpl)
File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
File "h5py/h5d.pyx", line 87, in h5py.h5d.create
ValueError: Unable to create dataset (name already exists)
当层名称在预训练模型和下游任务网络的命名空间中重复时,会发生此错误。如果您选择使用唯一名称调用下游任务网络的每一层,这可能会很有用。将name="some_unique_name"
添加到您创建的所有层以解决问题。
data_output1 = layers.Conv2D(2, 1, strides=1,kernel_initializer="he_normal",name="conv_2d_output_1")(avg)