Функция isfinite
Функция isfinite используется для определения,
являются ли элементы тензора конечными числами.
Она возвращает тензор булевых значений, где True
означает, что соответствующий элемент является конечным числом
(не inf, не -inf и не nan).
Функция особенно полезна при отладке моделей,
когда нужно проверить наличие взрывов градиентов
или потерю численной стабильности.
Синтаксис
torch.isfinite(input)
Параметры функции:
-
input- входной тензор для проверки
Функция возвращает тензор такого же размера, как и input,
но с булевыми элементами.
Пример
Базовое использование функции isfinite для проверки конечных значений в тензоре:
import torch
t = torch.tensor([1.0, float('inf'), 2.5, float('nan'), -3.0])
res = torch.isfinite(t)
print(res)
Результат выполнения кода:
tensor([ True, False, True, False, True])
Как видно из примера, для бесконечности и nan
возвращается False, а для обычных чисел - True.
Пример
Использование isfinite в реальном сценарии для фильтрации невалидных значений:
import torch
t = torch.tensor([1.0, 2.0, 3.0, float('nan'), 5.0])
mask = torch.isfinite(t)
valid_values = t[mask]
print(valid_values)
Результат выполнения кода:
tensor([1., 2., 3., 5.])
С помощью маски можно легко отфильтровать все невалидные значения.
Пример
Проверка наличия хотя бы одного неконечного значения в тензоре:
import torch
t = torch.tensor([1.0, float('inf'), 3.0, 4.0, 5.0])
has_invalid = not torch.all(torch.isfinite(t))
print(has_invalid)
Результат выполнения кода:
True
Этот подход позволяет быстро проверить, есть ли в тензоре неконечные значения.
Пример
Применение isfinite к многомерному тензору:
import torch
t = torch.tensor([
[1.0, float('inf'), 3.0],
[4.0, 5.0, float('nan')]
])
res = torch.isfinite(t)
print(res)
Результат выполнения кода:
tensor([
[ True, False, True],
[ True, True, False]
])