深度学习4:卷积神经网kaggle猫狗分类(1)

写在最前面

这次的代码比较长,我是用的win10去运行的,所以代码修改后针对我的电脑可以运行,会与原版的代码有区别,另外数据集上,我建议直接到csdn的下载去下,搜kaggle猫狗很容易就能找到,感谢分享的大哥。主要是官网下载还必须填电话之类验证,实在是太麻烦。

具体代码分析

import keras
keras.__version__
import os, shutil

导入keras,看看版本。导入os和shutil来文件处理。

original_dataset_dir = 'C:\\Users\\liuchen\\Documents\\kaggle\\kaggle_original_data'

base_dir = 'C:\\Users\\liuchen\\Documents\\kaggle\\\kaggle\\cats_and_dogs_small'
os.makedirs(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.makedirs(test_dir)

想要熟练完成训练相关操作,这类对文件处理的事情是必不可少的技能。首先,把下载好的数据集放到喜欢的路径中,然后创建另一个文件夹放截取的图片,之后不停创建子目录。这里为了避免报错,我把函数换成了makedirs。另外,windows的路径最好用双斜线表示,以免报错。

train_cats_dir = os.path.join(train_dir, 'cats')
os.makedirs(train_cats_dir)

train_dogs_dir = os.path.join(train_dir, 'dogs')
os.makedirs(train_dogs_dir)

validation_cats_dir = os.path.join(validation_dir, 'cats')
os.makedirs(validation_cats_dir)

validation_dogs_dir = os.path.join(validation_dir, 'dogs')
os.makedirs(validation_dogs_dir)

test_cats_dir = os.path.join(test_dir, 'cats')
os.makedirs(test_cats_dir)

test_dogs_dir = os.path.join(test_dir, 'dogs')
os.makedirs(test_dogs_dir)

这里同样,在训练,评估,测试集里分别创建了猫和狗的目录

fnames = ['cat.{}.jpg'.format(i) for i in range(1000)]
for fname in fnames:
    src = os.path.join(original_dataset_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)]
for fname in fnames:
    src = os.path.join(original_dataset_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)]
for fname in fnames:
    src = os.path.join(original_dataset_dir, fname)
    dst = os.path.join(test_cats_dir, fname)
    shutil.copyfile(src, dst)
    
fnames = ['dog.{}.jpg'.format(i) for i in range(1000)]
for fname in fnames:
    src = os.path.join(original_dataset_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)]
for fname in fnames:
    src = os.path.join(original_dataset_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)]
for fname in fnames:
    src = os.path.join(original_dataset_dir, fname)
    dst = os.path.join(test_dogs_dir, fname)
    shutil.copyfile(src, dst)

用shutil来复制想要的图片。我们可以清晰地看到,三个文件夹里分别是1000,500,500的小批量的数据。至此数据就准备好了,我们可以开始下一步。这个问题就是一个二分类问题,而且是平衡的。

你可能感兴趣的:(深度学习)