如何从 google colab 的压缩文件夹中读取/导入训练和测试图像以进行多分类? gdrive 已安装到 gcolab
Posted
技术标签:
【中文标题】如何从 google colab 的压缩文件夹中读取/导入训练和测试图像以进行多分类? gdrive 已安装到 gcolab【英文标题】:How to read/import training and testing images for multiclassification from a zipped folder in google colab? gdrive already mounted to gcolab 【发布时间】:2021-11-20 03:29:33 【问题描述】:我对机器学习和深度学习还很陌生。我正在做一个学生项目,其中我正在做多分类图像处理。因为,我没有推荐的用于 tensorflow 的 nVIDIA gpu(也不能在 atm 购买),所以我使用 Google colab 和他们的虚拟 GPU。
我已将我的 gdrive 安装到 colab:
如您所见,它显示了训练集中的 131 个类/子文件夹。 131 是不同水果的名称 - 每个水果都有 1 个专用子文件夹。这些子文件夹中总共存储了 40,000 张图像。如下所示:
每个水果子文件夹都有与该类关联的图像,图像被命名为 0_100.jpg、1_100.jpg、2_100.jpg.....
如何读取这些图像并将其拆分为 X-train 和 X_val,以及如何创建关联的 y_train 目标名称。到目前为止,我只在 jupyter 实验室中使用过 sklearn 和 keras 数据集,它们已经排序和命名,我只需要导入它们。
由于数据集是从 kaggle 下载的,你认为直接从 colab 连接到 kaggle 并创建一个 json 文件会更好吗?...就像这个链接: https://towardsdatascience.com/an-informative-colab-guide-to-load-image-datasets-from-github-kaggle-and-local-machine-75cae89ffa1e
请有人建议如何做到这一点或指出一些相关的例子......非常感谢。
【问题讨论】:
【参考方案1】:您可以使用 PyTorch 中的 DataLoader,例如:
import torch
import torchvision
from torchvision import transforms
train_transforms = transforms.Compose([
# ...
transforms.ToTensor() ])
train_dir = '/train_test/Training/'
# As you are going to split Training set into Train and Val sets, "Training" is your full_dataset
# Loading dataset from directory
full_dataset = torchvision.datasets.ImageFolder(train_dir, train_transforms)
# Splitting into Train and Val
train_size = int(0.8 * len(full_dataset))
val_size = len(full_dataset) - val_size
train_dataset, val_dataset = torch.utils.data.random_split(full_dataset, [train_size, val_size])
# Creating a data_loader
train_dataloader = torch.utils.data.DataLoader( train_dataset )
val_dataloader = torch.utils.data.DataLoader( val_dataset )
如果您通过其他方法将数据集拆分为 Train 和 Val,或者不想使用 Val 集,请使用 torchvision.datasets.ImageFolder
加载 train_dataset
并直接创建数据加载器并跳过拆分部分。
它会自动创建X
(输入图像)和Y
(标签)集。然后,在训练阶段,您可以通过以下方式使用train_dataloader
:
# ...
for inputs, labels in tqdm(train_dataloader):
inputs = inputs.to(device) # Your X-train
labels = labels.to(device) # Your y_train
# ...
它适用于您具有以下结构的情况(如果我清楚地了解您的数据存储方式):
|-train_test
|-Test
|-Training
|-Apple Braeburn
| |-0_100.jpg
| |-1_100.jpg
| |-...
|-Apple Crimson Snow
| |-0_100.jpg
| |-1_100.jpg
| |-...
|-...
【讨论】:
非常感谢您的回复 :) 。我希望用 Keras/tensorflow 来做,但我想我可以使用 Pytorch(以前从未使用过,但它看起来很简单......谢谢)......所以,基本上输入 = X_train 和标签 = y_train 和我应该对我的测试文件夹执行相同的操作并获取 X_test 和 y_test.... 是输入和标签 numpy 数组,我可以将其用于训练/测试 CNN/或类似模型的输入,还是需要将它们转换为 nparrays? ? @Wendy,这样inputs
和labels
被转换为张量(transforms.Compose
),适合像preds = model(inputs)
和loss_value = loss(preds, labels)
一样被输入到您的模型中迭代。对于测试阶段,您应该以相同的方式加载Test
设置(不要忘记禁用梯度以进行测试)。所有这些,以防您使用torch
。以上是关于如何从 google colab 的压缩文件夹中读取/导入训练和测试图像以进行多分类? gdrive 已安装到 gcolab的主要内容,如果未能解决你的问题,请参考以下文章
使用Google Colab时如何从Google drive中加载自定义的包模型和数据集
如何从 Google Colab 下载多个文件或整个文件夹?