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

音频数据加载

[source]

audio_dataset_from_directory function

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 编码.