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

Python新手运行CTL-MTNet遇FileNotFoundError问题咨询

解决CTL-MTNet中SAVEE/EMODB数据集的FileNotFoundError问题

这个错误的核心是代码预期的情感文件夹结构(比如angry)和你实际数据集的命名规则不匹配——SAVEE和EMODB都是通过文件名前缀/字符区分情感,而非按情感分类的文件夹。你有两种解决思路:

方案1:整理数据集为代码预期的文件夹结构

  • 在你的数据集根目录下,创建代码中指定的情感文件夹(比如angry、happy、neutral等,对应Utils.py里元组的内容)
  • 针对SAVEE数据集:
    • 把所有文件名包含a前缀的愤怒语音(比如a01、a02开头的文件)移动到angry文件夹
    • 同理,将h开头的文件移到happy,n开头移到neutral,按代码里的情感名称对应整理
  • 针对EMODB数据集:
    • 把文件名最后一个字符为A的愤怒语音(比如03a01A.wav这类)移动到angry文件夹
    • 对应其他情感:H→happy、N→neutral、S→sad、U→surprise、F→fear、D→disgust,分别归类到对应文件夹

方案2:修改Utils.py适配数据集命名规则(更推荐,无需改动原始数据)

这种方法不用移动文件,直接修改代码的情感识别逻辑:

  1. 找到Utils.py中定义情感文件夹的元组(比如类似EMOTIONS = ('angry', 'happy', ...)的代码块)
  2. 替换为按文件名解析情感的函数,示例如下:
    # 解析SAVEE文件名的情感标签
    def parse_savee_emotion(filename):
        # SAVEE文件名格式示例:DC_a01.wav,取下划线后第一个字符
        code = filename.split('_')[1][0]
        code_map = {
            'a': 'angry',
            'h': 'happy',
            'n': 'neutral',
            'sa': 'sad',
            'su': 'surprise',
            'f': 'fear',
            'd': 'disgust'
        }
        return code_map.get(code, 'unknown')
    
    # 解析EMODB文件名的情感标签
    def parse_emodb_emotion(filename):
        # EMODB文件名格式示例:03a01A.wav,取文件名最后一个字符
        code = filename.split('.')[0][-1]
        code_map = {
            'A': 'angry',
            'H': 'happy',
            'N': 'neutral',
            'S': 'sad',
            'U': 'surprise',
            'F': 'fear',
            'D': 'disgust'
        }
        return code_map.get(code, 'unknown')
    
  3. 找到代码中遍历文件夹读取文件的部分,改为遍历所有音频文件,调用上面的函数获取情感标签,替代原来按文件夹名称获取情感的逻辑

注意事项

  • 确认代码中数据集的路径配置正确,避免因路径错误导致的文件找不到问题
  • 如果代码有区分SAVEE和EMODB的逻辑,要确保对应的解析函数只对目标数据集生效,避免混淆

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:54:59