Раннее сокращение для логистической регрессии. Теано
-
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
это просто количество партий между временами, которые вы проверяете оценку проверки.