谷歌Colab挂载gdrive后如何读取压缩文件夹内的多分类图像并拆分数据集?
数据集读取与拆分方案
方法1:从已挂载的Google Drive读取
你当前的数据集是按类别分子文件夹存储的,优先使用Keras内置的image_dataset_from_directory接口,无需手动写标注逻辑,自动完成标签生成和数据集拆分:
代码示例
import tensorflow as tf from tensorflow.keras.utils import image_dataset_from_directory # 替换为你自己的数据集根目录路径(挂载GDrive后的路径) DATASET_PATH = "/content/drive/MyDrive/你的水果数据集根目录" IMG_SIZE = (224, 224) # 根据模型要求调整图像尺寸 BATCH_SIZE = 32 VAL_RATIO = 0.2 # 验证集占比20% RANDOM_SEED = 42 # 固定种子保证拆分结果可复现 # 读取训练集 train_ds = image_dataset_from_directory( DATASET_PATH, validation_split=VAL_RATIO, subset="training", seed=RANDOM_SEED, image_size=IMG_SIZE, batch_size=BATCH_SIZE ) # 读取验证集 val_ds = image_dataset_from_directory( DATASET_PATH, validation_split=VAL_RATIO, subset="validation", seed=RANDOM_SEED, image_size=IMG_SIZE, batch_size=BATCH_SIZE )
说明
- 接口会自动将子文件夹名称作为类别名,生成0~130的整数标签对应131个分类,可通过
train_ds.class_names查看类别与标签的对应关系 - 生成的
train_ds、val_ds是TensorFlow的Dataset格式,可直接喂入模型训练,读写效率远高于手动加载为numpy数组 - 如果你习惯用sklearn的拆分逻辑、需要得到numpy格式的
X_train/y_train,可参考以下手动读取代码:
import os import cv2 import numpy as np from sklearn.model_selection import train_test_split DATASET_PATH = "/content/drive/MyDrive/你的水果数据集根目录" IMG_SIZE = (224, 224) X = [] y = [] # 生成类别与索引的映射 class_list = sorted(os.listdir(DATASET_PATH)) class2idx = {cls: idx for idx, cls in enumerate(class_list)} # 遍历读取所有图像 for cls_name in class_list: cls_folder = os.path.join(DATASET_PATH, cls_name) for img_name in os.listdir(cls_folder): img = cv2.imread(os.path.join(cls_folder, img_name)) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img = cv2.resize(img, IMG_SIZE) X.append(img) y.append(class2idx[cls_name]) # 转为numpy数组并拆分 X = np.array(X) y = np.array(y) X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)
注:手动读取会将所有图像加载到内存,4万张图像可能占用较多内存,优先推荐第一种方法。
Colab连接Kaggle读取数据集说明
推荐程度:非常推荐
从GDrive读取数据集经常遇到传输速度不稳定的问题,且占用个人云盘空间,直接从Kaggle拉取数据集到Colab临时存储,读写速度更快,无需占用个人存储资源。
操作步骤
- 登录你的Kaggle账号,进入
设置页面,找到API板块,点击创建新令牌,会自动下载kaggle.json文件到本地。 - 在Colab中运行以下代码,上传刚才下载的
kaggle.json文件:
from google.colab import files files.upload()
- 配置Kaggle接口权限:
!mkdir -p ~/.kaggle !cp kaggle.json ~/.kaggle/ !chmod 600 ~/.kaggle/kaggle.json
- 进入你要下载的Kaggle数据集页面,复制数据集的下载命令,运行即可拉取数据集:
# 替换为对应数据集的下载命令 !kaggle datasets download -d 数据集作者/数据集名称
- 解压下载的压缩包即可直接使用:
# 替换为你下载的压缩包文件名 !unzip -q 下载的压缩包名.zip
内容的提问来源于stack exchange,提问作者WMD
相关产品推荐
相关产品推荐

