0

我有一个回归问题,想将 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).

4

0 回答 0