Я пытаюсь построить две нейронные сети для классификации.Один для бинарных и второй для классификации нескольких классов.Я пытаюсь использовать torch.nn.CrossEntropyLoss()
в качестве функции потерь, но я пытаюсь обучить свою первую нейронную сеть, я получаю следующую ошибку:
multi-target not supported at /opt/conda/conda-bld/pytorch_1565272271120/work/aten/src/THNN/generic/ClassNLLCriterion.c:22
Из моего анализа я обнаружил, что мой набор данных имеет двапроблемы, вызвавшие ошибку.
- Мой набор данных содержит один код в горячем виде .Я использовал одну горячую кодировку для предварительной обработки моего набора данных.Первая целевая переменная
Y_binary
имеет форму torch.Size([125973, 1])
, заполненную нулями и 1, указывающими классы «Нет» и «Да». - Мои данные имеют неверные размеры? Я нашелчто я не могу использовать простой вектор с функцией кросс-энтропийной потери.Некоторые люди использовали следующий код для изменения своего целевого вектора перед передачей в функцию потерь.
out = out.permute(0, 2, 3, 1).contiguous().view(-1, class_number)
Но я не совсем понял причины этого кода.Но мне кажется, что мне нужно отслеживать следующие переменные: Class_Number
, Batch_size
, Dimension_Output
.Для моего кода здесь указаны размеры
X_train.shape: (125973, 122)
Y_train2.shape: (125973, 1)
batch_size = 64
K = len(set(Y_train2)) # Binary classification For multi class classification use K = len(set(Y_train5))
- Должно ли целевое значение быть одним горячим кодированием?Если нет, как я могу передать номинальную функцию в функцию потерь?
- Если я использую изменение формы вывода, вы можете помочь мне сделать это для моего кода?
Я пытаюсьиспользовать эту функцию потерь для обеих моих нейронных сетей.
Заранее спасибо,