Scikit learn Sklearn SGDClassizer小批量学习和学习速率计划

Scikit learn Sklearn SGDClassizer小批量学习和学习速率计划,scikit-learn,gradient-descent,Scikit Learn,Gradient Descent,当我使用partial_-fit方法对SGDClassizer进行训练时,我试图拼凑出SGDClassizer是如何选择其学习速率的 也就是说,我的主要学习循环如下所示: 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:

当我使用
partial_-fit
方法对SGDClassizer进行训练时,我试图拼凑出SGDClassizer是如何选择其学习速率的

也就是说,我的主要学习循环如下所示:

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\u rate
参数)

然而,我不清楚在使用部分拟合时这是如何发生的。略读代码也没有帮助。有人能澄清一下我是如何达到退火学习率的吗
在我的设置中?

fit
在内部使用
partial\u-fit
,因此应用
fit
partial\u-fit
。默认退火计划为
eta0/sqrt(t)
,其中
eta0=0.01

编辑:这是不正确的,从注释中可以看出,
sgdclassizer
的实际默认时间表是:


1.0/(t+t0)
其中
t0
是启发式设置的,
t
是过去看到的样本数。

谢谢您的回答。但是我注意到eta0默认设置为0(尽管文档中声明它是0.01),并且在整个过程中保持不变。所以我猜SGDClassizer通过其他方式在内部跟踪学习速度。。。。。如果我想知道经过20个周期的训练后,我的学习率是多少,有什么办法可以让我去查询吗?文档不是最新的。。。在中,您可以看到,对于
sgdclassizer
而言,默认学习速率计划称为“最优”
1.0/(t+t0)
,其中
t0
是根据数据设置的<代码>eta0在这种情况下不使用。此外,即使对于“invscaling”计划,
eta0
也不会更新:这不是实际的学习率,只是传递初始值的一种方式。在这两种情况下,都可以在属性
model.t
中找到进度计划,该属性给出了过去看到的样本数量。我明白了,感谢澄清,我以前无法理解代码:)