问题标签 [skorch]

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.

0 投票
0 回答
266 浏览

deep-learning - 如果我的回归模型陷入高价值损失,我该怎么办?

我正在使用神经网络来解决回归问题,其中我有 3 个特征,并且我试图预测一个连续值。我注意到我的神经网络开始学习良好,但在 10 个 epoch 之后,它陷入了高损失值并且无法再改进。

  • 我尝试使用 Adam 和其他自适应优化器而不是 SGD,但没有奏效。我尝试了一个复杂的架构,比如添加层、神经元、批量归一化和其他激活等。但也没有用。

  • 我尝试调试并尝试找出实现是否有问题,但是当我仅使用 10 个数据示例时,我的模型学习速度很快,因此没有错误。随着数据示例的增加,我开始增加数据示例并监控我的模型结果。当我达到 3000 个数据示例时,我的模型开始陷入高价值损失。

  • 我尝试增加层数、神经元并尝试其他激活、批量标准化。我的数据也在 [-1, 1] 之间进行了归一化,我的目标值没有归一化,因为它是回归并且我正在预测一个连续值。我也尝试过使用 keras,但我得到了相同的结果。

我的真实数据集有 40000 个数据,我不知道我应该尝试什么,我几乎尝试了所有我知道的优化方法,但没有一个有效。如果有人可以指导我,我将不胜感激。我将发布我的代码,但也许它太混乱而无法理解,我确信我的实现没有问题,我正在使用 skorch/pytorch 和一些 SKlearn 函数:

这是我的网络声明:

这是训练时的日志: 在此处输入图像描述

0 投票
1 回答
500 浏览

python - 如何将输入 dim 从 fit 方法传递到 skorch 包装器?

我正在尝试将 PyTorch 功能整合到scikit-learn环境中(特别是 Pipelines 和 GridSearchCV),因此一直在研究skorch. 神经网络的标准文档示例看起来像

您可以通过将输入和输出维度硬编码到构造函数中来显式传递它们。然而,这并不是scikit-learn接口真正的工作方式,输入和输出维度是由fit方法派生的,而不是显式传递给构造函数。作为一个实际的例子,考虑

除了转换器中没有任何地方必须指定输入和输出维度这一事实之外,在模型之前应用的转换器可能会改变训练集的维度(考虑降维等),因此在神经网络中对输入和输出进行硬编码网络构造函数是行不通的。

我是否误解了这应该如何工作或者建议的解决方案是什么(我正在考虑将构造函数指定到forward您已经X可以使用的方法中,但我不确定这是一个好习惯)?

0 投票
1 回答
792 浏览

python-3.x - 优化器得到一个空的参数列表(skorch)

所以,我习惯了使用 PyTorch,现在决定试一试 Skorch。

在这里,他们将网络定义为

我更喜欢在每一层中输入神经元列表,即num_units=[30,15,5,2]有 2 个隐藏层,15 个和 5 个神经元。此外,我们有 30 个特性和 2 个类,因此将其重写为这样的

应该做的伎俩。问题是打电话的时候

我收到错误“ValueError:优化器得到一个空的参数列表”。我已将其范围缩小到删除self.output = nn.Linear(10, 2)简单地使网络无法进入forward即它似乎output是某种“触发”变量。网络是否真的需要一个名为output(作为一个层)的变量,并且我们不能自由地自己定义变量名?

0 投票
1 回答
241 浏览

python-3.x - 从 Skorch 拟合中获取验证/训练损失

有没有办法从 Skorch 中获取训练/验证损失,例如列表(如果你想做一些绘图,统计)?

0 投票
0 回答
543 浏览

pytorch - 当训练损失减少时,验证损失增加和准确度保持为零的原因可能是什么?

