【图像分类】实现猫狗图片的训练集和测试集的分类:python + Asirra

数据集下载地址为

Dogs vs. Cats | Kaggle

下载下来的图片包是,包含有猫狗的图片,但是命名方式就是以猫狗来命名的,所以我们可以很快将他们分类出来,并把他们以90%作为训练集,剩下的作为 测试集

前期准备工作:

  1. 下载数据集
  2. 在新建train和test文件夹
  3. 在train和test文件及里,再建cat和dog文件夹
  4. 执行代码

代码:

import shutil

import torch
import torch.nn as nn
import torchvision
import os
# 数据分类处理
## 提取文件夹内的名字
data_file = os.listdir('./data/train')
## 索引猫和狗的图片名字
dog_file = list(filter(lambda x: x[:3] == 'dog', data_file))
cat_file = list(filter(lambda x: x[:3] == 'cat', data_file))

## 移动图片
root = './data/train/'
for i in range(len(dog_file)):
    pic_path = os.path.join(root, dog_file[i + 1])
    # print(dog_file[i+1])
    # print('*******************************')
    # print(pic_path)
    if i < len(dog_file)*0.9 :
        obj_path = './data/train/dog/' + dog_file[i + 1]
    else:
        obj_path = './data/test/dog/' + dog_file[i + 1]
    shutil.move(pic_path, obj_path)

for i in range(len(cat_file)):
    pic_path = os.path.join(root, cat_file[i + 1])
    if i < len(cat_file)*0.9:
        obj_path = './data/train/cat/' + cat_file[i + 1]
    else:
        obj_path = './data/test/cat/' + cat_file[i + 1]
    shutil.move(pic_path, obj_path)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个常见的机器学习问题。下面是一个基本的步骤: 1. 准备数据集,包括图片。 2. 将数据集分成训练集测试集。 3. 使用Python中的深度学习框架,如Tensorflow或PyTorch,构建卷积神经网络模型。 4. 训练模型,使用训练集进行训练,并使用测试集评估模型的性能。 5. 对新的图片进行预测,检查模型的准确性。 这是一个简单的代码示例,使用Keras库实现图片分类: ``` python import tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGenerator # 设置训练和测试数据路径 train_dir = 'path/to/training/dataset' test_dir = 'path/to/test/dataset' # 设置输入图像的大小和批量大小 IMG_SIZE = 160 BATCH_SIZE = 32 # 数据增强 train_datagen = ImageDataGenerator( rescale = 1./255, rotation_range = 20, width_shift_range = 0.2, height_shift_range = 0.2, shear_range = 0.2, zoom_range = 0.2, horizontal_flip = True, fill_mode = 'nearest') # 从目录中读取训练和测试数据 train_generator = train_datagen.flow_from_directory( train_dir, target_size = (IMG_SIZE, IMG_SIZE), batch_size = BATCH_SIZE, class_mode = 'binary') test_datagen = ImageDataGenerator(rescale = 1./255) test_generator = test_datagen.flow_from_directory( test_dir, target_size = (IMG_SIZE, IMG_SIZE), batch_size = BATCH_SIZE, class_mode = 'binary') # 构建卷积神经网络模型 model = tf.keras.models.Sequential([ tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(IMG_SIZE, IMG_SIZE, 3)), tf.keras.layers.MaxPooling2D(2, 2), tf.keras.layers.Conv2D(64, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2, 2), tf.keras.layers.Conv2D(128, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2, 2), tf.keras.layers.Conv2D(128, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2, 2), tf.keras.layers.Flatten(), tf.keras.layers.Dense(512, activation='relu'), tf.keras.layers.Dense(1, activation='sigmoid') ]) # 编译模型 model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) # 训练模型 history = model.fit( train_generator, steps_per_epoch = train_generator.n // BATCH_SIZE, epochs = 40, validation_data = test_generator, validation_steps = test_generator.n // BATCH_SIZE) # 对新的图片进行预测 import numpy as np from tensorflow.keras.preprocessing import image img_path = 'path/to/image' img = image.load_img(img_path, target_size=(IMG_SIZE, IMG_SIZE)) img_array = image.img_to_array(img) img_array = tf.expand_dims(img_array, 0) prediction = model.predict(img_array) if prediction < 0.5: print('') else: print('') ``` 希望这可以帮到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值