Какой dtype следует использовать для параметров PyTorch в нейронной сети, которая вводит и выводит массивы целых чисел?

В настоящее время я создаю нейронную сеть в PyTorch, которая принимает тензоры целых чисел и выводит тензоры целых чисел. Существует лишь небольшое количество положительных целых чисел, которые "разрешены" (например, 0, 1, 2, 3 и 4) в качестве элементов входных и выходных тензоров.

Нейронные сети обычно работают в непрерывном пространстве. Например, нелинейные функции активации между слоями являются непрерывными и отображают целые числа в действительные числа (включая нецелые числа).

Лучше ли использовать целые числа без знака, такие как torch.uint8, внутри для весов и смещений сети, а также какую-то пользовательскую функцию активации, которая отображает целые числа в целые числа?

Или я должен использовать высокоточные числа с плавающей запятой, такие как torch.float32, а затем округлить в конце, сгруппировав действительные числа до ближайшего целого числа? Я думаю, что вторая стратегия — это то, что нужно, но, возможно, я упускаю что-то, что могло бы хорошо сработать.


person R Tyler McLaughlin    schedule 30.08.2018    source источник


Ответы (1)


Не зная слишком много о вашем приложении, я бы выбрал torch.float32 с округлением. Основная причина в том, что если вы используете графический процессор для вычисления своей нейронной сети, он потребует, чтобы весы и данные были в типе данных float32. Если вы не собираетесь обучать свою нейронную сеть и хотите работать на процессоре, вам могут помочь типы данных, такие как torch.uint8, поскольку вы можете выполнять больше инструкций за интервал времени (т. е. ваше приложение должно работать быстрее). Если это не оставит вас с подсказкой, пожалуйста, будьте более конкретными о вашем приложении.

person Jan    schedule 30.08.2018
comment
Я почти уверен, что pytorch просто взорвется вам в лицо, если вы все равно будете использовать целые числа, поскольку градиенты также являются своего рода прерывистыми. - person dennlinger; 31.08.2018
comment
@dennlinger На процессоре для вывода это может сработать, поэтому я спросил о цели. - person Jan; 31.08.2018
comment
Большое спасибо, я не подумал об использовании чисел с плавающей запятой и округления для обучения, а затем переключился на целые числа на ЦП для вывода. Это точно отвечает на мой вопрос. - person R Tyler McLaughlin; 02.09.2018