Значение потери моей модели медленно уменьшается. Как сократить потери быстрее во время тренировки? - PullRequest
0 голосов
/ 26 сентября 2019

когда я тренирую модель, потери уменьшаются с 0,9 до 0,5 в 2500 эпох.Это нормально?

моя модель:

    model = Sequential()

    model.add(Embedding(vocab_size , emd_dim, weights=[emd_matrix], input_length=maxLen,trainable=False))

    model.add(LSTM(256,return_sequences=True,activation="relu",kernel_regularizer=regularizers.l2(0.01),kernel_initializer=keras.initializers.glorot_normal(seed=None)))
    model.add(LSTM(256,return_sequences=True,activation="relu",kernel_regularizer=regularizers.l2(0.01),kernel_initializer=keras.initializers.glorot_normal(seed=None)))

    model.add(LSTM(256,return_sequences=False,activation="relu",kernel_regularizer=regularizers.l2(0.01),kernel_initializer=keras.initializers.glorot_normal(seed=None)))
    model.add(Dense(l_h2i,activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer="adam", metrics=['accuracy'])
    filepath = "F:/checkpoints/"+modelname+"/lstm-{epoch:02d}-{loss:0.3f}-{acc:0.3f}-{val_loss:0.3f}-{val_acc:0.3f}.hdf5"
    checkpoint = ModelCheckpoint(filepath, monitor="loss", verbose=1, save_best_only=True, mode='min')
    reduce_lr = ReduceLROnPlateau(monitor='loss', factor=0.5, patience=2, min_lr=0.000001)
    print(model.summary())
    history=model.fit(X_train_indices, Y_train_oh, batch_size=batch_size ,
                      epochs=epochs , validation_split=0.1, shuffle=True,
                      callbacks=[checkpoint, reduce_lr])

некоторые результаты приведены ниже:

loss improved from 0.54275 to 0.54272
loss: 0.5427 - acc: 0.8524 - val_loss: 1.1198 - val_acc: 0.7610

loss improved from 0.54272 to 0.54268
loss: 0.5427 - acc: 0.8525 - val_loss: 1.1195 - val_acc: 0.7311

loss improved from 0.54268 to 0.54251
loss: 0.5425 - acc: 0.8519 - val_loss: 1.1218 - val_acc: 0.7420

loss improved from 0.54251 to 0.54249
loss: 0.5425 - acc: 0.8517 - val_loss: 1.1210 - val_acc: 0.7518

1 Ответ

0 голосов
/ 26 сентября 2019

рассмотрите возможность обновления параметров ReduceLROnPlateau, как в Документация TensorFlow .Коэффициент должен быть больше, а терпение должно быть меньшими числами

reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.2,
                              patience=5, min_lr=0.001)
model.fit(X_train, Y_train, callbacks=[reduce_lr])

Аргументы:

  • monitor: количество, которое нужно отслеживать.
  • коэффициент : коэффициент, на который будет снижаться скорость обучения.new_lr = lr * factor
  • терпение : количество эпох без улучшений, после которых скорость обучения будет снижена.
  • подробный: инт.0: тихо, 1: обновить сообщения.
  • режим: один из {авто, мин, макс}.В режиме минимального значения lr будет уменьшено, когда отслеживаемое количество перестанет уменьшаться;в максимальном режиме оно будет уменьшено, когда отслеживаемое количество перестанет увеличиваться;в автоматическом режиме направление автоматически выводится из названия отслеживаемого количества.
  • min_delta: порог для измерения нового оптимума, чтобы сосредоточиться только на существенных изменениях.
  • перезарядка: количество эпох, которые нужно ждать, прежде чем возобновить нормальную работу после уменьшения lr.
  • min_lr: нижняя граница скорости обучения.
...