В NumPy и PyTorch поддерживаются тензоры, у которых одна или несколько осей имеют нулевую длину.
Например:
Это полноценные объекты, с которыми выполняются стандартные операции (сложение, умножение, транспонирование, конкатенация при согласованных размерностях). Такие тензоры часто называют «пустыми» (empty tensors), но они не являются
🔍 Зачем они нужны?
Главное преимущество — единообразие кода. Вместо проверок
💡 Пример из загрузки датасетов
При сборке батча некоторые примеры могут не иметь разметки. Вместо пропуска или вставки заглушек вы формируете тензор формы
⚙️ Другие сценарии использования
- Обработка последовательностей переменной длины – пустые последовательности удобно представлять тензорами с нулевой длиной.
- Фильтрация данных – если после условий выборки не осталось элементов, результатом становится пустой тензор.
- Агрегация в группах – группы без данных возвращают пустые тензоры, упрощая универсальные функции редукции.
🚧 Проблема при портировании на Adept
В Adept концепция тензоров с нулевой размерностью не поддерживается. Библиотека проверяет размерности на этапе выполнения и генерирует исключение при обнаружении оси длины 0. Это существенно затрудняет перенос кода из NumPy/PyTorch.
Я столкнулся с этим при реализации DataLoader для тренировки модели YOLO. В исходной PyTorch-версии пустые тензоры свободно использовались для тренировочных данных без разметки. При адаптации под Adept пришлось вносить дополнительные проверки при формировании пакета.
Оптимальным решением будет расширить Adept поддержкой нулевых размерностей по аналогии с NumPy и PyTorch. Это позволит писать более лаконичный и надёжный код, избегая избыточных проверок и упрощая миграцию проектов между фреймворками. Также это снизит порог входа для новых пользователей.
#NumPy #PyTorch #Adept #Tensor #DataLoader
Например:
np.zeros((0, 24)) # форма (0, 24)
torch.empty((17, 0)) # форма (17, 0)
Это полноценные объекты, с которыми выполняются стандартные операции (сложение, умножение, транспонирование, конкатенация при согласованных размерностях). Такие тензоры часто называют «пустыми» (empty tensors), но они не являются
None и не требуют специальной обработки на каждом шагу алгоритма.🔍 Зачем они нужны?
Главное преимущество — единообразие кода. Вместо проверок
if data is not None на каждом этапе вы создаёте пустой тензор с нулевой длиной по нужной оси и продолжаете работать с ним как с обычными данными. Финальная проверка (например, наличие хотя бы одного элемента в пакете) откладывается до самого конца пайплайна.💡 Пример из загрузки датасетов
При сборке батча некоторые примеры могут не иметь разметки. Вместо пропуска или вставки заглушек вы формируете тензор формы
(0, num_features) и объединяете его с остальными через torch.cat – операция корректно обрабатывает пустой тензор, не нарушая размерность. Лишь на этапе подсчёта функции потерь вы проверяете, что размер батча > 0.⚙️ Другие сценарии использования
- Обработка последовательностей переменной длины – пустые последовательности удобно представлять тензорами с нулевой длиной.
- Фильтрация данных – если после условий выборки не осталось элементов, результатом становится пустой тензор.
- Агрегация в группах – группы без данных возвращают пустые тензоры, упрощая универсальные функции редукции.
🚧 Проблема при портировании на Adept
В Adept концепция тензоров с нулевой размерностью не поддерживается. Библиотека проверяет размерности на этапе выполнения и генерирует исключение при обнаружении оси длины 0. Это существенно затрудняет перенос кода из NumPy/PyTorch.
Я столкнулся с этим при реализации DataLoader для тренировки модели YOLO. В исходной PyTorch-версии пустые тензоры свободно использовались для тренировочных данных без разметки. При адаптации под Adept пришлось вносить дополнительные проверки при формировании пакета.
Оптимальным решением будет расширить Adept поддержкой нулевых размерностей по аналогии с NumPy и PyTorch. Это позволит писать более лаконичный и надёжный код, избегая избыточных проверок и упрощая миграцию проектов между фреймворками. Также это снизит порог входа для новых пользователей.
#NumPy #PyTorch #Adept #Tensor #DataLoader
👍1