有什么简单的方法来获取 imagenet 数据集以在张量流中训练自定义模型?

Jer*_*rry 5 python tensorflow

在我的实验中,我想在imagenet数据集上训练我的自定义模型。为简单起见,我对 10/100 类分类任务感兴趣。但是,直接下载imagenet数据集tfds需要大量的硬盘空间。是否有任何解决方法可以对imagenet数据集进行子集化,以便子集化的imagenet数据集适合 10/100 类分类任务?有谁知道有什么方法可以实现这一点吗?任何想法?

总的来说,cifar10使用cifar100TensorFlow 的函数式 api 非常方便。但是,在我的实验中,我想在 上训练我自己的模型imagenet。我想避免imagenet直接下载数据集,相反,我想要一些计算量较少的方法,这样我就可以在子集imagenet(10 或 100 类分类)上训练我的自定义模型。有什么办法可以做到这一点吗?有什么想法吗?

我尝试下载imagenet

这是我尝试imagenet在本地下载数据集,然后在数据集上训练我的自定义模型imagenet。但下载和加载数据进行训练非常耗时。但这就是我所做的:

import keras
import tensorflow as tf
import tensorflow_datasets as tfds

## fetch imagenet dataset directly
imagenet = tfds.image.Imagenet2012()

## describe the dataset with DatasetInfo
C = imagenet.info.features['label'].num_classes
n_train = imagenet.info.splits['train'].num_examples
n_validation = imagenet.info.splits['validation'].num_examples

assert C == 1000
assert n_train == 1281167
assert n_validation == 50000

imagenet.download_and_prepare()   ## need more space in harddrive

# load imagenet data from disk as tf.data.Datasets
datasets = imagenet.as_dataset()
train_data, validation_data= datasets['train'], datasets['validation']
assert isinstance(train_data, tf.data.Dataset)
assert isinstance(validation_data, tf.data.Dataset)
Run Code Online (Sandbox Code Playgroud)

如果我这样做,下载起来会很耗时,并且需要更多的硬盘空间。有没有更简单的方法对imagenet数据集进行子集化并从 TensorFlow 获取它?有谁知道imagenet为 10/100 分类任务获取较小数据集的更简单方法?有什么想法吗?

期望的输出

通常我们可以从得到cifar10, 我们可以将 imagenet 数据集子集到 (200k ~ 500K) 范围内吗?有没有更简单的方法来获取 imagenet 数据集来训练数据的自定义模型?任何想法?cifar100tf.keras.datasetsimagenet

Jer*_*rry 5

我自己想出来了。我需要使用tiny_imagenet_200

import os, sys, wget
from zipfile import ZipFile

url = 'http://cs231n.stanford.edu/tiny-imagenet-200.zip'
tiny_imgdataset = wget.download('http://cs231n.stanford.edu/tiny-imagenet-200.zip', out = os.getcwd())
for file in os.listdir(os.getcwd()):
    if file.endswith(".zip"):
        zip = ZipFile(file)
        zip.extractall()
    else:
        print("not found")
Run Code Online (Sandbox Code Playgroud)