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:
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit datascience.stackexchange
scroll top