我正在尝试解决多类文本分类问题。由于我的项目的特定要求,我正在尝试使用 skorch ( https://skorch.readthedocs.io/en/stable/index.html ) 为 sklearn 管道包装 pytorch。我想做的是用我的数据集微调来自 Huggingface ( https://huggingface.co ) 的 BERT 的预训练版本。据我所知,我已经尝试遵循 skorch 的说明,了解我应该如何输入数据、构建模型等。在训练期间,火车损失仍在减少,直到第 8 个时期开始波动,而一直验证损失从一开始就增加,验证准确度保持恒定为零。我的管道设置是

在其中我使用标记器类来预处理我的数据集,为 BERT 标记它并创建注意掩码。看起来像这样

然后我初始化我想要微调的模型

我初始化模型并使用 skorch 创建分类器,如下所示

我像这样使用fit

其中我的训练样本是字符串列表,我的标签是包含每个类的索引的数组,如 pytorch 所要求的。

这是发生的事情的一个示例

训练历史

我试图只训练全连接层而不是 BERT,但我又遇到了同样的问题。我还在训练过程之后测试了训练的准确率,它只有 0.16%。对于如何解决我的问题的任何建议或见解,我将不胜感激!我对 skorch 很陌生,对 pytorch 还不太熟悉,我相信我错过了一些非常简单的东西。非常感谢您!

0 投票
0 回答
13141 浏览

python - Skorch GridSearchCV:FitFailedWarning:估计器拟合失败。这些参数在这个训练测试分区上的分数将设置为 nan

我有特征和标签x的维度数据。(n_samples, time_steps, n_features)(n_samples, 1, n_labels)y

由此我创建了一个训练、开发和测试 pytorch 数据集。

我想使用 GridSearchCV 对超参数进行网格搜索。这就是我写的:

但我得到这个错误

但目标的形状是二维的

其中 4 是目标的数量(n_labels)。

所以我不明白这个错误来自哪里

0 投票
1 回答
41 浏览

skorch - Skorch:使用 AUC 代替 ACC 进行验证

当我在其中运行net.fit(X,y)时,skorch它会打印出所有好东西 - 有没有办法将验证功能更改为例如 AUC、F1 或第三个功能,而不是标准精度?或者,如果不可能,有没有办法从网上提取验证集,并“手动”计算它?

0 投票
2 回答
313 浏览

python - TypeError:如果没有指定评分,则传递的估计器应该有一个'score'方法

我已经使用 PyTorch 神经网络有一段时间了。我决定要添加一个排列特征重要性评分器,这开始引起一些问题。

我得到“ TypeError:如果没有指定评分,则传递的估计器应该有一个'score'方法。估计器 <class 'skorch.net.NeuralNet'>[uninitialized]( module=<class ' main .run..MultiLayerPredictor' >, ) 没有。 ” - 错误消息。这是我的代码:

Stacktrace 会指出错误源于我设置排列重要性的行。我怎样才能解决这个问题?

完整的堆栈跟踪:

0 投票
1 回答
664 浏览

python - PyTorch & skorch:如何修复我的 nn.Module 以使用 skorch 的 GridSearchCV

使用 PyTorch,我在下面有一个 ANN 模型(用于分类任务):

我正在尝试将此模型与 skorch 的 GridSearchCV 一起使用,如下所示:

但是当我运行代码时,我在下面收到此错误消息:

我不确定出了什么问题或如何解决此问题。对此的任何帮助将不胜感激。

提前谢谢了!

0 投票
1 回答
1261 浏览

python - 如何将 PyTorch 的 DataLoader 与 skorch 的 GridSearchCV 一起使用

我正在运行 PyTorch ANN 模型(用于分类任务),并且正在使用 skorchGridSearchCV搜索最佳超参数。

当我GridSearchCV使用n_jobs=1(即一次做一个超参数组合)运行时,它运行得非常慢。

当我设置n_jobs为大于 1 时,我得到一个内存爆裂错误。所以我现在想看看我是否可以使用 PyTorchDataLoader将数据集分成批次以避免内存爆裂问题。根据这个其他 PyTorch 论坛问题(https://discuss.pytorch.org/t/how-to-use-skorch-for-data-that-does-not-fit-into-memory/70081/2),它看来我们可以使用 SliceDataset。我的代码如下:

但是,当我运行此代码时,我收到以下错误消息:

我该如何解决?有没有办法将 PyTorchDataLoader与 skorch 一起使用GridSearchCV(即有没有办法将数据批量加载到 skorch 中GridSearchCV,以避免当我设置n_jobs为大于 1 in时出现内存爆裂问题GridSearchCV)?

非常感谢提前!