В настоящее время я создаю нейронную сеть в PyTorch, которая принимает тензоры целых чисел и выводит тензоры целых чисел. Существует лишь небольшое количество положительных целых чисел, которые "разрешены" (например, 0, 1, 2, 3 и 4) в качестве элементов входных и выходных тензоров.
Нейронные сети обычно работают в непрерывном пространстве. Например, нелинейные функции активации между слоями являются непрерывными и отображают целые числа в действительные числа (включая нецелые числа).
Лучше ли использовать целые числа без знака, такие как torch.uint8
, внутри для весов и смещений сети, а также какую-то пользовательскую функцию активации, которая отображает целые числа в целые числа?
Или я должен использовать высокоточные числа с плавающей запятой, такие как torch.float32
, а затем округлить в конце, сгруппировав действительные числа до ближайшего целого числа? Я думаю, что вторая стратегия — это то, что нужно, но, возможно, я упускаю что-то, что могло бы хорошо сработать.