Регулярные пики и высокий уровень шума на кривых потерь при обучении и проверке (регрессия, табличные данные)Python

Программы на Python
Ответить
Anonymous
 Регулярные пики и высокий уровень шума на кривых потерь при обучении и проверке (регрессия, табличные данные)

Сообщение Anonymous »

Я новичок в машинном обучении и здесь в переполнении стека, поэтому извините, если я забыл добавить некоторую информацию.
Я обучаю глубокую нейронную сеть для задачи регрессии (прогнозирование усталостной долговечности материалов - log10(Циклы)) с использованием табличных данных. Я наблюдаю много шума и регулярные всплески как на кривых потерь при обучении, так и на валидации (MSE).
Некоторая информация о модели и наборе данных:
  • Размер набора данных: около 2500 выборок, 64% обучение, 16% проверка, 20% тестирование.
  • Цель: log10(Cycles).
  • Особенности: Категориальные переменные были закодированы методом горячего кодирования. Непрерывные переменные (такие как напряжение, деформация, модуль упругости) масштабировались с помощью StandardScaler. Недостающие значения были заполнены с использованием медианного вменения.
  • 4 скрытых плотных слоя, по 256 нейронов каждый.
  • Активация: ReLU.
  • Выходной слой: 1 нейрон, линейная активация.
  • Оптимизатор: Адам
  • Скорость обучения: 5e-05
  • Размер пакета: 128
  • Потери/показатель: среднеквадратическая ошибка (MSE)
Вот код:

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

from tensorflow import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.callbacks import EarlyStopping

n_features = X_only_train_normalizado.shape[1]
n_neurons = 256
n_layers = 4

model = Sequential()
model.add(keras.Input(shape=(n_features,)))
for _ in range(n_layer):
model.add(Dense(n_neurons, activation='relu',kernel_initializer='he_normal'))
model.add(Dense(1, activation='linear', kernel_initializer='glorot_uniform'))

model.compile(
optimizer=keras.optimizers.Adam(learning_rate=5e-05),
loss='mean_squared_error',
metrics=['mae', 'mape']
)

early_stop = EarlyStopping(
monitor='val_loss',
patience=10000,
restore_best_weights=True,
verbose=2
)

history = model.fit(
X_only_train_normalizado, y_only_train,
epochs=10000,
batch_size=128,
validation_data=(X_val_normalizado, y_val),
callbacks=[early_stop],
verbose=2
)
Несмотря на то, что общая тенденция потерь снижается, кривые чрезвычайно скачкообразны. Кривая проверки имеет огромные пики, но кривая обучения также значительно колеблется.
Некоторые примеры:
Изображение

Изображение

Единственная проблема, о которой я могу думать, это серьезная чрезмерная параметризация, которая может заставлять сеть запоминать шум, но я использую параметры, полученные в результате анализа оптимизации Optuna.
Любые советы о том, как решить эту проблему или какие-либо методы, чтобы найти причину этого, будут оценены.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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