使用resnet34训练性别识别模型
在训练之前首先要做的就是收集数据,数据是使用 GoogleImageDownloader 工具自动爬取的,在Google上爬了大概3500张图片,里面有些图片质量不够好,删除了之后大概还有2400张左右。
具体代码:
import sysimport os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
sys.path.append("/Volumes/05/jupyter/fastai")
from fastai.imports import *
from fastai.torch_imports import *
from fastai.transforms import *
from fastai.conv_learner import *
from fastai.model import *
from fastai.dataset import *
from fastai.sgdr import *
from fastai.plots import *
PATH = 'data/malefemale/'sz = 224
# 使用resnet34model
arch = resnet34
data = ImageClassifierData.from_paths(PATH,tfms=tfms_from_model(arch, sz))
learn = ConvLearner.pretrained(arch, data, precompute=True)
# 第一次轻微训练最后一层
learn.fit(0.01, 3) learn.fit(0.05, 5, cycle_len=1, cycle_mult=2)

在这一次的训练中,发现模型损失还有0.29,模型在验证上的正确率才到93%,模型还有优化的空间。
下面再一次构造模型并训练:
tfms = tfms_from_model(resnet34, sz,aug_tfms=transforms_side_on, max_zoom=1.1)
# 通过转变角度,增加样本
data = ImageClassifierData.from_paths(PATH, tfms=tfms)
learn = ConvLearner.pretrained(resnet34, data, precompute=True)
learn.fit(0.01, 3)# 第一次训练最后一层,试探性
learn.fit(0.05, 5, cycle_len=1, cycle_mult=2) # 发现第一次训练有效果,在进一步训练
learn.precompute = False # 开启全部层都可以训练,对每层进行微训练
learn.fit([1e-4,1e-3,1e-2], 4, cycle_len=1) # 初步训练
learn.unfreeze()
learn.fit([1e-3,1e-3, 1e-2], 5, cycle_len=1, cycle_mult=2) # 发现上一次有效果,在进行深度训练

最后 模型在训练集上的loss到达了0.025,在验证集上的loss达到了0.18,在验证集上的正确率达到了 94.9%。在我多次训练后,发现这是最好的了,所以就没有再进行改进了。
但是,现在还没有完,我们现在要看看模型在数据集上的表现到底怎么样。下面,使用matplotlib库进行可视化分析: