Keras 3 API 文档 / 数据加载 / 音频数据加载

音频数据加载

[源]

audio_dataset_from_directory 函数

keras.utils.audio_dataset_from_directory(
    directory,
    labels="inferred",
    label_mode="int",
    class_names=None,
    batch_size=32,
    sampling_rate=None,
    output_sequence_length=None,
    ragged=False,
    shuffle=True,
    seed=None,
    validation_split=None,
    subset=None,
    follow_links=False,
    verbose=True,
)

从目录中的音频文件生成一个 tf.data.Dataset 对象。

如果您的目录结构如下:

main_directory/
...class_a/
......a_audio_1.wav
......a_audio_2.wav
...class_b/
......b_audio_1.wav
......b_audio_2.wav

那么调用 audio_dataset_from_directory(main_directory, labels='inferred') 将返回一个 tf.data.Dataset,该数据集会从子目录 class_aclass_b 中生成音频文件批次,并附带标签 0 和 1(0 对应于 class_a,1 对应于 class_b)。

目前仅支持 .wav 文件。

参数

  • directory:数据所在的目录。如果 labels"inferred",则该目录应包含子目录,每个子目录包含一个类别的音频文件。否则,将忽略目录结构。
  • labels:可以是 "inferred"(标签从目录结构推断生成),None(无标签),或者一个与目录中找到的音频文件数量大小相同的整数标签列表/元组。标签应按照音频文件路径的字母数字顺序排序(通过 Python 中的 os.walk(directory) 获取)。
  • label_mode:描述 labels 编码方式的字符串。选项包括:
    • "int":表示标签编码为整数(例如用于 sparse_categorical_crossentropy 损失函数)。
    • "categorical":表示标签编码为分类向量(例如用于 categorical_crossentropy 损失函数)。
    • "binary":表示标签(只能有 2 个)编码为 float32 标量,值为 0 或 1(例如用于 binary_crossentropy 损失函数)。
    • None(无标签)。
  • class_names:仅当 "labels" 为 "inferred" 时有效。这是明确的类别名称列表(必须与子目录名称匹配)。用于控制类别的顺序(否则使用字母数字顺序)。
  • batch_size:数据批次的大小。默认值:32。如果为 None,数据将不会分批(数据集将产生单个样本)。
  • sampling_rate:音频采样率(单位:每秒样本数)。
  • output_sequence_length:音频序列的最大长度。比此长度长的音频文件将被截断到 output_sequence_length。如果设置为 None,则同一批次中的所有序列将被填充到该批次中最长序列的长度。
  • ragged:是否返回 Ragged 数据集(其中每个序列具有自己的长度)。默认为 False
  • shuffle:是否打乱数据。如果设置为 False,则按字母数字顺序对数据进行排序。默认为 True
  • seed:用于打乱和转换的可选随机种子。
  • validation_split:一个可选的浮点数,介于 0 和 1 之间,表示用于验证的数据比例。
  • subset:要返回的数据子集。可以是 "training""validation""both" 之一。仅当设置了 validation_split 时使用。
  • follow_links:是否访问符号链接指向的子目录。默认为 False
  • verbose:是否显示关于找到的类别数量和文件数量的信息。默认为 True

返回值

一个 tf.data.Dataset 对象。

  • 如果 label_modeNone,它将生成形状为 (batch_size,)string 张量,包含一批音频文件的内容。
  • 否则,它将生成一个元组 (audio, labels),其中 audio 的形状为 (batch_size, sequence_length, num_channels),而 labels 遵循下面描述的格式。

关于标签格式的规则

  • 如果 label_modeint,标签是一个形状为 (batch_size,)int32 张量。
  • 如果 label_modebinary,标签是一个形状为 (batch_size, 1)float32 张量,包含 1 和 0。
  • 如果 label_modecategorical,标签是一个形状为 (batch_size, num_classes)float32 张量,表示类别索引的 one-hot 编码。