You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pytorch-kaldi运行TIMIT教程报错shared_list[0] IndexError:列表索引越界

报错根因说明

你遇到的IndexError: list index out of range直接原因是read_lab_fea函数执行异常,没有向shared_list写入任何返回数据,你排查到的fea_dict与lab_dict无公共元素是根本诱因,本质是特征和标签的utterance ID完全不匹配,导致没有有效样本被加载。

解决步骤

1. 校验配置文件路径正确性

  • 确认TIMIT_MLP_mfcc_basic.cfg中[dataset]模块下的feat_scp、lab_folder两个路径,完全匹配Kaldi run.sh执行完成后生成的特征scp文件、标签文件夹的实际绝对路径,重点排查路径拼写、大小写、层级错误,比如是否多写/漏写了TIMIT数据集根目录层级。
  • 确认feat_scp对应的scp文件非空,lab_folder目录下存在至少上百个标签文件,排除路径指空的低级错误。

2. 验证特征与标签ID匹配性

  • 从特征scp文件中随便选取前3个utterance ID,执行命令grep "选取的ID" 你的lab_folder路径/*,如果找不到对应标签文件,说明ID格式不匹配:Kaldi默认生成的utterance ID是「说话人编号_句子编号」格式,如果你的标签文件命名只有句子编号,就会完全匹配不上。
  • 出现ID不匹配问题时,回到Kaldi TIMIT脚本目录,删除之前生成的data/train、data/test目录,重新执行local/timit_data_prep.sh数据预处理步骤,确保特征提取和标签生成用的是同一套utterance列表,没有中途修改样本过滤规则。

3. 显式捕获数据读取错误

临时修改你贴出的报错代码段,替换多线程逻辑为单线程直接调用,打印具体报错信息:

# ***** Reading the Data********
if processed_first:
    #Reading all the features and labels for this chunk
    shared_list = []

    # 临时注释多线程逻辑,改为直接调用捕获异常
    # p = threading.Thread(target=read_lab_fea, args=(cfg_file, is_production, shared_list, output_folder))
    # p.start()
    # p.join()
    try:
        read_lab_fea(cfg_file, is_production, shared_list, output_folder)
    except Exception as e:
        print(f"数据读取函数执行错误:{e}")
        import traceback
        traceback.print_exc()
        exit()

    data_name = shared_list[0]
    data_end_index = shared_list[1]
    fea_dict = shared_list[2]
    lab_dict = shared_list[3]
    arch_dict = shared_list[4]
    data_set = shared_list[5]

运行后可以直接看到是特征读取失败、标签读取失败还是样本过滤逻辑把所有样本都过滤了,不用靠空列表推断问题。

4. 校验标签配置一致性

确认cfg文件[labels]模块下的lab_count参数和你使用的TIMIT标签类别数匹配:TIMIT标准可选61类、48类、39类映射规则,如果之前修改过Kaldi的标签映射脚本,要同步修改这个参数,否则不匹配类别的标签会被全部过滤,导致lab_dict为空。

内容的提问来源于stack exchange,提问作者user2956920

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:54:04