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

CNN图像字幕项目中字典字符串键(图片名)引发索引错误的解决方法

问题分析

触发IndexError的核心原因是photos列表里存在all_features字典中没有的键,或者键的格式不匹配(比如文件名带换行符、大小写不一致、后缀名差异)。

解决步骤
  • 先排查不匹配的键
    先在代码里加个检查,把不存在的键打印出来,快速定位问题:

    def load_features(photos):
        all_features = load(open('features.p', 'rb'))
        # 找出所有不在特征字典里的图片名
        missing_keys = [k for k in photos if k not in all_features]
        if missing_keys:
            print(f"这些图片名在features.p里找不到: {missing_keys}")
        # 只保留存在的键
        features = {k: all_features[k] for k in photos if k in all_features}
        return features
    
  • 处理文件名格式问题
    从文本文件读取图片名时,很容易带换行符、空格,或者和特征字典里的键大小写/后缀不一致,统一处理一下:

    def load_features(photos):
        all_features = load(open('features.p', 'rb'))
        processed_photos = []
        for k in photos:
            # 去掉前后的空格、换行符
            cleaned_k = k.strip()
            # 统一转成小写,避免大小写不匹配
            cleaned_k = cleaned_k.lower()
            # 确保后缀是.jpg(如果生成特征时用的是其他后缀,对应调整)
            if not cleaned_k.endswith('.jpg'):
                cleaned_k += '.jpg'
            processed_photos.append(cleaned_k)
        
        # 再次检查缺失的键
        missing_keys = [k for k in processed_photos if k not in all_features]
        if missing_keys:
            print(f"这些图片名在features.p里找不到: {missing_keys}")
        
        features = {k: all_features[k] for k in processed_photos if k in all_features}
        return features
    
  • 核对特征文件的键格式
    还要确认生成features.p的时候,用的图片名格式和你现在读取的是否一致——比如生成特征时有没有去掉后缀、或者修改过文件名(比如只取了文件名的前缀)。如果生成时的键不带.jpg,那你读取时也要去掉后缀再匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:30:12