标签: stochastic-gradient

pytorch SGD 的默认批量大小是多少?

如果我提供整个数据并且不指定批量大小,pytorch SGD 会做什么?在这种情况下,我看不到任何“随机”或“随机性”。例如,在下面的简单代码中,我将整个数据(x,y)输入到一个模型中。

optimizer = torch.optim.SGD(model.parameters(), lr=0.1)  
for epoch in range(5):
    y_pred = model(x_data)
    loss = criterion(y_pred, y_data)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
Run Code Online (Sandbox Code Playgroud)

假设有100个数据对(x,y),即,x_datay_data每个都具有100个元素。

问题:在我看来,所有 100 个梯度都是在一次参数更新之前计算出来的。“mini_batch”的大小是 100,而不是 1。所以没有随机性,对吗?起初,我认为 SGD 意味着随机选择 1 个数据点并计算其梯度,这将用作所有数据中真实梯度的近似值。

machine-learning gradient-descent deep-learning pytorch stochastic-gradient

6
推荐指数
1
解决办法
2029
查看次数

SGD 分类器精确率-召回率曲线

我正在研究二元分类问题,我有一个 sgd 分类器,如下所示:

sgd = SGDClassifier(
    max_iter            = 1000, 
    tol                 = 1e-3,
    validation_fraction = 0.2,
    class_weight = {0:0.5, 1:8.99}
)
Run Code Online (Sandbox Code Playgroud)

我将它安装在我的训练集上并绘制了精确召回曲线:

from sklearn.metrics import plot_precision_recall_curve
disp = plot_precision_recall_curve(sgd, X_test, y_test)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

假设scikit-learn中loss="hinge"默认使用sgd分类器,那么如何绘制这条曲线呢?我的理解是 sgd 的输出不是概率性的——它要么是 1/0。因此,不存在“阈值”,但 sklearn 精确回忆曲线绘制了具有不同类型阈值的锯齿形图。这里发生了什么?

python machine-learning scikit-learn precision-recall stochastic-gradient

1
推荐指数
1
解决办法
543
查看次数