Что необходимо реализовать для борьбы с переоснащением?Python

Программы на Python
Anonymous
Что необходимо реализовать для борьбы с переоснащением?

Сообщение Anonymous »

Я обучаю ResNet50 на наборе данных Chestxray. Мои данные обучения составляют около 15 000 выборок, 1 500 при проверке и 3 000 при тестировании. Это проблема классификации по нескольким меткам, у меня есть 13 меток, и одна из них закодирована в горячем виде. У меня возникла проблема во время тренировки. Несмотря на наблюдаемое улучшение точности обучения с течением эпох, точность проверки, похоже, ухудшается. Я попробовал несколько экспериментов и шагов по устранению неполадок, но не смог решить эту проблему.
Проведенные эксперименты:
< ol>
[*]Дополнение данных.

Код: Выделить всё

    transforms.Compose([
transforms.RandomAutocontrast(p=0.5),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
  • Увеличивает/уменьшает скорость обучения.
  • Тренируйтесь на всех уровнях обиды, нескольких слоях и т. д. .
    (Я думал, что мой набор данных большой и немного сложный, поэтому я должен тщательно обучить свою сеть, чтобы она могла изучить функции)
  • Увеличивает размер пакета. В настоящее время используется 32.
  • Регуляризация (отказ, когда я использую, проверка улучшается, но поезд падает).
Я Использовали разные варианты Resnet, но он не работает, вам могут показать кривые потерь и точности ниже. Может быть, я что-то упускаю из виду, если вы знаете, что делать?
Пример изображения:
Изображение
Архитектура модели:

Код: Выделить всё

learning_rate = 0.001
early_stopping = EarlyStopping(monitor='val_accuracy', patience=10, restore_best_weights=True)
adam_optimizer = Adam(learning_rate=learning_rate)
resnet50 = ResNet50(input_shape=(256, 256, 3), weights='imagenet', include_top=False)

for layer in resnet50.layers:
layer.trainable = False

x = Flatten()(resnet50.output)
prediction = Dense(13, activation='sigmoid')(x)
model = Model(inputs=resnet50.input, outputs=prediction)

model.compile(optimizer=adam_optimizer, loss='binary_crossentropy', metrics=['accuracy'])

history = model.fit(train_dataset,epochs=100,validation_data=val_dataset,
callbacks[early_stopping])
Выход:

Код: Выделить всё

Epoch 1/100
477/477 [==============================] - 48s 88ms/step - loss: 0.8895 - accuracy: 0.1362 - val_loss: 0.5471 - val_accuracy: 0.1835
Epoch 2/100
477/477 [==============================] - 39s 81ms/step - loss: 0.6483 - accuracy: 0.2059 - val_loss: 0.7141 - val_accuracy: 0.1175
Epoch 3/100
477/477 [==============================] - 39s 82ms/step - loss: 0.6154 - accuracy: 0.2471 - val_loss: 0.4956 - val_accuracy: 0.3182
Epoch 4/100
477/477 [==============================] - 39s 82ms/step - loss: 0.5840 - accuracy: 0.2784 - val_loss: 0.6674 - val_accuracy: 0.1464
Epoch 5/100
477/477 [==============================] - 39s 81ms/step - loss: 0.5519 - accuracy: 0.3058 - val_loss: 0.7490 - val_accuracy: 0.1533
Epoch 6/100
477/477 [==============================] - 39s 81ms/step - loss: 0.5033 - accuracy: 0.3369 - val_loss: 0.7575 - val_accuracy: 0.1354
Epoch 7/100
477/477 [==============================] - 39s 81ms/step - loss: 0.5321 - accuracy: 0.3396 - val_loss: 0.7116 - val_accuracy: 0.1230
Epoch 8/100
477/477 [==============================] - 39s 82ms/step - loss: 0.4538 - accuracy: 0.3678 - val_loss: 0.5930 - val_accuracy: 0.1753
Epoch 9/100
477/477 [==============================] - 39s 81ms/step - loss: 0.4576 - accuracy: 0.3766 - val_loss: 0.6753 - val_accuracy: 0.1072
Epoch 10/100
477/477 [==============================] - 39s 82ms/step - loss: 0.4989 - accuracy: 0.3758 - val_loss: 0.6825 - val_accuracy: 0.1168
Epoch 11/100
477/477 [==============================] - 39s 82ms/step - loss: 0.5037 - accuracy: 0.3859 - val_loss: 0.7811 - val_accuracy: 0.2144
Epoch 12/100
477/477 [==============================] - 39s 81ms/step - loss: 0.5155 - accuracy: 0.3881 - val_loss: 0.8082 - val_accuracy: 0.1402
Epoch 13/100
477/477 [==============================] - 39s 82ms/step - loss: 0.5550 - accuracy: 0.3884 - val_loss: 0.9528 - val_accuracy: 0.2419

В настоящее время это результат для вышеуказанной архитектуры. Подскажите, что мне следует сделать, чтобы улучшить результаты?
Кривые графика :
График потерь и точности

Подробнее здесь: https://stackoverflow.com/questions/785 ... verfitting

Вернуться в «Python»