Близость дробных чисел в PyTorch
Дробные значения в ячейках хранятся
с округлением, поэтому точное сравнение
через == иногда даёт
False там, где числа почти
совпадают. Функция allclose
проверяет попарную близость двух
тензоров с учётом малого допуска.
Сложим 0.1 и 0.2 в типе
float32 и сравним результат
с близким значением 0.3:
import torch
total = torch.tensor([0.1], dtype=torch.float32) + torch.tensor([0.2], dtype=torch.float32)
mark = torch.tensor([0.3000001], dtype=torch.float32)
print(total == mark) # выведет tensor([False])
print(torch.allclose(total, mark)) # выведет True
Если записать 0.3 тем же типом,
точное сравнение с суммой может
совпасть, но малейшее расхождение
снова видно только через близость:
import torch
a = torch.tensor([1.0, 2.0], dtype=torch.float32)
b = torch.tensor([1.0000001, 2.0], dtype=torch.float32)
print(a == b) # выведет tensor([False, True])
print(torch.allclose(a, b)) # выведет True
Когда разница слишком велика,
allclose тоже вернёт
False:
import torch
x = torch.tensor([1.0], dtype=torch.float32)
y = torch.tensor([1.5], dtype=torch.float32)
print(torch.allclose(x, y)) # выведет False
Создайте два ряда из дробных
1.0, 2.0 и 3.0
так, чтобы во втором ряду первое
число чуть отличалось от первого.
Выведите маску точного совпадения
по ячейкам.
Для тех же двух рядов выведите один логический флаг, показывающий, считаются ли ряды почти одинаковыми.
Создайте два ряда [0.5, 1.0]
и [0.5, 2.0] в float32
и выведите один флаг проверки
близости между ними.