gpt4 book ai didi

python - 使用 Keras 微调 ResNet50 - val_loss 不断增加

转载 作者:太空宇宙 更新时间:2023-11-04 04:36:39 26 4
gpt4 key购买 nike

我正在尝试使用带有 tensorflow 后端的 keras 自定义 resnet50。然而,在训练后,我的 val_loss 不断增加。尝试不同的学习率和批量大小并不能解决问题。

使用不同的预处理方法,例如重新缩放或在 ImageDataGenerator 中使用 resnet50 的 preprocess_input 函数也没有解决问题。

这是我使用的代码

导入和预处理数据:

from keras.preprocessing.image import ImageDataGenerator
from keras.applications.resnet50 import preprocess_input, decode_predictions

IMAGE_SIZE = 224
BATCH_SIZE = 32

num_classes = 27

main_path = "C:/Users/aaron/Desktop/DATEN/data"

gesamt_path = os.path.join(main_path, "ML_DATA")
labels = listdir(gesamt_path)

data_generator = ImageDataGenerator(#rescale=1./255,
validation_split=0.20,
preprocessing_function=preprocess_input)

train_generator = data_generator.flow_from_directory(gesamt_path, target_size=(IMAGE_SIZE, IMAGE_SIZE), shuffle=True, seed=13,
class_mode='categorical', batch_size=BATCH_SIZE, subset="training")

validation_generator = data_generator.flow_from_directory(gesamt_path, target_size=(IMAGE_SIZE, IMAGE_SIZE), shuffle=False, seed=13,
class_mode='categorical', batch_size=BATCH_SIZE, subset="validation")

定义和训练模型

img_width = 224
img_height = 224

model = keras.applications.resnet50.ResNet50()

classes = list(iter(train_generator.class_indices))
model.layers.pop()
for layer in model.layers:
layer.trainable=False
last = model.layers[-1].output
x = Dense(len(classes), activation="softmax")(last)
finetuned_model = Model(model.input, x)
finetuned_model.compile(optimizer=Adam(lr=0.001), loss='categorical_crossentropy', metrics=['accuracy'])
for c in train_generator.class_indices:
classes[train_generator.class_indices[c]] = c
finetuned_model.classes = classes



earlystopCallback = keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0, patience=8, verbose=1, mode='auto')
tbCallBack = keras.callbacks.TensorBoard(log_dir='./Graph', histogram_freq=0, write_graph=True, write_images=True)

history = finetuned_model.fit_generator(train_generator,
validation_data=validation_generator,
epochs=85, verbose=1,callbacks=[tbCallBack,earlystopCallback])

最佳答案

  1. 您需要匹配用于预训练网络的预处理,而不是自己的预处理。仔细检查网络输入张量,即输入的 channel 平均值是否与用于预训练网络的数据相匹配。

  2. 您的新数据可能与用于预训练网络的数据有很大不同。在这种情况下,所有 BN 层都会将其预训练的均值/方差迁移到新值,因此增加损失也是可能的(但最终损失应该会减少)。

关于python - 使用 Keras 微调 ResNet50 - val_loss 不断增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51544407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com