猫狗大战 dogs-vs-cats
下面展示一些
内联代码片
。
"""
2.1.猫狗大战 dogs-vs-cats (创建目录及分配图像)
"""
import os, shutil
original_datasets_dir ='F:\datasets\dogs-vs-csts\dogs-vs-csts 数据集' # 原始数据集解压目录的路径
base_dir = 'F:\datasets\dogs-vs-csts\猫狗大战' # 保存较小数据集的目录 (创建目录)
os.mkdir(base_dir)
train_dir = os.path.join(base_dir, 'train') # 划分后的训练集
os.mkdir(train_dir)
validation_dir = os.path.join(base_dir, 'validation') # 划分后的验证集
os.mkdir(validation_dir)
test_dir = os.path.join(base_dir, 'test') # 划分后的测试集
os.mkdir(test_dir)
train_cats_dir = os.path.join(train_dir, 'cats') # 猫的训练图像目录
os.mkdir(train_cats_dir)
train_dogs_dir = os.path.join(train_dir, 'dogs') # 狗的训练图像目录
os.mkdir(train_dogs_dir)
validation_cats_dir = os.path.join(validation_dir, 'cats') # 猫的验证图像目录
os.mkdir(validation_cats_dir)
validation_dogs_dir = os.path.join(validation_dir, 'dogs') # 狗的验证图像目录
os.mkdir(validation_dogs_dir)
test_cats_dir = os.path.join(test_dir, 'cats') # 猫的测试图像目录
os.mkdir(test_cats_dir)
test_dogs_dir = os.path.join(test_dir, 'dogs') # 狗的测试图像目录
os.mkdir(test_dogs_dir)
fnames = ['cat.{}.jpg'.format(i) for i in range(1000)] # 猫的训练集:将前1000张猫的图像复制到train_cats_dir
for fname in fnames:
src = os.path.join(original_datasets_dir, fname)
dst = os.path.join(train_cats_dir, fname)
shutil.copyfile(src, dst)
fnames = ['cat.{}.jpg'.format(i) for i in range(1000, 1500)] # 毛的验证集:将接下来的500张猫的图像复制到validation_cats_dir
for fname in fnames:
src = os.path.join(original_datasets_dir, fname)
dst = os.path.join(validation_cats_dir, fname)
shutil.copyfile(src, dst)
fnames = ['cat.{}.jpg'.format(i) for i in range(1500, 2000)] # 猫的测试集:将接下来的500张猫的图像复制到test_cats_dir
for fname in fnames:
src = os.path.join(original_datasets_dir, fname)
dst = os.path.join(test_cats_dir, fname)
shutil.copyfile(src, dst)
fnames = ['dog.{}.jpg'.format(i) for i in range(1000)] # 狗的训练集:将前1000张狗的图像复制到train_dogs_dir
for fname in fnames:
src = os.path.join(original_datasets_dir, fname)
dst = os.path.join(train_dogs_dir, fname)
shutil.copyfile(src, dst)
fnames = ['dog.{}.jpg'.format(i) for i in range(1000, 1500)] # 狗的验证集:将接下来的500张狗的图像复制到validation_cdogs_dir
for fname in fnames:
src = os.path.join(original_datasets_dir, fname)
dst = os.path.join(validation_dogs_dir, fname)
shutil.copyfile(src, dst)
fnames = ['dog.{}.jpg'.format(i) for i in range(1500, 2000)] # 狗的测试集将前1000张狗的图像复制到test_dogs_dir
for fname in fnames:
src = os.path.join(original_datasets_dir, fname)
dst = os.path.join(test_dogs_dir, fname)
shutil.copyfile(src, dst)
print('total training cat images:', len(os.listdir(train_cats_dir))) # 猫的训练图像张数 1000
print('total training dog images:', len(os.listdir(train_dogs_dir))) # 狗的训练图像张数 1000
print('total validation cat images:', len(os.listdir(validation_cats_dir))) # 猫的验证图像张数 500
print('total validation dog images:', len(os.listdir(validation_dogs_dir))) # 狗的验证图像张数 500
print('total test cat images:', len(os.listdir(test_cats_dir))) # 狗的测试图像张数 500
print('total test dog images:', len(os.listdir(test_dogs_dir))) # 狗的测试图像张数 500
"""
2.2.猫狗大战 dogs-vs-cats
"""
import os
base_dir = 'F:\datasets\dogs-vs-csts\猫狗大战' # 保存较小数据集的目录
train_dir = os.path.join(base_dir, 'train') # 划分后的训练集
validation_dir = os.path.join(base_dir, 'validation') # 划分后的验证集
test_dir = os.path.join(base_dir, 'test') # 划分后的测试集
train_cats_dir = os.path.join(train_dir, 'cats') # 猫的训练集
# 1.将猫狗分类的小型卷积神经网络实例化
from keras import models
from keras import layers
model = models.Sequential()
model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(150, 150, 3))) # 3D
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(128, (3,3), activation='relu'))
model.add(layers.MaxPooling2D((2