问题标签 [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.
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 在这种任务上做得不好?
pytorch - Skorch RuntimeError:输入类型(torch.cuda.ByteTensor)和权重类型(torch.cuda.FloatTensor)应该相同
我正在尝试开发图像分割模型。在下面的代码中,我不断遇到 RuntimeError:输入类型 (torch.cuda.ByteTensor) 和权重类型 (torch.cuda.FloatTensor) 应该相同。我不知道为什么我试图使用 .cuda() 将我的数据和我的 UNet 模型加载到 GPU 上(虽然不是 skorch 模型——不知道该怎么做)。我正在使用一个用于主动学习的库modAL,它包装了 skorch。
完整的错误跟踪是:
如果有人可以提供帮助,那将非常感激!尽管搜索了所有内容,但我真的被困住了——将我的 UNet 模型转换为浮点数并没有帮助,我想我已经在我应该调用的地方调用了 .cuda() 。
我尝试过的具体事情:
- RuntimeError:输入类型(torch.FloatTensor)和权重类型(torch.cuda.FloatTensor)应该是我的DataLoader到CUDA的相同加载条目
- 将 pin_memory 添加到我的 DataLoader
- 将我的 skorch NeuralNetwork 加载到 CUDA,如此处所述Pytorch, INPUT (normal tensor) and WEIGHT (cuda tensor) mismatch (这不起作用,因为它不是 skorch 中的函数)
- 将我的数据转换为浮动(https://discuss.pytorch.org/t/input-type-torch-cuda-doubletensor-and-weight-type-torch-cuda-floattensor-should-be-the-same/22704)
cross-validation - cross_val_predict 的输出
我使用 skorch 来训练我的模型,定义如下,
当我使用以下两种方法(有或没有 5-CV)来预测结果时,我发现 5-CV 的结果要差得多。
方法一
方法二
这是输出。
方法一
方法二
对于两种方法,我的 epoch 结束时的 train_loss 几乎相同,但是为什么在使用 5-CV 和 cross_val_predict 时 mse 和 r2 会差得多?
python - 使用 skorch 和 sklearn 管道的多输出回归由于 dtype 导致运行时错误
我想用 skorch 做多输出回归。我创建了一个小玩具示例,如下所示。在示例中,NN 应预测 5 个输出。我还想使用使用 sklearn 管道合并的预处理步骤(在此示例中使用 PCA,但它可以是任何其他预处理器)。执行此示例时,我在 Torch 的 Variable._execution_engine.run_backward 步骤中收到以下错误:
我是不是忘记了什么?我怀疑,必须在某个地方投射一些东西,但由于 skorch 处理了很多 pytorch 的东西,我看不出是什么和在哪里。
例子:
编辑1:
从这个例子可以看出,在开始时将 X 转换为 float32 并不适用于每个预处理器:
skorch - Skorch:如何绘制训练和验证的准确度
在我们用 Skorch 完成训练后,有没有办法绘制训练和验证的准确性net.fit(X_train, y_train)
。我们可以看到train_loss
, valid_loss
,valid_acc
但是train_acc
呢?谢谢你。
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).
neural-network - TypeError: forward() 在尝试使用 ExplainerDashboard 时得到了一个意外的关键字参数“temp”
我正在尝试将 ExplainerDashboard 用于我的 PyTorch 神经网络分类器。根据GitHub的要求,我将其作为 Skorch 模型传递,如下所示,它在拟合后正确生成模型。
然后,当试图将它传递给分类器解释器函数时,它会导致 TypeError
'temp' 是我的 DataFrame 中的列名:
任何想法为什么会发生此错误以及如何解决它?
python - 如何使用 skorch 检索从神经网络估计的权重?
我已经训练了一个简单的神经网络skorch
来使其sklearn
兼容,我想知道如何检索实际估计的权重。
这是我需要的可复制示例。
这里介绍的神经网络使用 10 个特征,具有 2 个节点的隐藏层,使用 ReLu 激活函数并线性组合 2 个节点的输出。
我到达的参数如下:
现在,用 包装我NNModule
,skorch
我正在使用这个:
我想检索在训练中获得的权重。我曾经dir(net)
查看权重是否存储在任何属性中无济于事。