第2章:环境搭建——TensorFlow 2.x安装、CUDA/cuDNN配置、Librosa与SoundFile音频处理库安装、数据集准备

说实话,环境搭建这事儿,看着简单,但坑是真不少。我见过太多同学,代码写得挺溜,结果卡在装环境这一步,一卡就是两三天。所以这一章,咱们把每一步都走踏实了。

2.1 TensorFlow 2.x 安装——选对版本很重要

TensorFlow 2.x 目前主流是 2.10 到 2.15 这个区间。我个人习惯用 2.12 或 2.13,稳定,生态也好。

安装命令很简单:

pip install tensorflow==2.13.0

但这里有个坑——千万别直接 pip install tensorflow。为啥?因为默认会装最新版,而最新版可能跟你的 CUDA 版本不匹配。我曾经有一次图省事,直接装了最新版,结果跑模型时疯狂报错,查了半天才发现是 CUDA 版本不对。

⚠️ 重要提醒: 如果你用的是 Apple Silicon(M1/M2)芯片,别装普通的 tensorflow,要装 tensorflow-macos。命令是:
pip install tensorflow-macos==2.13.0
这个坑我踩过,当时折腾了一下午。

2.2 CUDA/cuDNN 配置——GPU加速的关键

做语音识别,数据量大,模型复杂,没有 GPU 加速,训练一次可能要等好几天。所以 CUDA 和 cuDNN 的配置,是重中之重。

先确认你的显卡支持 CUDA:

  • NVIDIA 显卡:GTX 10系列以上基本都支持
  • AMD 显卡:目前 TensorFlow 官方不支持,得用 ROCm
  • 集成显卡:别想了,老老实实用 CPU 吧

CUDA 和 cuDNN 的版本匹配表:

TensorFlow 版本 CUDA 版本 cuDNN 版本
2.10.x 11.2 8.1
2.12.x 11.8 8.6
2.13.x 11.8 8.6
2.14.x 12.2 8.9

安装步骤:

  1. 去 NVIDIA 官网下载对应版本的 CUDA Toolkit
  2. 安装时选择「自定义安装」,只勾选 CUDA 组件
  3. 下载 cuDNN,解压后把文件复制到 CUDA 安装目录
  4. 配置环境变量(PATH 里加上 CUDA 的 bin 和 libnvvp 目录)
💡 我的小技巧: 装完 CUDA 后,在命令行输入 nvcc --version 检查版本。如果显示正常,再跑一下 nvidia-smi 看看驱动状态。两个都对了,再装 cuDNN。

验证 GPU 是否可用:

import tensorflow as tf
print("GPU可用:", tf.config.list_physical_devices('GPU'))

如果输出是空列表,别慌。先检查驱动,再检查版本匹配。我遇到过最奇葩的一次,是装了 CUDA 但忘了重启电脑……

2.3 Librosa 与 SoundFile 安装——音频处理的左膀右臂

做语音识别,Librosa 是绕不开的库。它封装了音频读取、特征提取、时频变换等常用功能。SoundFile 则是一个轻量级的音频读写库,支持多种格式。

安装命令:

pip install librosa soundfile

Librosa 依赖比较多,安装时可能会报错。最常见的是 llvmlitenumba 版本冲突。解决办法是:

pip install --upgrade numba llvmlite
pip install librosa --no-deps
pip install soundfile
📌 重点: Librosa 默认读取音频时,采样率会变成 22050Hz。如果你需要原始采样率,记得加上 sr=None 参数。我刚开始做项目时没注意这个,结果特征提取全错了,白跑了两天实验。

测试安装是否成功:

import librosa
import soundfile as sf

# 读取音频
audio, sr = librosa.load('test.wav', sr=None)
print(f"采样率: {sr}, 时长: {len(audio)/sr:.2f}秒")

# 写入音频
sf.write('output.wav', audio, sr)

2.4 数据集准备——从哪找数据?怎么处理?

语音识别领域,数据集就是命根子。没有好的数据,模型再牛也白搭。

常用中文语音数据集:

  • THCHS-30:清华大学的免费中文数据集,1万条语音,适合入门
  • AISHELL-1:178小时中文语音,质量很高,但需要申请
  • Free ST Chinese Mandarin Corpus:免费,约10小时,适合小项目
  • Common Voice (中文部分):Mozilla 开源项目,众包采集,质量参差不齐

数据集处理流程:

  1. 下载解压:注意文件格式,常见的是 WAV 或 FLAC
  2. 检查采样率:统一到 16kHz 或 22.05kHz
  3. 去除静音段:用 Librosa 的 effects.split 方法
  4. 生成标注文件:CSV 或 JSON 格式,包含音频路径和对应文本
  5. 划分数据集:训练集 80%、验证集 10%、测试集 10%
⚠️ 避坑指南: 我曾经用过一个数据集,里面有些音频文件是损坏的。训练到一半突然报错,排查了好久才发现是数据问题。所以建议你在处理数据时,加一段校验代码:
import librosa
import os

def check_audio(file_path):
    try:
        audio, sr = librosa.load(file_path, sr=None)
        return True
    except:
        return False

# 遍历所有音频文件
for file in os.listdir('audio_folder'):
    if not check_audio(file):
        print(f"损坏文件: {file}")

数据增强(可选但推荐):

如果你数据量不够,可以做些简单的增强:

  • 加噪声:从噪声库中随机叠加一段背景音
  • 变速:把音频速度调快或调慢 10%
  • 变调:改变音高,模拟不同说话人
💡 我的经验: 数据增强不是越多越好。我试过把数据量扩增 10 倍,结果模型反而变差了。后来发现是噪声加得太重,把语音特征都盖住了。建议增强比例控制在 1:1 到 1:3 之间。

2.5 环境验证——跑通第一个语音识别 Demo

所有东西装好后,咱们跑个简单的 Demo 验证一下:

import tensorflow as tf
import librosa
import numpy as np

# 1. 检查 GPU
print("GPU:", tf.config.list_physical_devices('GPU'))

# 2. 读取音频
audio, sr = librosa.load('test.wav', sr=16000)

# 3. 提取 MFCC 特征
mfcc = librosa.feature.mfcc(y=audio, sr=sr, n_mfcc=13)
print(f"MFCC 形状: {mfcc.shape}")

# 4. 构建一个简单的模型
model = tf.keras.Sequential([
    tf.keras.layers.Input(shape=(mfcc.shape[0], mfcc.shape[1])),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(10, activation='softmax')
])

model.summary()
print("✅ 环境搭建成功!")

如果这段代码能顺利跑完,恭喜你,环境搭建完成了!

嗯,说实话,环境搭建这一步确实繁琐,但磨刀不误砍柴工。后面咱们写代码、跑模型的时候,你就会感谢今天花时间把环境配好了。下一章,咱们正式开始讲语音信号处理的基础知识。