Безопасно ли обрезать загруженные torchaudio 16-битные аудио до `float16` из `float32`?

У меня есть несколько файлов WAV с 16-битной глубиной/точностью. torchaudio.info(...) признает это, давая мне:

precision = {int} 16

Тем не менее, когда я использую torchaudio.load(...), я получаю float32 dtype для результирующего тензора. С тензором под названием audio я знаю, что могу сделать audio.half(), чтобы урезать его до 16 бит, уменьшив использование памяти моего набора данных. Но сохранит ли эта операция точность всех возможных исходных значений? Я не снижаю точность dtype ниже точности исходного звука, но может быть веская причина, о которой я не знаю, почему torchaudio все еще возвращает float32.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
506
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы сказал, что он возвращается как float32, потому что это тип данных pytorch по умолчанию. Поэтому, если вы создадите какие-либо модели с весами, они также будут float32. Следовательно, входные данные будут несовместимы с моделью, если вы выполните преобразование входных данных. (E: или он все равно автоматически преобразует ваши данные в 32-битные, чтобы сделать их совместимыми с вашей моделью. Не уверен, какой pytorch выберет, но tensorflow определенно выдает ошибку).

Посмотрите на установку типа данных по умолчанию на float16, прежде чем создавать какие-либо модели, если вы хотите создавать небольшие модели: https://pytorch.org/docs/stable/generated/torch.set_default_dtype.html

ОДНАКО обратите внимание, что вы потеряете 5 бит точности, если преобразуете 16-битное целое число, поскольку вы диагностировали, что число на самом деле (но представлено как 32-битное число с плавающей запятой) в 16-битное число с плавающей запятой. Это связано с тем, что в экспоненте используются 5 бит точности, оставляя только 10 бит для представления десятичной части, представляющей число.

Я бы просто оставил его на float32, если вы не особенно ограничены в памяти.

Спасибо за ответ, никогда не понимал, что базовые значения в формате WAV на самом деле были int16. Похоже, процесс преобразования этого числа в число с плавающей запятой называется нормализацией. Я буду придерживаться float32, но может ли это идеально представлять все int16? Или он все еще теряет некоторую точность, но намного меньше, чем float16?

Mario Ishac 11.12.2020 11:36

int 16 — это 1 бит знака и 15 бит двоичных цифр. float32 — это 1 знаковый бит, 8 для экспоненты и 23 оставшихся для цифр. Так что мне кажется, что вы можете уместить 15 исходных битов в 23-битный блок чисел с запасными битами. По-моему, без потери точности.

J Bernardi 11.12.2020 12:47

Другие вопросы по теме