Nano Hash - криптовалюты, майнинг, программирование

Использование Torch ClassNLLCriterion

В настоящее время я использую 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. Я сомневаюсь, что я либо неправильно отформатировал данные, либо что я не смог выполнить тренировочный процесс правильно. Если кто-то может помочь мне разобраться, в чем проблема, я был бы очень благодарен.

Благодарю вас!


Ответы:


1

Причина, по которой вы не можете видеть результаты прогнозирования на слое model:add(nn.LogSoftMax()), который реализует функцию log, заключается в том, что у вас есть отрицательные значения (они не являются вероятностями). Например, чтобы вернуть вероятности, вы должны сделать:

model = nn.Sequential()
model:add(nn.Linear(3, 7));
model:add(nn.LogSoftMax());
criterion = nn.ClassNLLCriterion();
data = torch.Tensor{1914,  1993 , 2386}
print (model:forward(data):exp())

>>  0.0000
  0.0000
  1.0000
  0.0000
  0.0000
  0.0000
  0.0000 [torch.DoubleTensor of size 7]

Извините за столь поздний ответ.

21.10.2016

2

Вот то, что я сейчас использую, что, возможно, является неправильным способом использования classnllcriterion, но, по крайней мере, это поможет вам понять это.

Сделайте цели либо

(7,1,1,1,1,1,1) <--First class representation
.......
(1,1,1,1,1,1,7) <--Last class representation

or

 (1,1,1,1,1,1,1) <--First class representation
 .......
 (7,7,7,7,7,7,7) <--Last class representation

Я подумал, что намного проще обучить последнее представление в качестве цели, но мне кажется, что вместо этого мы должны использовать первое.

EDIT: я только что узнал, что classnllcriterion принимает только скаляры в качестве целей, поэтому использование вышеизложенного неверно!

Вместо этого в качестве целевых значений следует использовать 1 .. 7, либо только 1, либо только 7.

Это

20.10.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..