问题标签 [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 投票
1 回答
66 浏览

machine-learning - NN 只是不擅长解决这个简单的线性问题,还是因为训练不好?

我试图用 PyTorch 和 skorch 训练一个非常简单(我认为)的 NN 模型,但糟糕的性能真的让我感到困惑,所以如果你对此有任何见解,那就太好了。

问题是这样的:有五个对象,A、B、C、D、E(由它们的指纹标记,例如(0, 0)是 A,(0.2, 0.5)是 B,等等)每个对应于一个数字,问题是试图找出每个数字对应的数字。训练数据是“集合”列表和相应的总和。例如: [A, A, A, B, B] == [(0,0), (0,0), (0,0), (0.2,0.5), (0.2, 0.5)] --> 15, [B, C, D, E] == [(0.2,0.5), (0.5,0.8), (0.3,0.9), (1,1)] --> 30 .... 请注意,一个集合中的对象不是恒定的

没有噪音什么的,所以它只是一个可以直接求解的线性系统。所以我认为这对于 NN 来说很容易找到。我实际上使用这个例子作为一个更复杂问题的健全性检查,但很惊讶 NN 甚至无法解决这个问题。

现在我只是想准确指出哪里出了问题。模型定义似乎是对的,数据输入是对的,是不是训练不好导致性能不好?还是NN在这些事情上不擅长?

这是模型定义:

skorch部分很简单

对于测试运行,数据集如下所示(总共 16 个集合):

对应的总数:[10, 11, 14, 14, 17, 18, ...]

只需通过目测就可以很容易地分辨出对象是什么/其中有多少在一个集合中,训练过程如下所示:

你可以看到它只是在一段时间后停止训练。我可以确认 NN 确实为不同的指纹给出了不同的结果,但不知何故,最终的预测值永远不够好。

我尝试了不同的 NN 大小、学习率、批量大小、激活函数(tanh、relu 等),但似乎都没有帮助。你对此有什么见解吗?有什么我做错了/可以尝试,还是 NN 在这种任务上做得不好?

0 投票
1 回答
894 浏览

pytorch - Skorch RuntimeError:输入类型(torch.cuda.ByteTensor)和权重类型(torch.cuda.FloatTensor)应该相同

我正在尝试开发图像分割模型。在下面的代码中,我不断遇到 RuntimeError:输入类型 (torch.cuda.ByteTensor) 和权重类型 (torch.cuda.FloatTensor) 应该相同。我不知道为什么我试图使用 .cuda() 将我的数据和我的 UNet 模型加载到 GPU 上(虽然不是 skorch 模型——不知道该怎么做)。我正在使用一个用于主动学习的库modAL,它包装了 skorch。

完整的错误跟踪是:

如果有人可以提供帮助,那将非常感激!尽管搜索了所有内容,但我真的被困住了——将我的 UNet 模型转换为浮点数并没有帮助,我想我已经在我应该调用的地方调用了 .cuda() 。

我尝试过的具体事情:

0 投票
0 回答
54 浏览

cross-validation - cross_val_predict 的输出

我使用 skorch 来训练我的模型,定义如下,

当我使用以下两种方法(有或没有 5-CV)来预测结果时,我发现 5-CV 的结果要差得多。

方法一

方法二

这是输出。

方法一

方法二

对于两种方法,我的 epoch 结束时的 train_loss 几乎相同,但是为什么在使用 5-CV 和 cross_val_predict 时 mse 和 r2 会差得多?

0 投票
1 回答
275 浏览

python - 使用 skorch 和 sklearn 管道的多输出回归由于 dtype 导致运行时错误

我想用 skorch 做多输出回归。我创建了一个小玩具示例,如下所示。在示例中,NN 应预测 5 个输出。我还想使用使用 sklearn 管道合并的预处理步骤(在此示例中使用 PCA,但它可以是任何其他预处理器)。执行此示例时,我在 Torch 的 Variable._execution_engine.run_backward 步骤中收到以下错误:

我是不是忘记了什么?我怀疑,必须在某个地方投射一些东西,但由于 skorch 处理了很多 pytorch 的东西,我看不出是什么和在哪里。

例子:

编辑1:

从这个例子可以看出,在开始时将 X 转换为 float32 并不适用于每个预处理器:

0 投票
1 回答
25 浏览

skorch - Skorch:如何绘制训练和验证的准确度

在我们用 Skorch 完成训练后,有没有办法绘制训练和验证的准确性net.fit(X_train, y_train)。我们可以看到train_loss, valid_lossvalid_acc但是train_acc呢?谢谢你。

0 投票
0 回答
116 浏览

python - 将 PyCaret 与神经网络一起用于回归问题的问题

我有一个回归问题,想将 PyCaret 与神经网络一起使用。我基于链接中的文章:https ://towardsdatascience.com/pycaret-skorch-build-pytorch-neural-networks-using-minimal-code-57079e197f33 。如您所见,本文将 PyCaret 与神经网络一起用于分类问题。我在转换以下代码时遇到问题:

将 torch.nn 导入为 nn

从 skorch 导入 NeuralNetRegressor

从 sklearn.pipeline 导入管道

从 skorch.helper 导入 DataFrameTransformer

导入 torch.nn.functional 作为 F

类网络(nn.Module):

,### 包括这个,因为它会抛出目标的 dtypes 错误

**类 customNLLLoss(nn.Module):

标准 = nn.NLLLoss()

净 = 神经网络分类器(

)

,### 参考:https ://github.com/pycaret/pycaret/issues/700#issuecomment-879700610

nn_pipe = 管道(

)

我相信问题出在customNLLLoss class 的 def forward 中。如何将此代码转换为回归问题?

当我运行代码时,出现以下错误:

ValueError:目标数据不应该是一维的,而是二维的,第二维的大小与回归目标的数量(通常为 1)相同。请将您的目标数据重塑为二维(例如 y = y.reshape(-1, 1).

0 投票
0 回答
304 浏览

neural-network - TypeError: forward() 在尝试使用 ExplainerDashboard 时得到了一个意外的关键字参数“temp”

我正在尝试将 ExplainerDashboard 用于我的 PyTorch 神经网络分类器。根据GitHub的要求,我将其作为 Skorch 模型传递,如下所示,它在拟合后正确生成模型。

然后,当试图将它传递给分类器解释器函数时,它会导致 TypeError

'temp' 是我的 DataFrame 中的列名:

我的数据框的一部分

任何想法为什么会发生此错误以及如何解决它?

0 投票
1 回答
32 浏览

python - 如何使用 skorch 检索从神经网络估计的权重?

我已经训练了一个简单的神经网络skorch来使其sklearn兼容,我想知道如何检索实际估计的权重。

这是我需要的可复制示例。

这里介绍的神经网络使用 10 个特征,具有 2 个节点的隐藏层,使用 ReLu 激活函数并线性组合 2 个节点的输出。

我到达的参数如下:

现在,用 包装我NNModuleskorch我正在使用这个:

我想检索在训练中获得的权重。我曾经dir(net)查看权重是否存储在任何属性中无济于事。