这次的代码比较长,我是用的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的小批量的数据。至此数据就准备好了,我们可以开始下一步。这个问题就是一个二分类问题,而且是平衡的。