transformer架构之数据处理

注:这里主要针对语音识别transformer架构为例进行解释说明

  • dataset函数

    Dataset代表自定义数据集方法的抽象类,·负责建立索引到样本的映射,DataLoader负责以特定的方式从数据集中迭代的产生 一个个batch的样本集合。在enumerate过程中实际上是dataloader按照其参数sampler规定的策略调用了其dataset的getitem方法。

    dataset(Dataset): 传入的数据集

  1. init函数
    • 5个基本参数

    __init__ 方法是构造函数,在创建 LibriSpeechDataset 对象时自动执行。

    data_dir:数据集的根目录路径(例如 train-clean-100)。

    transform:用于对音频数据进行变换的函数或对象,默认为 None

    self.file_pathsself.labels:分别用于存储所有音频文件的路径和对应的转录文本

    • for循环

    遍历 data_dir 目录中的每个子目录(假设每个子目录是一个说话人 ID,例如 19)。

    speaker_dir 是说话人的目录路径。

    如果 speaker_dir 不是一个目录,则跳过该路径。

    遍历每个说话人目录中的子目录(假设每个子目录是一个录音段 ID,例如 198)。

    chapter_dir 是录音段目录路径。

    如果 chapter_dir 不是一个目录,则跳过。

    • transcript_file

    在每个录音段目录中构建对应的转录文件路径,假设文件名格式为 {speaker_id}-{chapter_id}.trans.txt

    检查 transcript_file 是否存在,如果不存在,则输出警告并跳过该目录。

    打开并读取 transcript_file 文件。

    每行表示一个音频文件的 ID 和对应的转录文本,格式为 <file_id> <transcription>

    通过 split(" ", 1) 分割每行,将 file_idlabel(转录文本)分开。

    构建音频文件的路径 audio_path(假设音频文件的格式为 .flac)。

    检查 audio_path 是否存在。如果存在,将音频文件路径添加到 self.file_paths,将对应的转录文本添加到 self.labels

    如果音频文件不存在,则输出警告。

  2. len函数

    __len__ 方法返回数据集的样本数,即 self.file_paths 的长度。这是 Dataset 类的要求之一,用于表示数据集的大小。

  3. getitem函数

    __getitem__ 方法是 Dataset 类的另一个必需方法,返回给定索引 idx 的样本(音频数据和标签)。

    file_path:获取 self.file_paths 中索引为 idx 的音频文件路径。

    torchaudio.load(file_path):使用 torchaudio 加载音频文件,返回音频波形 waveform 和采样率 sample_rate

    如果提供了 transform,则对 waveform 进行转换(如梅尔频谱转换)。

    获取对应的标签 label

    返回 waveformlabel

总结

这个 LibriSpeechDataset 类用于加载 LibriSpeech 数据集中的音频文件及其对应的文本标签。

__init__ 方法会遍历数据集的文件夹结构,找到每个 .flac 音频文件和对应的转录文本。

__len__ 返回数据集中样本的数量。

__getitem__ 返回指定索引处的音频数据和标签,用于模型的输入和输出。

  • dataloader函数

def get_data_loader(data_dir, batch_size=32, shuffle=True):
    # 定义梅尔频谱转换
    transform = T.MelSpectrogram(sample_rate=16000, n_mels=64, hop_length=256, win_length=512)
    dataset = LibriSpeechDataset(data_dir, transform=transform)
    return DataLoader(dataset, batch_size=batch_size, shuffle=shuffle)

当我们通过迭代的方式来取得每一个数据,但是这样很难实现取batch,shuffle或者多线程读取数据,所以pytorch还提供了一个简单的方法来做这件事情,通过torch.utils.data.DataLoader类来定义一个新的迭代器,用来将自定义的数据读取接口的输出或者PyTorch已有的数据读取接口的输入按照batch size封装成Tensor。

get_data_loader 函数的功能是:

  1. 定义音频数据的梅尔频谱转换。
  2. 使用 LibriSpeechDataset 加载音频文件和对应标签,并将转换应用到音频波形上。
  3. 返回一个 DataLoader 对象,用于在训练或测试时以批量形式加载数据。

