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。假设我们有一个目录,其中包含三个子文件夹:train
、validation
和 test
。每个子文件夹中都有一些音频文件,例如 train/audio1.wav
、train/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)
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'结尾的文件。
(num_samples, )
,表示音频样本的长度。输出形状为(num_classes, )
,表示音频类别的数量。这里的num_samples
和num_classes
需要根据实际的音频文件和类别进行调整。num_classes
个神经元,并使用softmax激活函数进行多分类任务。输入形状由之前定义的input_shape
指定。model.fit
方法训练模型。传入音频数据集生成器,指定训练的轮数(epochs)和验证集的比例(validation_split)。在这个例子中,训练了10个轮次,并将20%的数据用作验证集。