教你用Keras和CNN建立模型识别神奇宝贝!(附代码)

本文详细介绍了如何使用Keras和卷积神经网络(CNN)构建一个模型,以识别不同类型的神奇宝贝,如妙蛙种子、小火龙等。作者通过创建SmallerVGGNet结构,训练了一个CNN,最终达到了97%的分类准确率。文章涵盖了数据集的构建、CNN的结构、训练脚本以及模型评估,还讨论了模型的局限性和可能的改进方法。
摘要由CSDN通过智能技术生成

640?wx_fmt=png

作者:ADRIAN ROSEBROCK

翻译:张恬钰

校对:万文菁

本文8500字,建议阅读30+分钟。

本文将讲解如何用Keras和卷积神经网络(CNN)来建立模型识别神奇宝贝!


640?wx_fmt=png

用Keras创造一个卷积神经网络来识别神奇宝贝妙蛙种子的填充玩具


简介


今天的博客内容是构建完整端对端图像分类+深度学习应用系列的第二部分。


  • 第一部分:如何(快速)建立一个深度学习的图像数据库

  • 第二部分:Keras和卷积神经网络(今天的内容)

  • 第三部分:在iOS上运行Keras模型(下周发布)

 

在今天博客的最后,你将会了解如何在你自己的数据库中建立、训练并评估一个卷积神经网络。


在下周的博客中,我将会向你展示如何仅用几行代码就把你训练出来的Keras模型用在智能手机的app上。


为了让这个系列轻松、愉快,我决定实现我童年的一个梦想,那就是构造一个神奇宝贝图鉴。神奇宝贝图鉴是于神奇宝贝(一部很火的动画片、电子游戏和集换卡系列)世界中的一个设备(我曾经是以及现在还是神奇宝贝的大粉丝)。


如果你对于神奇宝贝不了解,你可以把神奇宝贝图鉴想象成一个可以识别神奇宝贝(一个长得像动物、存在于在神奇宝贝世界的生物)的智能手机app。


当然你也可以换成你自己的数据,我只是觉得很有趣并且在做一件很怀旧的事情。


想要知道如何在你自己的数据库中用Keras和深度学习训练一个卷积神经网络,继续往下读就行了。

 

目录


1.Keras和卷积神经网络


  • 我们的深度学习数据库

  • 卷积神经网络和Keras项目的结构

  • Keras和CNN结构

  • 完成我们的CNN+Keras训练脚本

  • 用Keras训练CNN

  • 创造CNN和Keras训练脚本

  • 用CNN和Keras分类图片

  • 该模型的局限性

  • 我们能否使用这个Keras深度学习模型建一个REST API?


2.总结

 

Keras和卷积神经网络


在上周的博文中,我们学习了如何能快速建立一个深度学习的图像数据库——我们使用了博文中的过程和代码来收集、下载和组织电脑上的图像。


既然已有下载并组织好的图像,下一步就是在数据上训练一个卷积神经网络(CNN)。


我将会在今天的博文中向你展示如何用Keras和深度学习来训练你的CNN。下周将要发布这个系列的最后一部分,将会向你展示你如何仅用几行代码将你训练好的Keras模型应用在一个智能手机(特别是iPhone)app上。


这个系列的最终目的是帮助你建立一个能够运行的深度学习app——用这个系列的文章作为发灵感启发,并且开始帮助你建立自己的深度学习应用。


现在让我们开始用Keras和深度学习训练一个CNN。

 

我们的深度学习数据库


640?wx_fmt=png

图1:神奇宝贝深度学习数据库中的样本示意图。它展示了神奇宝贝的每个种类。正如我们所见,数据库的内容范围很大,包含了插画、电影/电视节目截图、模型、玩具等。


我们深度学习的数据库有1191个神奇宝贝)的图片。


我们的目标是用Keras和深度学习训练一个卷积神经网络来识别和分类这些神奇宝贝。


我们将要识别的神奇宝贝包括这几种:


  • 妙蛙种子(234张图片)

  • 小火龙(238张图片)

  • 杰尼龟(223张图片)

  • 皮卡丘(234张图片)

  • 超梦(239张图片)

 

每个种类的训练图片的示意图在图1中可见。


正如你所见,我们的训练图片包括:


  • 电视节目和电影中的截图

  • 集换卡

  • 模型

  • 玩具

  • 粉丝的画作和艺术表达

 

我们的CNN将从这些涵盖范围很广的使N一大堆图片中识别出5种神奇宝贝。——而且我们将会看到,我们可以达到97%的分类准确率!

 

卷积神经网络和Keras项目的结构


今天的项目有很多活动部件?。我们现在从回顾项目的目录结构开始。


640?wx_fmt=png


有3个目录:


  • dataset:包含了5个种类,每个种类有自己单独的子目录,这使得分析种类标签较为容易。

  • examples:包含了我们将要用来测试CNN的图片。

  • pyimagesearch模块:包含了SmallerVGGNet模型种类(在这片文章的后面将会用到)。

 

根目录下有5个文件:


深度学习之卷积神经网络CNN做手写体识别的VS代码。支持linux版本和VS2012版本。 tiny-cnn: A C++11 implementation of convolutional neural networks ======== tiny-cnn is a C++11 implementation of convolutional neural networks. design principle ----- * fast, without GPU 98.8% accuracy on MNIST in 13 minutes training (@Core i7-3520M) * header only, policy-based design supported networks ----- ### layer-types * fully-connected layer * convolutional layer * average pooling layer ### activation functions * tanh * sigmoid * rectified linear * identity ### loss functions * cross-entropy * mean-squared-error ### optimization algorithm * stochastic gradient descent (with/without L2 normalization) * stochastic gradient levenberg marquardt dependencies ----- * boost C++ library * Intel TBB sample code ------ ```cpp #include "tiny_cnn.h" using namespace tiny_cnn; // specify loss-function and optimization-algorithm typedef network CNN; // tanh, 32x32 input, 5x5 window, 1-6 feature-maps convolution convolutional_layer C1(32, 32, 5, 1, 6); // tanh, 28x28 input, 6 feature-maps, 2x2 subsampling average_pooling_layer S2(28, 28, 6, 2); // fully-connected layers fully_connected_layer F3(14*14*6, 120); fully_connected_layer F4(120, 10); // connect all CNN mynet; mynet.add(&C1); mynet.add(&S2); mynet.add(&F3); mynet.add(&F4); assert(mynet.in_dim() == 32*32); assert(mynet.out_dim() == 10); ``` more sample, read main.cpp build sample program ------ ### gcc(4.6~) without tbb ./waf configure --BOOST_ROOT=your-boost-root ./waf build with tbb ./waf configure --TBB --TBB_ROOT=your-tbb-root --BOOST_ROOT=your-boost-root ./waf build with tbb and SSE/AVX ./waf configure --AVX --TBB --TBB_ROOT=your-tbb-root --BOOST_ROOT=your-boost-root ./waf build ./waf configure --SSE --TBB --TBB_ROOT=your-tbb-root --BOOST_ROOT=your-boost-root ./waf build or edit inlude/config.h to customize default behavior. ### vc(2012~) open vc/tiny_cnn.sln and build in release mode.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值