def get_data_loader

  • 定义一个函数 get_data_loader,用于创建 PyTorch 的数据加载器(DataLoader)。
  • 接收以下参数:
    • data_dir:字符串,数据集的根目录路径。
    • batch_size:整数,每个批次加载的数据样本数量,默认为 32。
    • shuffle:布尔值,是否随机打乱数据样本的顺序,默认为 True

transform = T.MelSpectrogram(...)

  • 创建一个梅尔频谱变换对象 transform,用于将音频波形转换为梅尔频谱图。
  • T.MelSpectrogramtorchaudio.transforms 中的一个类,提供了将音频转换为梅尔频谱图的功能。
  • 参数解释:
    • sample_rate=16000:采样率为 16kHz,表示音频每秒采样 16000 次。
    • n_mels=64:梅尔频谱图的频带数量,设置为 64。
    • hop_length=256:控制每两帧之间的步长,决定了时间分辨率。
    • win_length=512:窗口长度,用于短时傅里叶变换 (STFT) 的计算,决定了频率分辨率。

dataset = LibriSpeechDataset(...)

  • 创建一个 LibriSpeechDataset 对象 dataset,用于加载 data_dir 中的音频和标签数据。
  • LibriSpeechDataset 是自定义的数据集类,它会读取 data_dir 中的 .flac 音频文件和对应的转录文本。
  • transform=transform:将前面定义的 MelSpectrogram 转换传递给 LibriSpeechDataset,确保每次加载音频时都将其转换为梅尔频谱图。

return DataLoader(...)

  • 返回一个 PyTorch 的 DataLoader 对象,用于批量加载数据。

  • 参数解释:

    • dataset:传入刚刚创建的 LibriSpeechDataset 对象。
    • batch_size=batch_size:每个批次加载的数据样本数量。
    • shuffle=shuffle:是否在每个 epoch 开始时打乱数据顺序。
  • 神经网络中的前向过程和反向过程

    1. 前向过程(Forward Propagation)

    前向过程是指数据从输入层流经隐藏层直到输出层的过程。在这个过程中,每一层的神经元根据输入和权重、偏置计算出一个激活值,最终得到预测结果。

    1. 反向过程(Backward Propagation)

    反向过程是神经网络训练的核心,它利用误差反向传播算法来更新模型的参数(权重和偏置),以最小化损失函数。

    • 计算损失
    • 计算梯度
    • 更新参数
### 华为昇腾310B 用户权限设置与管理 对于华为昇腾310B的用户权限设置与管理,主要涉及几个方面: #### 一、创建专用用户组和用户 为了安全性和资源隔离,在使用Ascend 310B之前应该创建专门用于运行AI应用和服务的Linux用户和用户组。这可以通过`groupadd` 和 `useradd` 命令实现。 ```bash sudo groupadd aiusers sudo useradd -m -g aiusers aiadmin ``` 上述命令会建立名为aiusers的新群组以及属于该群组下的新成员aiadmin[^4]。 #### 二、配置文件权限 确保只有授权人员能够访问重要的系统目录和文件。通常情况下,/etc/atlas目录下包含了多个配置项,这些都应被严格保护起来不让普通用户随意更改。通过调整相应路径上的读写属性来达到目的: ```bash sudo chown root:root /etc/atlas/ sudo chmod og-rwx /etc/atlas/* ``` 此操作将使/etc/atlas及其内部所有条目仅限超级管理员可编辑。 #### 三、设定环境变量 为了让特定用户的shell session自动加载必要的库函数和其他辅助程序,可以在其个人home folder中的.bashrc或者其他初始化脚本里加入export语句指向Ascend SDK的位置。 ```bash echo 'export ASCEND_HOME=/usr/local/Ascend' >> ~/.bashrc source ~/.bashrc ``` 这样每次登录时都会把ASCEND_HOME设成指定值以便后续调用SDK接口时不需重复输入完整路径。 #### 四、授予执行权限给安装包 当从官方渠道获得预编译好的工具链压缩包后(如ascend-cann-toolkit),可能需要赋予它们+x标志才能顺利启动安装流程。 ```bash chmod +x ascend-cann-toolkit*.run ./ascend-cann-toolkit*.run ``` 以上步骤有助于顺利完成软件部署过程而不受权限不足的影响[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值