Früheres Auftreten für logistische Regression. Theano
-
16-10-2019 - |
Frage
Ich versuche, den Code für die logistische Regression in der offiziellen Dokumentation zu verstehen, aber ich kämpfe darum, die Logik hinter diesem Code zu verstehen:
# 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
Könnte jemand mir erklären: Was tun die Variablen: Geduld, Geduld_increase, Verbesserung_Threshold, Validation_Frequency, Iter, repräsentieren?
Was macht dieser Zustand?
if (iter + 1) % validation_frequency == 0:
Lösung
Patience
Ist die Anzahl der Trainingseinheiten, bevor Sie aufhören. iter
Ist die Anzahl der Trainingseinheiten, die Sie gesehen haben. Bei jeder Iteration entscheiden Sie, ob Ihre Validierung niedriger ist als Ihre bisher Beste. Die Verbesserung wird nur gespeichert, wenn die Punktzahl niedriger ist als improvement_threshold * validation_score
.
Anscheinend patience_increase
ist ein Multiplikator. Jedes Mal, wenn Sie eine neue niedrigste Punktzahl haben, haben Sie die Gesamtzahl oder Trainingseinheiten auf iter*patience_increase
, aber nicht unter dem aktuellen Wert von patience
.
validation_frequency
ist nur die Anzahl der Chargen zwischen den Zeiten, in denen Sie die Validierungsbewertung überprüfen.