0

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

precision = {int} 16

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

4

1 回答 1

2

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

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

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

如果您不是特别受内存限制,我会将其保留在 float32。

于 2020-12-10T17:55:58.920 回答