Как получить убыток за эпоху, а не за партию? - PullRequest
0 голосов
/ 05 января 2019

В моем понимании эпоха - это произвольно часто повторяющийся пробег по всему набору данных, который, в свою очередь, обрабатывается по частям, так называемые партии. После того, как каждый train_on_batch рассчитывается потеря, веса обновляются, и следующая партия будет получать лучшие результаты. Эти потери являются показателями качества и учебного состояния моих НС.

В нескольких источниках потери рассчитываются (и печатаются) за эпоху. Поэтому я не уверен, правильно ли я это делаю.

На данный момент мой GAN выглядит так:

for epoch:
  for batch:

    fakes = generator.predict_on_batch(batch)

    dlc = discriminator.train_on_batch(batch, ..)
    dlf = discriminator.train_on_batch(fakes, ..)
    dis_loss_total = 0.5 *  np.add(dlc, dlf)

    g_loss = gan.train_on_batch(batch,..)

    # save losses to array to work with later

Эти потери относятся к каждой партии. Как мне получить их на эпоху? В качестве отступления: нужны ли мне потери для эпохи, зачем?

1 Ответ

0 голосов
/ 05 января 2019

Нет прямого способа вычислить потери за эпоху. На самом деле, потеря эпохи обычно определяется как среднее значение потери партий в эту эпоху. Таким образом, вы можете накапливать значения потерь в течение эпохи и в конце делить их на количество партий в эпоху:

epoch_loss = []
for epoch in range(n_epochs):
    acc_loss = 0.
    for batch in range(n_batches):
        # do the training 
        loss = model.train_on_batch(...)
        acc_loss += loss
    epoch_loss.append(acc_loss / n_batches)

Что касается другого вопроса, одно использование потери эпохи может состоять в том, чтобы использовать его в качестве индикатора для остановки обучения (однако для этого обычно используется потеря проверки, а не потеря обучения).

...