我有一个回归问题,想将 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):
def __init__(self, num_inputs=12, num_units_d1=200, num_units_d2=100):
super(Net, self).__init__()
self.dense0 = nn.Linear(num_inputs, num_units_d1)
self.nonlin = nn.ReLU()
self.dropout = nn.Dropout(0.5)
self.dense1 = nn.Linear(num_units_d1, num_units_d2)
self.output = nn.Linear(num_units_d2, 2)
self.softmax = nn.Softmax(dim=-1)
def forward(self, X, **kwargs):
X = self.nonlin(self.dense0(X))
X = self.dropout(X)
X = self.nonlin(self.dense1(X))
X = self.softmax(self.output(X))
return X
,### 包括这个,因为它会抛出目标的 dtypes 错误
**类 customNLLLoss(nn.Module):
标准 = nn.NLLLoss()
def __init__(self):
super().__init__()
def forward(self, logits, target):
return self.criterion(logits, target.long())**
净 = 神经网络分类器(
module=Net,
criterion=customNLLLoss, ### Including this as it throws an error of dtypes for target
max_epochs=30,
lr=0.1,
batch_size=32,
train_split=None
)
,### 参考:https ://github.com/pycaret/pycaret/issues/700#issuecomment-879700610
nn_pipe = 管道(
[("transform", DataFrameTransformer()),
("net", net),]
)
我相信问题出在customNLLLoss class 的 def forward 中。如何将此代码转换为回归问题?
当我运行代码时,出现以下错误:
ValueError:目标数据不应该是一维的,而是二维的,第二维的大小与回归目标的数量(通常为 1)相同。请将您的目标数据重塑为二维(例如 y = y.reshape(-1, 1).