Раннее сокращение для логистической регрессии. Теано

datascience.stackexchange https://datascience.stackexchange.com/questions/9355

  •  16-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь понять код для логистической регрессии на официальной документации, но я изо всех сил пытаюсь понять логику этого кода:

# early-stopping parameters
patience = 5000  # look as this many examples regardless
patience_increase = 2     # wait this much longer when a new best is
                              # found
improvement_threshold = 0.995  # a relative improvement of this much is
                               # considered significant
validation_frequency = min(n_train_batches, patience/2)
                              # go through this many
                              # minibatches before checking the network
                              # on the validation set; in this case we
                              # check every epoch

best_params = None
best_validation_loss = numpy.inf
test_score = 0.
start_time = time.clock()

done_looping = False
epoch = 0
while (epoch < n_epochs) and (not done_looping):
    # Report "1" for first epoch, "n_epochs" for last epoch
    epoch = epoch + 1
    for minibatch_index in xrange(n_train_batches):

        d_loss_wrt_params = ... # compute gradient
        params -= learning_rate * d_loss_wrt_params # gradient descent

        # iteration number. We want it to start at 0.
        iter = (epoch - 1) * n_train_batches + minibatch_index
        # note that if we do `iter % validation_frequency` it will be
        # true for iter = 0 which we do not want. We want it true for
        # iter = validation_frequency - 1.
        if (iter + 1) % validation_frequency == 0:

            this_validation_loss = ... # compute zero-one loss on validation set

            if this_validation_loss < best_validation_loss:

                # improve patience if loss improvement is good enough
                if this_validation_loss < best_validation_loss * improvement_threshold:

                    patience = max(patience, iter * patience_increase)
                best_params = copy.deepcopy(params)
                best_validation_loss = this_validation_loss

        if patience <= iter:
            done_looping = True
            break

Может ли кто -нибудь, объяснить мне, каковы переменные: терпение, терпение_инация, улучшение_threshold, valyation_frequency, iter, представлять?

Что это делает?

if (iter + 1) % validation_frequency == 0:
Это было полезно?

Решение

Patience это количество учебных партий, которые нужно сделать, прежде чем остановиться. iter это количество учебных партий, которые вы видели. Каждая итерация, вы решаете, ниже ли ваша проверка вашего предыдущего лучшего. Улучшение сохраняется только в том случае, если оценка ниже, чем improvement_threshold * validation_score.

Оказывается, что patience_increase это множитель. Каждый раз, когда у вас есть новый самый низкий балл, вы увеличиваете общее количество или учебные партии, чтобы iter*patience_increase, но не ниже текущего значения patience.

validation_frequency это просто количество партий между временами, которые вы проверяете оценку проверки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с datascience.stackexchange
scroll top