Я пытаюсь собрать вместе, как SGDClassifier выбирает скорость обучения, когда я использую метод partial_fit
для его обучения.Sklearn SGDClassifier minibatch-learning and learning rate schedule
есть, мой основной цикл обучения выглядит следующим образом:
from sklearn.linear_model import SGDClassifier
m = SGDClassifier(n_iter=1, alpha=0.01)
n_iter = 40
t0 = time.time()
for i in range(n_iter):
for fname in files:
X, y = load_next_batch(fname)
m.partial_fit(X, y, classes = [0, 1])
print "%d: valid-error: %f (time: %fs)" % (i, 1.0-m.score(Xvalid, yvalid), time.time() - t0)
сейчас, так как я делаю 40 проходит через весь набор обучения, я хотел бы, чтобы отжечь мою скорость обучения в течение долгого времени. Если бы я использовал fit
вместо частичной подгонки, я понимаю, что это произойдет автоматически (если не изменить параметр learning_rate
).
Однако мне непонятно, как это происходит при использовании частичной подгонки. Сбой кода тоже не помог. Может ли кто-нибудь уточнить, как я мог достичь отожженной скорости обучения в моей настройке?
Спасибо за ответ. Но я заметил, что для eta0 установлено значение 0 (хотя документация утверждает, что она равна 0,01) и остается такой на протяжении всего процесса. Поэтому я предполагаю, что SGDClassifier каким-то образом внутренне отслеживает скорость обучения другими способами ..... если бы я хотел узнать, что скорость обучения после 20 циклов через мой тренировочный набор, есть ли у меня способ запросить ? – Untom
Документация не обновляется ... в [исходном коде] (https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/linear_model/) вы можете видеть, что для 'SGDClassifier 'расписание обучения по умолчанию называется« оптимальным »1.0/(t + t0)' где 't0' задается из данных; 'eta0' в этом случае не используется. Также даже для расписания 'invscaling' 'eta0' никогда не обновляется: это не фактическая скорость обучения, а только способ передать начальное значение. В обоих случаях прогресс расписания можно найти в атрибуте 'model.t_', который дает количество выборок, которые видели в прошлом. – ogrisel
Я вижу, спасибо за разъяснение, я не смог понять код раньше :) – Untom