【问题标题】:ValueError: Input arrays should have the same number of samples as target arrays. Found 1600 input samples and 1800 target samplesValueError:输入数组应具有与目标数组相同数量的样本。找到 1600 个输入样本和 1800 个目标样本
【发布时间】:2018-05-05 05:11:11
【问题描述】:

我在这里按照本教程进行图像分类。 链接:Keras image classification

我引用的代码是Bottleneck feature 我面临的问题: 1.原教程只有两个类,但我正在尝试做多类分类。 我的文件结构如下:

data
  train
    class1
    class2
    class3
    class4
  test
    class1
    class2
    class3
    class4

原代码中以下代码用于二分类。

train_labels = np.array(
    [0] * (nb_train_samples / 2) + [1] * (nb_train_samples / 2))

validation_data = np.load(open('bottleneck_features_validation.npy'))
validation_labels = np.array(
    [0] * (nb_validation_samples / 2) + [1] * (nb_validation_samples / 2))

我明白,为了进行多类分类,我必须将其更改为:

train_labels = np.array(
    [0] * (class0_train_size) + [1] * (class1_train_size)+ [2] * (class2_train_size) + [3] * (class3_train_size))

validation_data = np.load(open('bottleneck_features_validation.npy'))
validation_labels = np.array(
    [0] * (class0_test_size) + [1] * (class1_test_size)+ [2] * (class2_test_size) + [3] * (class3_test_size))

我的问题是我的火车测试规模因不同的班级而异,所以我很难对它们进行硬编码。有没有办法可以根据文件夹内的实际图像数量动态分配它们,而不是硬编码大小?感谢您的慷慨帮助!

【问题讨论】:

    标签: python numpy keras


    【解决方案1】:

    获得不同类流行的一种可能性是使用 os 库。例如对于测试类,您可以首先使用以下命令获取测试文件夹中的类列表:

    import os
    
    abs_path = "/bla/bla/test"
    test_classes = [d for d in os.listdir(abs_path)]
    

    您可以获取每个类目录中的文件数,然后使用字典或列表存储它们:

    test_class_sizes = dict()
    for c in classes:
        test_class_folder = os.path.join(abs_path, c)
        test_class_sizes[c] = len([d for d in os.listdir(test_class_folder)])
    

    最后你使用这个字典来构建你的平面标签列表:

    validation_labels = [[k]*class_size for k, class_size in enumerate(class_sizes)]
    flattened_validatoin_labels = [label for class_list in validation_labels for label in class_list]
    

    【讨论】:

    • 谢谢,您介意澄清一下什么是 class_list 以及如何构建它吗?谢谢!
    • 对不起,我搞砸了那条线。我编辑了它。 Class_list 只是 validation_labels 的子列表
    猜你喜欢
    • 2017-10-26
    • 2020-08-31
    • 2023-03-10
    • 2019-05-30
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 2019-05-22
    相关资源
    最近更新 更多