audio_dataset_from_directory functionkeras.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_a 和 class_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_mode 是 None,它生成形状为
(batch_size,) 的 string 张量,包含一批音频文件的内容.(audio, labels),其中 audio
的形状为 (batch_size, sequence_length, num_channels),labels
遵循以下格式描述.关于标签格式的规则:
label_mode 是 int,标签是形状为
(batch_size,) 的 int32 张量.label_mode 是 binary,标签是形状为
(batch_size, 1) 的 float32 张量,值为 1 和 0.label_mode 是 categorical,标签是形状为
(batch_size, num_classes) 的 float32 张量,表示类索引的 one-hot 编码.