【问题标题】:How to create Cifar-10 subset?如何创建 Cifar-10 子集?
【发布时间】:2020-10-14 06:50:24
【问题描述】:

我想使用更少的训练数据样本来训练深度神经网络,以减少测试我的代码的时间。我想知道如何使用 Keras TensorFlow 对 Cifar-10 数据集进行子集化。我有以下代码用于训练 Cifar-10 完整数据集。

#load and prepare data
if WhichDataSet == 'CIFAR10':
    (x_train, y_train), (x_test, y_test) = tensorflow.keras.datasets.cifar10.load_data()
else:
    (x_train, y_train), (x_test, y_test) = tensorflow.keras.datasets.cifar100.load_data()
num_classes = np.unique(y_train).shape[0]
K_train = x_train.shape[0]
input_shape = x_train.shape[1:]
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
y_train = tensorflow.keras.utils.to_categorical(y_train, num_classes)
y_test = tensorflow.keras.utils.to_categorical(y_test, num_classes)

【问题讨论】:

  • 如果我理解正确,Cifar Loader 返回 numpy 数组的元组。如果您想将较少数量的图像放入网络中,可以使用 numpy 对它们进行切片。

标签: python tensorflow keras deep-learning tensorflow-datasets


【解决方案1】:

使用 pandas 模块创建一个数据框并相应地对其进行采样。

import pandas as pd
(train_images1, train_labels), (test_images1, test_labels) = datasets.cifar10.load_data()

# Normalize pixel values to be between 0 and 1
train_images, test_images = train_images1 / 255.0, test_images1 / 255.0

#creating the validation set from the training set
df = pd.DataFrame(list(zip(train_images, train_labels)), columns =['Image', 'label']) 
val = df.sample(frac=0.2)
X_train = np.array([ i for i in list(val['Image'])])
y_train = np.array([ [i[0]] for i in list(val['label'])])

val = df.sample(frac=0.2) 行抽取了总数据的 0.20%。

如果您想要特定数量的数据记录,您可以使用val = df.sample(n=5000),方法是相应地设置n 值。

如果您希望每次运行代码都获得相同的结果,您可以使用random_state = 0。例如:

val = df.sample(n=5000,random_state = 0)

【讨论】:

    【解决方案2】:

    根据标签创建子集

    创建不包括少数标签的数据集子集。例如,要创建一个只有前五个类别标签的新训练数据集,您可以使用以下代码

    subset_x_train = x_train[np.isin(y_train, [0,1,2,3,4]).flatten()]
    subset_y_train = y_train[np.isin(y_train, [0,1,2,3,4]).flatten()]
    

    创建子集而不考虑标签

    要创建 10% 的训练数据子集,您可以使用以下代码

    # Shuffle first (optional)
    idx = np.arange(len(x_train))
    np.random.shuffle(idx)
    
    # get first 10% of data
    subset_x_train = x_train[:int(.10*len(idx))]
    subset_y_train = y_train[:int(.10*len(idx))]
    

    x_testy_test 重复相同的操作以获取测试数据的子集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-04
      • 2017-05-15
      • 2021-08-29
      • 1970-01-01
      • 2018-06-22
      • 2015-11-13
      • 2022-12-04
      • 2017-12-19
      相关资源
      最近更新 更多