В настоящее время я использую Torch и просто пытаюсь запустить простую программу нейронной сети. Каждый из моих входных данных имеет 3 атрибута, и на выходе должна быть классификация между числами 1 и 7. Я извлек свои данные из файла CSV и поместил их в 2 тензора (1 с входами и 1 с выходы). Данные в этом формате.
**Data**
1914 1993 2386
1909 1990 2300
.....
1912 1989 2200
[torch.DoubleTensor of size 99999x3]
**Class**
1
1
2
.....
7
[torch.DoubleTensor of size 99999]
Для модели, которую я использую для обучения сети, у меня просто есть
model = nn.Sequential()
model:add(nn.Linear(3, 7))
model:add(nn.LogSoftMax())
criterion = nn.ClassNLLCriterion()
И это код, который я должен обучить сети
for int i = 1, 10 do
prediction = model:forward(data)
loss = criterion:forward(prediction, class)
model:zeroGradParameters()
grad = criterion:backward(prediction, class)
model:backward(data, grad)
model:updateParameters(.1)
end
В моем тензоре тестовых данных я отформатировал его так же, как и тестовые данные (тензор 99999x3). Я хочу, чтобы программа предсказывала, какой будет классификация, когда я запускаю эту строку.
print (model:forward(test_data))
Однако я получаю отрицательные числа (чего не должно происходить с ClassNLLCriterion?), и суммы вероятностей не добавляются к 0. Я сомневаюсь, что я либо неправильно отформатировал данные, либо что я не смог выполнить тренировочный процесс правильно. Если кто-то может помочь мне разобраться, в чем проблема, я был бы очень благодарен.
Благодарю вас!