详解Keras3.0 Data loading: Audio data loading

2023-12-21 19:46:06

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,
)
参数说明
  • directory: 包含音频文件的目录路径。
  • labels="inferred": 标签模式,默认为 "inferred",表示根据文件名推断标签。如果需要手动指定标签,可以设置为 "categorical" 或 "int"。
  • label_mode="int": 标签模式,可以是 "int"(整数)或 "categorical"(分类)。默认为 "int"。
  • class_names=None: 如果使用 "categorical" 标签模式,需要提供一个字符串列表,表示类别名称。默认为 None。
  • batch_size=32: 每个批次的样本数量。默认为 32。
  • sampling_rate=None: 采样率,单位为赫兹。默认为 None,表示使用原始音频文件的采样率。
  • output_sequence_length=None: 输出序列的长度。默认为 None,表示使用整个音频文件作为序列。
  • ragged=False: 是否返回不规则的张量。默认为 False,表示返回规则的张量。
  • shuffle=True: 是否在每个 epoch 开始时打乱数据顺序。默认为 True。
  • seed=None: 随机数种子,用于确保可重复性。默认为 None。
  • validation_split=None: 验证集的比例。默认为 None,表示不划分验证集。
  • subset=None: 可选值包括 "training"、"validation" 和 "testing",用于指定要加载的数据集子集。默认为 None,表示加载所有子集。
  • follow_links=False: 是否跟随符号链接。默认为 False。
示例

假设我们有一个目录,其中包含三个子文件夹:trainvalidationtest。每个子文件夹中都有一些音频文件,例如 train/audio1.wavtrain/audio2.wav

import tensorflow as tf
from tensorflow import keras

# 指定包含音频文件的目录
directory = '/path/to/audio/files'

# 创建音频数据集生成器
audio_dataset = tf.keras.utils.audio_dataset_from_directory(
    directory,
    shuffle=True,
    labels=True,
    batch_size=32,
    sample_rate=16000,
    num_samples=1000,
    subset='training',
    include_extension=['.wav', '.mp3'],
    exclude_sample_fn=lambda x: x.endswith('.DS_Store')
)

# 定义输入和输出形状
input_shape = (num_samples, )  # 音频样本的长度,根据实际情况进行修改
num_classes = len(unique_labels)  # 音频类别的数量,根据实际情况进行修改

# 构建神经网络模型
model = keras.Sequential([
    keras.layers.Dense(num_classes, activation='softmax', input_shape=input_shape)
])

# 编译模型
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# 训练模型
model.fit(audio_dataset, epochs=10, validation_split=0.2)

示例说明?
  1. 导入了TensorFlow库,并从中导入了Keras模块。
  2. 指定了包含音频文件的目录路径。
  3. 使用tf.keras.utils.audio_dataset_from_directory函数创建了一个音频数据集生成器。该函数从指定的目录中读取音频文件,并将其转换为适合训练的格式。参数包括:

    directory音频文件所在的目录路径。

    shuffle是否在每个epoch开始时打乱数据顺序。

    labels是否将标签与音频文件关联起来。

    batch_size每个批次的样本数量。

    sample_rate音频采样率。

    num_samples每个音频文件中要提取的样本数量。

    subset指定要使用的数据集子集,可以是'training'、'validation'或'test'。

    include_extension要包含的文件扩展名列表。

    exclude_sample_fn一个可选的函数,用于排除满足特定条件的样本。在这里,它排除了以'.DS_Store'结尾的文件。

  4. 定义了输入和输出形状。输入形状为(num_samples, ),表示音频样本的长度。输出形状为(num_classes, ),表示音频类别的数量。这里的num_samplesnum_classes需要根据实际的音频文件和类别进行调整。
  5. 构建了一个简单的神经网络模型。模型包含一个全连接层(Dense),具有num_classes个神经元,并使用softmax激活函数进行多分类任务。输入形状由之前定义的input_shape指定。
  6. 编译了模型。使用了Adam优化器,损失函数为稀疏分类交叉熵(sparse_categorical_crossentropy),并计算准确率作为评估指标。
  7. 使用model.fit方法训练模型。传入音频数据集生成器,指定训练的轮数(epochs)和验证集的比例(validation_split)。在这个例子中,训练了10个轮次,并将20%的数据用作验证集。

文章来源:https://blog.csdn.net/lymake/article/details/135137544
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。