将 torchaudio 加载 16 位音频从 `float32` 截断为 `float16` 是否安全?

Is it safe to truncate torchaudio's loaded 16-bit audios to `float16` from `float32`?

我有多个 depth/precision 的 16 位 WAV 文件。 torchaudio.info(...) 认识到这一点,给我:

precision = {int} 16

然而,当我使用 torchaudio.load(...) 时,我得到一个 float32 dtype 作为结果张量。 使用名为 audio 的张量,我知道我可以执行 audio.half() 将其截断为 16 位,从而减少数据集的内存使用量。但这是一种将保留所有可能原始值的精度的操作吗?我没有将 dtype 的精度降低到原始音频的精度以下,但可能有一个很好的理由我不知道为什么 torchaudio 仍然 returns float32.

我会说它作为 float32 返回,因为这是 pytorch 的默认数据类型。因此,如果您创建任何带有权重的模型,它们也将是 float32。因此,如果对输入数据进行转换,输入将与模型不兼容。 (E:或者它会默默地将你的数据转换为 32 位,以使其与你的模型兼容。不确定选择哪个 pytorch,但 tensorflow 肯定会抛出错误)。

如果您想制作小型模型,请在创建任何模型之前将默认数据类型设置为 float16:https://pytorch.org/docs/stable/generated/torch.set_default_dtype.html

但是请注意,如果您转换 16 位 int,您 丢失 5 位精度,因为您已经诊断出该数字实际上是(但表示为 32位浮点数)到 16 位浮点数。这是因为指数中使用了5位精度,只剩下10位来表示表示数字的小数部分。

如果您的内存不是特别紧张,我会把它保持在 float32。