Вы (неявно) используете внутреннее разделение CV скорча, которое использует стратифицированное разделение в случае NeuralNetClassifier
, который, в свою очередь, заранее требует информацию о метках.
При передаче X
и y
в fit
по отдельности это работает нормально, поскольку y
доступен в любое время. Проблема в том, что вы используете torch.dataset.Dataset
, который ленив и не дает вам доступа к y
напрямую, отсюда ошибка.
Ваши варианты следующие.
Установить train_split=None
, чтобы отключить внутреннее разделение CV
net = NeuralNetClassifier(
train_split=None,
)
Вы потеряете внутреннюю проверку и, таким образом, такие функции, как ранняя остановка.
Предварительно разделить ваши данные
Разделите ваш набор данных на два набора данных, dataset_train
и dataset_valid
,
затем используйте skorch.helper.predefined_split
:
net = NeuralNetClassifier(
train_split=predefined_split(dataset_valid),
)
Вы ничего не теряете, но в зависимости от ваших данных это может быть сложно.
Извлеките ваш y
и передайте его в соответствии
y_train = np.array([y for X, y in iter(my_dataset)])
net.fit(my_dataset, y=y_train)
Это работает, только если ваш y
помещается в память. Поскольку вы используете TensorDataset
, вы также можете сделать следующее, чтобы извлечь y
:
y_train = my_dataset.y