Использование взаимной информации для выбора объектов между картами объектов (python) - PullRequest
1 голос
/ 25 июня 2019

Я хочу сделать выбор объектов из 512 карт объектов (3X3 каждая) из сверточных слоев нейронной сети.Я хочу вычислить матрицу взаимной информации 512X512 между каждыми двумя векторами и выбрать 256 карт объектов с наименьшими значениями взаимной информации (исключая строки / столбцы со всеми нулями).

Для простоты, скажем, у меня есть следующие тензоры(вам не нужен pytorch, вы можете просто использовать numpy):

t2 = torch.Tensor([0.25, 2.1.5. 3.2, 3.1, 2.5])
t3 = torch.Tensor([0.14, 0.9, 6.2 ,3.1  ,1.7])
v2 = t2.data.numpy()
v3 = t3.data.numpy()

Я использовал найденный мной код для вычисления взаимной информации между двумя векторами (я просто изменил xrange на range): Python'sреализация взаимной информации

mi_compmi = computeMI(v2,v3)
print('Result: ', mi_compmi)

Дело в том, что я всегда получаю одинаковые значения px, py, pxy и один и тот же результат 2,32 для всех векторов, которые я назначаю в v2 и v3, почему?Я получаю это, даже когда вычисляю MI между вектором и самим собой, тогда как оно должно быть 0.

1 Ответ

0 голосов
/ 25 июня 2019

Вы должны использовать sklearn mutual_info_score, см. здесь .Кажется, работает нормально и должен решить вашу проблему.

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

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