关于tensorflow2.5版本进行迁移学习后的模型保存出现了错误:KeyError: 'input_1_ib-0',如何解决?

问题描述:

片段代码如下:都是进行迁移学习的代码部分,

input_shape=t_x.shape[1:]
in_lay = tf.keras.layers.Input(shape=input_shape)
base_pretrained_model = PTModel(input_shape=t_x.shape[1:], include_top=False, weights='imagenet')
base_pretrained_model.trainable = False

#原版
pt_depth = base_pretrained_model.layers[-1].get_output_shape_at(0)[-1]
pt_features = base_pretrained_model(in_lay)
bn_features = BatchNormalization()(pt_features)

attn_layer = Conv2D(filters=64, kernel_size=(1,1),padding="same", activation="relu")(Dropout(0.5)(bn_features))
attn_layer = Conv2D(filters=16, kernel_size=(1,1),padding="same", activation="relu")(attn_layer)
attn_layer = Conv2D(filters=8, kernel_size=(1,1),padding="same", activation="relu")(attn_layer)
attn_layer = Conv2D(filters=1, kernel_size=(1,1),padding="valid", activation="sigmoid")(attn_layer)

up_c2_w = np.ones((1, 1, 1,pt_depth))
up_c2 = Conv2D(pt_depth, kernel_size = (1,1), padding = 'same',
               activation = 'linear', use_bias = False, weights = [up_c2_w])
up_c2.trainable = False
attn_layer = up_c2(attn_layer)
mask_features = multiply([attn_layer, bn_features])
gap_features = GlobalAveragePooling2D()(mask_features)
gap_mask = GlobalAveragePooling2D()(attn_layer)

gap = Lambda(lambda x: x[0]/x[1], name = 'RescaleGAP')([gap_features, gap_mask])
gap_dr = Dropout(0.25)(gap)
dr_steps = Dropout(0.25)(Dense(128, activation = 'relu')(gap_dr))
out_layer = Dense(t_y.shape[-1], activation = 'softmax')(dr_steps)
retina_model = Model(inputs = [in_lay], outputs = [out_layer])


def top_2_accuracy(in_gt, in_pred):
    return top_k_categorical_accuracy(in_gt, in_pred, k=2)

retina_model.compile(optimizer = 'Adam', loss = 'categorical_crossentropy',
                           metrics = ['categorical_accuracy', top_2_accuracy])
retina_model.summary()

weight_path="{}_weights.best.hdf5".format('retina')
checkpoint = ModelCheckpoint(weight_path, monitor='val_loss', verbose=1,
                             save_best_only=True, mode='min', save_weights_only = True)
reduceLROnPlat = ReduceLROnPlateau(monitor='val_loss', factor=0.8, patience=3, verbose=1,
                                   mode='auto', min_delta=0.0001, cooldown=5, min_lr=0.0001)
early = EarlyStopping(monitor="val_loss", mode="min", patience=6)
callbacks_list = [checkpoint, early, reduceLROnPlat]

retina_model.fit(train_gen,
                           steps_per_epoch = train_df.shape[0]//batch_size,
                           validation_data = valid_gen,
                           validation_steps = valid_df.shape[0]//batch_size,
                              epochs = 5,#25
                              callbacks = callbacks_list,
                             workers = 0, # tf-generators are not thread-safe
                             use_multiprocessing=False,
                             max_queue_size = 0
                            )


retina_model.load_weights(weight_path)
retina_model.save('./saver/full_retina_model.h5',overwrite=True, include_optimizer=True, save_format=None,
    signatures=None, options=None)

报错如图所示:

img

line 1363, in get_network_config
new_node_index = node_conversion_map[node_key]
KeyError: 'input_1_ib-0'