【问题标题】:CNN-Divide images into training/validation/testingCNN-将图像划分为训练/验证/测试
【发布时间】:2019-06-13 06:20:20
【问题描述】:

我正在尝试将我的图像(兔子和狗的数据集)划分为x_train、x_val、y_train、y_val,并进行测试。

以下是我所做的:

我将每个班级(狗/兔子)的照片放在两个文件夹内的单独文件夹中:培训和测试。

训练目录-> 兔子目录-> 兔子图片

训练目录->小狗目录->小狗图片

测试目录-> 兔子目录-> 兔子图片

测试目录->小狗目录->小狗图片

我使用以下代码从文件夹中获取图像:

training_data = train_datagen.flow_from_directory('./images/train',
                                             target_size = (28, 28),
                                             batch_size = 86,
                                             class_mode = 'binary',
                                             color_mode='rgb',
                                             classes=None)


test_data = test_datagen.flow_from_directory('./images/test',
                                        target_size = (28, 28),
                                        batch_size = 86,
                                        class_mode = 'binary',
                                        color_mode='rgb',
                                        classes=None)

这给了我以下输出:

找到属于 2 个类别的 152 张图片。

找到属于 2 个类别的 23 张图片。

问题 1:我不确定如何在此处定义我的标签 (y_val/ y_train) 或是否需要(但似乎大多数型号都有 y_val/y_train)。

问题 2:我尝试运行

x_train, x_val = train_test_split(training_data, test_size=0.1)

为了至少将我的训练数据拆分为验证/训练,但是当我尝试运行我的模型时,它给了我以下错误:

history=classifier.fit_generator(x_train,
                     steps_per_epoch = (8000 / 86),
                     epochs = 2,
                     validation_data = x_val,
                     validation_steps = 8000/86,
                     callbacks=[learning_rate_reduction])

ValueError: validation_data 应该是一个元组 (val_x, val_y, val_sample_weight) 或 (val_x, val_y)。

找到:[(array([[[[0.5058095,0.46913707,0.42369673],...

【问题讨论】:

    标签: python-3.x machine-learning deep-learning conv-neural-network data-science


    【解决方案1】:

    问题 1:

    根据我的经验,命名 y,x 变量没有明显的限制。例如,在this 内核中,一个人使用y_train, y_test 名称作为标签,here 一个人使用train_Y。有一条规则是你应该给出显示变量的名称。

    问题 2:

    我建议在ImageDataGenerator (doc) 中使用validation_split 参数来设置为验证保留的图像的一部分。之后,我建议在flow_from_directory (doc) 中使用subset 参数来定义training_generator 和validation generator 变量。 (我想指出 flow_from_directory 返回生成器,而不是数据)。

    所以你的代码看起来像:

    data_generator = ImageDataGenerator(
        validation_split=0.2,
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True,
    )
    
    train_generator = data_generator.flow_from_directory(
        './images/train',
        target_size = (28, 28),
        batch_size = 86,
        class_mode = 'binary',
        color_mode='rgb',
        classes=None, subset="training"
    )
    
    validation_generator = data_generator.flow_from_directory(
        './images/train',
        target_size = (28, 28),
        batch_size = 86,
        class_mode = 'binary',
        color_mode='rgb',
        classes=None, subset="validation"
    )
    
    history=classifier.fit_generator(
        train_generator,
        steps_per_epoch = (8000 / 86),
        epochs = 2,
        validation_data = validation_generator,
        validation_steps = 8000/86,
        callbacks=[learning_rate_reduction]
    )
    

    【讨论】:

    • 非常感谢伙计!知道如何在生成器的代码之后使用 seaborn.heatmap 运行混淆矩阵吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 2016-07-28
    • 2019-10-15
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多