引言
为了所有想要应用深度学习技巧和计算机专业的人士设计的课程
深度学习的发展
准备
GPU 的准备
下载相应的数据
Then download dogscats.zip into that directory and unzip.
looking at the Dogs vs. Cats Kaggle competition
数据结构概览
1.切分验证集,训练集以及测试集
2.分别看这几个文件夹下面的文件结构是什么样的
使用CNN
本周的任务
建一个模型可以识别狗和猫,达到80%以上的准确率
基本配置
Use $ jupyter notebook to open a connection to the notebook GUI at port 8888. Recall the ip address for your instance we recorded earlier. In your browser, go to instanceIP:8888 to access the GUI, and login with password dl_course. Click on lesson1.ipynb.
from __future__ import division,print_function
import os, json
from glob import glob
import numpy as np
np.set_printoptions(precision=4, linewidth=100)
from matplotlib import pyplot as plt
import utils; reload(utils)
from utils import plots
定义文件夹路径
#path = "data/dogscats/"
path = "data/dogscats/sample/"
注意这里的utils是一个我们下载好的库,里面有一些常用的函数,我们可以用. reload(utils) 来更新我们的notebook如果我们对这个库有什么更新的话。
用训练好的VGG模型
使用别人训练好的模型,VGG16
理解vgg的建造方法很重要,他的数据大部分是单个物体的,也就是说vgg比较适合于单个物体的识别,比如猫呀狗呀,看看数据你就知道你用的别人的模型有什么好的和坏的地方。
punchline: state of the art custom model in 7 lines of code
现在我们可以开始:
# As large as you can, but no larger than 64 is recommended.
# If you have an older or cheaper GPU, you'll run out of memory, so will have to decrease this.
batch_size=64
# Import our class, and instantiate
from vgg16 import Vgg16# Import our class, and instantiate
from vgg16 import Vgg16
vgg = Vgg16()
# Grab a few images at a time for training and validation.
# NB: They must be in subdirectories named based on their category
batches = vgg.get_batches(path+'train', batch_size=batch_size)
val_batches = vgg.get_batches(path+'valid', batch_size=batch_size*2)
vgg.finetune(batches)
vgg.fit(batches, val_batches, nb_epoch=1)
我们可以用vgg来识别主要的imagenet 的类别(就是原来那个比赛的数据集里面有的类别)但是我们不能直接识别猫和狗因为原来那个比赛没有这个类别,然而我们可以看看他是怎么识别这些图像的。首先我们构造了一个vgg的对象;由于vgg是基于keras的,所以他可以直接识别图片和他的标签,用一个文件夹目录的结构,不同的类别必须被放在单独的文件夹中。
BTW,当Keras引用“类”时,并不意味着Python类,而是指标签的类别,例如“pug”或“tabby”。)批次只是一个常规的python迭代器。 每次迭代都会返回图像本身以及标签。
为了理解什么是batch,我们可以先看看一个batch长什么样子