龙空技术网

kaggle实战之AlexNet迁移学习训练猫狗分类器(一)

机器学习之路 528

前言:

当前你们对“利用alexnet进行二分类”可能比较讲究,看官们都需要学习一些“利用alexnet进行二分类”的相关文章。那么小编在网摘上网罗了一些关于“利用alexnet进行二分类””的相关知识,希望同学们能喜欢,小伙伴们快快来了解一下吧!

这篇文章主要介绍如何利用AlexNet预训练模型来训练一个猫狗分类器,主要内容包括:

项目结构介绍数据探索数据的准备AlexNet模型的构建模型的训练和性能评估结果的提交一、项目结构介绍

1、相关数据下载地址

项目地址:

数据下载地址:

AlexNet预训练文件下载地址:

2、项目文件介绍

checkpoints --- 用来保存训练后生成的模型文件

model --- 用来存放预训练模型文件

tensorboard ---用来保存训练过程中的日志信息

txt --- 用来存放数据集的图片信息

AlexNet.py --- AlexNet模型结构文件

DataGenrator.py --- 数据生成类

Exploration.py --- 可视化分析

Generate_txt.py --- 将图片信息保存为txt文件

run.py --- 模型训练、评估、结构生成

util_data.py --- 数据集工具类,将数据分为训练集和验证集

二、数据探索

1、数据介绍

数据包含两部分,训练集和测试集,训练集有25000张图片,测试集有12500张图片,在训练集的图片名称中包含了图片的标签信息,而测试集的图片名称代表的图片的id,提交结果的时候要求提交图片的id和预测对应图片的标签(1表示dog,0表示cat)。

2、数据探索

分析训练集中猫狗的分布情况

训练集中猫狗图片的分布情况

三、数据的准备

注意:我将展示出来的代码进行了省略,由于代码比较多,比较占空间,详细代码请参考git。

1、生成txt文件

将图片信息转为txt文件

将图片信息保存为txt文件,保存格式:图片id,图片路径,图片标签

2、将数据分为训练集和验证集

将数据集分为训练集和验证集

将25000张图片分为训练集和验证集,训练集占20000张图片,验证集占5000张图片,分割的时候需要注意,训练集和验证集中猫和狗所占的比例相同。

3、数据生成类

数据生成类

利用CPU资源来加载数据,在读取图片的时候需要将图片转为227×227,因为AlexNet要求输出图片的大小是227×227。

四、AlexNet模型构建

AlexNet网络结构

AlexNet网络

五、模型的训练和性能评估

1、模型的训练

模型参数设置

模型参数设置

train_layers设置需要重新训练的层数,在这次训练过程中,只重新训练AlexNet的最后三层全连接层,其余的层保持不变。

训练日志

训练完成之后,在checkpoints会产生ckpt模型文件,每一个epoch保存一次模型文件,只有当后一个在验证集上的准确率大于前一个时才会保存模型文件,在保存模型文件的时候后面有附带该次epoch在验证集上的准确率。

2、模型评估

3、查看模型在验证集上分类正确和分类错误的图片

分类正确和错误结果展示

上面一行表示分类正确的图片,下面一行表示分类错误的图片

4、查看验证集预测结果的分布情况

验证集结果分布情况

5、混淆矩阵

6、验证集分类结果报告

六、提交结果

kaggle的成绩计算是利用,是计算预测结果的交叉熵损失值,在生成预测结果的时候,通过fc8输出的结果还需要经过一个softmax层才能输出每个类别的概率,直接使用预测类标(0或1)比预测概率的成绩会低一些。

总结:本篇文章主要介绍了如何使用一个相对简单的卷积神经网络AlexNet来构建一个预训练模型,熟悉一下迁移学习的过程,在下一篇文章将会介绍如何来预训练一个更复杂的Inception-resent网络。

最后,给大家推荐一个非常好的学习人工智能相关知识的平台——微信小程序“八斗问答”,有不懂的问题可以在上面进行免费提问,还有大咖会进行详细解答,还可以与大咖一对一咨询。我现在也已经入驻了“八斗问答”,以后的文章在上面也会同步更新,有不懂的地方欢迎来咨询。

标签: #利用alexnet进行二分类