m0_75279073 2024-06-12 15:19 采纳率: 0%
浏览 2
已结题

自制cifar10数据集,生成的batch缺少key:b

查询输出的dict_keys([data, labels, filenames,batch_label])
而不是([b'data', b'labels', b'filenames',b'batch_label'])
以下是制作cifar10数据集的参考
https://blog.csdn.net/p609354432/article/details/118312563?spm=1001.2014.3001.5501

期望是([b'data', b'labels', b'filenames',b'batch_label'])

  • 写回答

21条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-12 15:19
    关注
    获得0.60元问题酬金

    引自免费微信小程序:皆我百晓生

    要解决在加载CIFAR-10数据集时遇到的字典键名不匹配的问题,首先需要理解Python处理字节串(bytes)和字符串(str)的区别。在Python 3中,从文件读取的数据默认是字节串类型,而我们通常在编程中使用的变量名和键名是字符串类型。

    在你提供的链接中,处理CIFAR-10数据集的代码可能使用了pickle模块来读取数据文件。pickle模块在读取数据时会返回字节类型的键名,例如b'data'b'labels'等。如果你期望的是字符串类型的键名(如'data''labels'),则需要进行相应的转换。

    下面是一个修改后的代码示例,用于从CIFAR-10数据文件中读取数据并转换字节类型的键名为字符串类型:

    import pickle
    import numpy as np
    
    def load_batch(filename):
        """ load single batch of cifar """
        with open(filename, 'rb') as f:
            datadict = pickle.load(f, encoding='latin1')
            # Convert byte keys to string keys
            datadict = {key.decode('utf-8'): value for key, value in datadict.items()}
            X = datadict['data']
            Y = datadict['labels']
            X = X.reshape(10000, 3, 32, 32).transpose(0,2,3,1).astype("uint8")
            Y = np.array(Y)
            return X, Y
    
    # Example usage
    train_data = []
    train_labels = []
    for i in range(1,6):
        f = './cifar-10-batches-py/data_batch_' + str(i)
        data, labels = load_batch(f)
        train_data.append(data)
        train_labels.append(labels)
    
    # Combine all training batches
    train_data = np.concatenate(train_data)
    train_labels = np.concatenate(train_labels)
    

    这段代码的关键在于使用字典推导式将所有字节类型的键名转换为字符串类型:

    datadict = {key.decode('utf-8'): value for key, value in datadict.items()}
    

    这样,无论原始数据中的键名是字节类型还是字符串类型,你都能统一地使用字符串类型的键名来访问数据。

    确保你已经正确安装了所需的库,并且CIFAR-10数据集已经被下载并放置在正确的目录下。上述代码假设数据文件位于当前目录下的./cifar-10-batches-py/目录中。根据实际情况调整路径即可。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月20日
  • 修改了问题 6月12日
  • 创建了问题 6月12日

悬赏问题

  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥100 解决数据不连续出现问题
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,
  • ¥15 angular项目错误