Нужна помощь с использованием Keras 'model.predict - PullRequest
0 голосов
/ 13 мая 2018

Моя цель состоит в том, чтобы облегчить подгонку нейронной сети, предоставив 2 вершины определенного графика и 1, если есть ссылка, или 0, если ее нет.

Я подхожу к своей модели, потеря примерно 0,40, точность около 83% при установке.Затем я оцениваю модель, предоставляя партию всех положительных образцов и несколько партий отрицательных (используя random.sample).Моя модель получает потери ~ 0,35 и 1,0 для положительных образцов и ~ 0,46 потерь 0,68 для отрицательных.

Мое понимание нейронных сетей, если оно чрезвычайно ограничено, но, насколько я понимаю, вышеизложенное означает, что теоретически оно всегда вернокогда он выводит 0, когда ссылки нет, но иногда может выводить 1, даже если ее нет.

Теперь для моей реальной проблемы: я пытаюсь «восстановить» исходный граф с помощью нейронной сети через model.predict.Проблема в том, что я не понимаю, что означает прогнозируемый результат.Сначала я предполагал, что значения выше 0,5 означают 1, иначе 0. Но если это так, модель даже близко не подходит к восстановлению оригинала.

Я понимаю, что она не будет идеальной, но это простовозвращает значение выше 0,5 для кандидатов случайных ссылок.

Может кто-нибудь объяснить мне, как именно работает model.predict и как правильно использовать его для перестройки моего графика?

1 Ответ

0 голосов
/ 14 мая 2018

Модель, которую вы обучили, не оптимизирована напрямую w.r.t. реконструкция графа. Без потери общности, для графа с N узлом вам нужно предсказать ссылки N choose 2. И может быть разумно предположить, что истинные значения большинства этих ссылок равны 0.

Если посмотреть на точность вашей модели в 0-классе и 1-классе, становится ясно, что ваша модель склонна прогнозировать 1-класс, если предположить, что ваши тренировочные данные сбалансированы. Таким образом, ваш восстановленный график содержит множество ссылок ложная тревога . Это точная причина того, почему производительность вашего графа реконструкции низкая.

Если возможно переобучить модель, я предлагаю вам сделать это и использовать больше отрицательных образцов.

Если нет, вам следует рассмотреть возможность применения некоторой постобработки. Например, вместо того, чтобы находить порог, чтобы решить, какие два узла имеют ссылку, используйте необработанные предсказанные вероятности ссылки, чтобы сформировать матрицу связи между узлами, и примените что-то вроде минимального связующего дерева, чтобы дополнительно решить, какие ссылки являются подходящими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...