问题标签 [stochastic-gradient]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - sklearn SGDClassifier 模型阈值与模型分数有何关系?
我已经训练了一个模型并确定了一个我想部署它的“阈值”,但我无法理解阈值与分数的关系。
好的,所以现在我绘制精度和召回率与阈值并决定我希望我的阈值是 0.4
什么是门槛?
我的模型系数,我理解是通过计算对事件进行“评分” coefficients['x']*event_values['x']
,总和为 29。阈值介于 0 和 1 之间。
我如何理解从阈值到什么的翻译,我猜是原始分数?1
对于所有特征(都是二进制)的事件,计算得分是否为 29,因为这是所有系数的总和?
我是否需要为所有事件计算这个“原始”分数指标,然后根据精度而不是阈值绘制它?
编辑和更新:
因此,正如 Mikhail Korobov 在下面指出的那样,我的问题在于对逻辑功能缺乏了解。无论“原始分数”如何,逻辑函数都会强制 [0, 1] 范围内的值。
为了将该值“解包”回我正在寻找的“原始分数”中,我可以这样做scipy.special.logit(0.8) - grad_des.intercept_
,这将返回该行的“分数”。
batch-processing - 了解在 DBOW 的单个时期发生了什么
我正在使用分布式词袋 (DBOW),我很好奇在单个 Epoch 期间会发生什么?DBOW 是循环遍历所有文档(又名 Batch)还是循环遍历文档子集(又名 Mini-batch)?另外,对于给定的文档,DBOW 会从文本窗口中随机抽取一个词,并学习将目标词与窗口中的周围词关联起来的权重,这是否意味着 DBOW 可能不会遍历文档中的所有文本?
我已经通过 GENSIM ( https://github.com/RaRe-Technologies/gensim ) 代码来确定是否有批处理参数,但没有运气。
python - 每个 mini-Batch 是否只更新一次权重/偏差?
我正在关注神经网络教程,我对更新权重的函数有疑问。
我在这里不明白的是使用 for 循环来计算 nabla_b 和 nabla_w (权重/偏差的偏导数)。对小批量中的每个训练示例进行反向传播,但只更新一次权重/偏差。
在我看来,假设我们有一个大小为 10 的小批量,我们计算 nabla_b 和 nabla_w 10 次,然后在 for 循环完成后更新权重和偏差。但是 for 循环不是每次都重置 nabla_b 和 nabla_b 列表吗?为什么我们不更新self.weights
并self.biases
在for 循环内?
神经网络工作得很好,所以我认为我在某个地方犯了一个小错误。
仅供参考:我正在关注的教程的相关部分可以在这里找到
lightgbm - 随机梯度下降和 LightGBM 有什么区别?
虽然我已经单独研究了这些概念,但我对是否可以选择其中一个或另一个作为解决方案感到困惑,还是可以同时使用这两个来改善结果?您可以提供的任何指导将不胜感激。
python - 与亚当重新开始
我正在用早期停止策略训练我的网络。我从较高的学习率开始,基于验证损失,我需要从较早的快照重新开始训练。
我可以使用模型和优化器保存/加载快照state_dicts
。没问题。
我的问题是,一旦我重新开始训练,我该如何再次设置 adam 的学习率?我应该重新启动 adam 而不是使用 astate_dict
还是应该使用
optimizer.param_groups[0][‘lr’] = lr
加载的优化器来调整学习率state_dict
?
例如,我用lr = 1e-6
5 个 epoch、保存的模型和优化器训练我的网络state_dict
。我现在从 epoch 6 重新开始,但我需要lr = 1e-7
。最好的方法是什么?
谢谢!
tensorflow - Yolo Network 的在线学习?
我想使用 Yolo Network v3 来检测 5 个我已经有数据的自定义对象类。因此,我将使用这些类的训练数据来重新训练具有预训练权重的 yolo 网络。
现在想象一下这种情况:
一段时间后,我想在我的模型中添加另一个类。现在我需要更改模型的架构,因此我需要使用所有 5 + 1 个类重新训练我的模型,对吗?
为了避免这种情况,我想在一开始就设置最大类数,比如 20 个。所以我构建了一个包含 20 个类的 Yolo 架构,并用前 5 个数据可用的类对其进行训练。如果有新类的数据可用,我将使用随机梯度下降进行在线学习来训练模型以检测新类。
以下是我的问题:
- 模型是否在一开始就正确地学习了 5 个类,而没有其他 15 个类的数据?
- 随机梯度下降是否可以一点一点地学习新的类?
- 有没有其他方便的方法来处理我的问题?
感谢您的任何建议!
machine-learning - pytorch SGD 的默认批量大小是多少?
如果我提供整个数据并且不指定批量大小,pytorch SGD 会做什么?在这个案例中,我没有看到任何“随机性”或“随机性”。例如,在下面的简单代码中,我将整个数据(x,y)
输入到模型中。
假设有 100 个数据对,(x,y)
即每个数据对有 100 个元素。x_data
y_data
问题:在我看来,所有 100 个梯度都是在一次参数更新之前计算的。“mini_batch”的大小是 100,而不是 1。所以没有随机性,对吗?起初,我认为 SGD 的意思是随机选择 1 个数据点并计算其梯度,这将用作所有数据中真实梯度的近似值。
machine-learning - 更新神经网络权重时如何解释梯度和偏导数?
我刚刚开始研究神经网络,我设法弄清楚如何推导出反向传播所需的方程。我花了将近 3 天的时间询问了我所有的教授,并在谷歌上搜索了我能找到的所有内容。我的数学技能确实很差,但我真的很想了解这个特殊的公式在数学上是如何有意义的。该公式用于在找到梯度后更新权重。
W1 = W0 - L * (dC/dw)
在哪里:
W1 = 新重量
W0 = 旧重量
L = 学习率
dC/dw = 误差函数的偏导数和代价函数的梯度向量的一个成员
到目前为止我所知道的:
- 梯度是它的偏导数的向量,最大增长率由梯度本身给出。每个偏导数给出了导数相对于方向的最大变化率。
- dC/dW 是这些偏导数之一。
- dC/dW 评估为变化率。它的标志可以告诉我们变化的方向。该值本身是成本变化与特定重量下重量变化之间的比例。
- 不知何故,将 dC/dW 乘以学习率只是将该速率的一小部分作为权重的变化。
我无法调和的:
- 学习率只是一个没有单位的标量。怎么可能只用一个标量乘以一个速率并最终得到一个可测量的重量变化?我在这里不明白什么?