Тип uint8
Тип данных torch.uint8 (unsigned 8-bit integer) представляет
беззнаковые целые числа в диапазоне от 0 до 255 включительно.
Этот тип часто используется для хранения изображений в градациях серого,
масок, а также для работы с бинарными данными. В PyTorch этот тип
обозначается как torch.uint8 или сокращённо torch.uint8.
При создании тензора с этим типом важно помнить, что значения
за пределами допустимого диапазона будут обрезаны или обёрнуты
в зависимости от операции.
Синтаксис
torch.tensor(data, dtype=torch.uint8)
Пример
Создадим тензор с типом uint8 из списка чисел:
import torch
t = torch.tensor([10, 20, 30, 40, 50], dtype=torch.uint8)
print(t)
Результат выполнения кода:
tensor([10, 20, 30, 40, 50], dtype=torch.uint8)
Пример
Попробуем создать тензор с числом вне допустимого диапазона. Обратите внимание, что значения больше 255 обрезаются:
import torch
t = torch.tensor([100, 256, 300], dtype=torch.uint8)
print(t)
Результат выполнения кода:
tensor([100, 255, 255], dtype=torch.uint8)
Как видим, все значения больше 255 были обрезаны до 255.
Пример
Преобразуем тензор другого типа в uint8 с помощью метода to:
import torch
t = torch.tensor([1.5, 2.7, 3.9], dtype=torch.float32)
t_uint8 = t.to(torch.uint8)
print(t_uint8)
Результат выполнения кода:
tensor([1, 2, 3], dtype=torch.uint8)
При преобразовании из вещественного типа дробная часть отбрасывается.
Пример
Используем тип uint8 для создания тензора из изображения.
Часто изображения в градациях серого хранятся как значения от 0 до 255:
import torch
# Эмуляция данных изображения 3x3
pixel_data = [
[0, 128, 255],
[64, 192, 32],
[16, 240, 80],
]
image = torch.tensor(pixel_data, dtype=torch.uint8)
print(image)
Результат выполнения кода:
tensor([
[ 0, 128, 255],
[ 64, 192, 32],
[ 16, 240, 80]
], dtype=torch.uint8)
Пример
Арифметические операции с uint8 могут приводить к переполнению.
Рассмотрим сложение двух тензоров:
import torch
t1 = torch.tensor([200, 50], dtype=torch.uint8)
t2 = torch.tensor([100, 100], dtype=torch.uint8)
res = t1 + t2
print(res)
Результат выполнения кода:
tensor([44, 150], dtype=torch.uint8)
Первое значение 44 появилось из-за переполнения (200 + 100 = 300, 300 - 256 = 44).
Второе значение 150 вычислено корректно (50 + 100 = 150).