keras分类猫狗数据(上)数据预处理

keras分类猫狗数据(上)数据预处理
keras分类猫狗数据(中)使用CNN分类模型
keras分类猫狗数据(下)迁移学习
keras分类猫狗数据(番外篇)深度学习CNN连接SVM分类

数据来源:https://www.kaggle.com/c/dogs-vs-cats
在本部分数据预处理,下载并解压(如本人所有图片解压后位于E:/MLdata/kaggle_Dogsvs.Cats/train/)。

本文后续部分,将要取其中各1000张猫狗训练数据,各500张猫狗测试数据(共3000张),并分别放到类别文件夹中。最终如下结构。
这里写图片描述

1 .如下代码,获取所有猫狗文件路径,可以看出共分别有12500,12500猫狗图片。

import os

train='E:/MLdata/kaggle_Dogsvs.Cats/train/'

dogs=[train+i for i in os.listdir(train) if 'dog' in i]

cats=[train+i for i in os.listdir(train) if 'cat' in i]

print(len(dogs),len(cats))

12500 12500

2 . 如下代码,将训练用到 1000 × 2 1000\times2 1000×2张图片,测试的 500 × 2 500\times2 500×2张图片放置指定文件夹,共计 ( 1000 + 500 ) × 2 (1000+500)\times2 1000+500×2。读者可以充分使用 12500 × 2 12500\times2 12500×2提高分数。

import os
import shutil

def createDir(path):
    if not os.path.exists(path):
        try:
            os.makedirs(path)
        except:
            print("创建文件夹失败")
            exit(1)

path="E:/MLdata/kaggle_Dogsvs.Cats/min_trainfordata/"

createDir(path+"train/dogs")
createDir(path+"train/cats")
createDir(path+"test/dogs")
createDir(path+"test/cats")

for dog,cat in list(zip(dogs,cats))[:1000]:
    shutil.copyfile(dog,path+"train/dogs/"+os.path.basename(dog))
    print(os.path.basename(dog)+"操作成功")
    shutil.copyfile(cat, path + "train/cats/" + os.path.basename(cat))
    print(os.path.basename(cat) + "操作成功")
for dog, cat in list(zip(dogs, cats))[1000:1500]:
    shutil.copyfile(dog, path + "test/dogs/" + os.path.basename(dog))
    print(os.path.basename(dog) + "操作成功")
    shutil.copyfile(cat, path + "test/cats/" + os.path.basename(cat))
    print(os.path.basename(cat) + "操作成功")

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
图片分类是一个经典的计算机视觉问题。使用Keras可以很方便地实现这个问题。下面是一个简单的步骤: 1. 准备数据集:准备一组包含的图片数据集,并且给每张图片打上标签,即为0,为1。 2. 数据预处理:对数据进行预处理,包括图像大小调整、归一化等。 3. 构建模型:使用Keras构建卷积神经网络模型,包括卷积层、池化层、全连接层等。 4. 编译模型:编译模型,指定损失函数、优化器和评估指标。 5. 训练模型:使用训练集对模型进行训练,并在验证集上进行验证。 6. 模型评估:使用测试集对模型进行评估。 下面是一个简单的代码示例: ``` from keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense model = Sequential() model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3))) model.add(MaxPooling2D((2, 2))) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2))) model.add(Conv2D(128, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2))) model.add(Conv2D(128, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2))) model.add(Flatten()) model.add(Dense(512, activation='relu')) model.add(Dense(1, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy']) from keras.preprocessing.image import ImageDataGenerator train_datagen = ImageDataGenerator(rescale=1./255) test_datagen = ImageDataGenerator(rescale=1./255) train_generator = train_datagen.flow_from_directory( 'train', target_size=(150, 150), batch_size=20, class_mode='binary') validation_generator = test_datagen.flow_from_directory( 'validation', target_size=(150, 150), batch_size=20, class_mode='binary') history = model.fit_generator( train_generator, steps_per_epoch=100, epochs=30, validation_data=validation_generator, validation_steps=50) ``` 这段代码会构建一个包含卷积层、池化层、全连接层等的卷积神经网络模型,并使用ImageDataGenerator对数据进行预处理。在训练过程中,使用train_generator和validation_generator作为训练集和验证集进行训练和验证。最后,使用test_datagen对测试集进行预测,并计算模型的准确率。
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值