加载cifar10数据集先后报SSL和权限错误如何解决
正确加载CIFAR-10数据集的解决方案
方案1:修复SSL报错直接调用官方接口(最便捷)
第一个SSL证书验证失败是因为目标站点的证书信任问题,只需在加载数据前添加两行代码关闭SSL验证即可直接下载加载,无需手动下载数据集:
import ssl # 临时关闭全局SSL验证 ssl._create_default_https_context = ssl._create_unverified_context from tensorflow.keras import datasets (X_train, y_train), (X_test, y_test) = datasets.cifar10.load_data()
方案2:手动下载后的正确加载方法
你之前的操作存在两处问题:一是修改了下载文件的默认名称,keras原生load_data会默认查找名为cifar-10-python.tar.gz的文件,你重命名后会导致文件识别失败;二是系统用户目录的权限限制触发了PermissionError。可按以下步骤修复:
- 第一步:修复权限问题
右键点击C:\Users\SAHAN\.keras\datasets文件夹,选择「属性」-「安全」,给当前登录用户添加「完全控制」权限,保存后生效。如果仍有权限报错,可将下载的压缩包移动到你自己的项目目录下,避免系统目录的权限限制。 - 第二步:两种加载方式二选一
- 继续使用keras原生接口:将你下载的压缩包重命名回原本的
cifar-10-python.tar.gz,放到datasets目录下直接调用datasets.cifar10.load_data()即可 - 自定义代码直接读取(兼容性最高,无需依赖keras的路径规则):
- 继续使用keras原生接口:将你下载的压缩包重命名回原本的
import pickle import tarfile import numpy as np def load_cifar10(tar_path): with tarfile.open(tar_path, 'r:gz') as tar: # 加载训练集批次 X_train, y_train = [], [] for i in range(1,6): batch_file = tar.extractfile(f'cifar-10-batches-py/data_batch_{i}') batch_data = pickle.load(batch_file, encoding='latin1') X_train.append(batch_data['data']) y_train.append(batch_data['labels']) X_train = np.concatenate(X_train).reshape(-1,3,32,32).transpose(0,2,3,1) y_train = np.concatenate(y_train).reshape(-1,1) # 加载测试集 test_file = tar.extractfile('cifar-10-batches-py/test_batch') test_data = pickle.load(test_file, encoding='latin1') X_test = test_data['data'].reshape(-1,3,32,32).transpose(0,2,3,1) y_test = np.array(test_data['labels']).reshape(-1,1) return (X_train, y_train), (X_test, y_test) # 替换为你的压缩包实际路径,比如放在项目根目录就写相对路径 (X_train, y_train), (X_test, y_test) = load_cifar10('./cifar-10-python.tar.gz')
内容的提问来源于stack exchange,提问作者Sahan
相关产品推荐
相关产品推荐

