不用写代码就能实现深度学习?手把手教你用英伟达 DIGITS 解决图像分类问题
2006年,机器学习界泰斗Hinton,在Science上发表了一篇使用深度神经网络进行维数约简的论文 ,自此,神经网络再次走进人们的视野,进而引发了一场深度学习革命。深度学习之所以如此受关注,是因为它在诸如图像分类、目标检测与识别、目标跟踪、语音识别、游戏(AlphaGo)等多个领域取得了相当优秀的成绩,掀起了又一波人工只能浪潮。深度学习技术逐渐成为机器学习领域的前沿技术,近年来得到了突飞猛进的发展,这得益于机器学习技术的进步以及计算设备性能的提升。英伟达公司研发的图形处理器(Graphics Processing Unit,GPU),无疑为深度学习的发展提供了强有力的硬件支撑!
英伟达想必大家都有所耳闻,但对英伟达开发的深度学习训练系统(NVIDIA Deep Learning GPU Training System, DIGITS) 知之甚少,今天我们介绍如何使用DIGITS,实现基于深度神经网络的图像分类,包括数据集创建、模型创建、模型训练、模型测试等等。
面对众多的深度学习开发框架,你是不是安装配置深度学习开发框架环境中,是不是苦于码代码、调试改Bug中。那么,今天你将发现,世界上还有一款超级简单易用的深度学习平台工具,是的,这就是DIGITS。说到底,DIGITS是对现有流行深度学习开发框架的最高级的抽象封装,你所需做的只不过是点点按钮、改改参数,就能轻松实现基于深度学习模型的图像分类、目标检测、分割等任务,并以图形界面的方式展现出来。目前DIGITS支持 Caffe、Torch,7月份将开始支持Tensorflow,开发人员,正在努力工作,使其支持更多的深度学习框架,如下图所示:
DIGITS支持的深度学习框架(来自英伟达官网)
下面,让我们一起学习如何使用DIGITS,实现基于深度卷积网络的手写体图像分类任务,让我们一起成为人工智能时代的弄潮儿!
DIGITS安装
由于本文重点介绍如何使用DIGITS实现深度学习图像分类,这里仅给出安装参考与注意事项。
现今,DIGITS已经有了三种安装姿势:
● Ubuntu 包管理器
● Docker
● 源码编译
具体请移步 NVIDIA DIGITS Installation(https://github.com/NVIDIA/DIGITS#installation)。2015年时,DIGITS出道时还只有源码安装方式,时隔一年竟然有了 deb 安装方式,果断试用,按照官方说明分分钟安装完毕~.~
注:Ubuntu16.04下安装Caffe,会有比较多的坑,跳进去再跳出来就行了,不过,对于初学者,可能得几个小时,甚至几天的时间才能跳出来。
无论哪种安装姿势,都要确保有以下核心实料:
● 装有GPU卡的PC机(有服务器更好);
● Linux系统(建议Ubuntu,本文 Ubuntu16.04 LTS);
● CUDA驱动(本文版本8.0,Linux版有 run 和 deb 两种安装包,前者需要卸载系统自带驱动,一不小心可能就进不去图形界面了,需谨慎 ,具体安装方法,参见英伟达官方安装手册)或自行搜索;
● 深度学习框架:如 Caffe, CNTK, TensorFlow, Theano and Torch 等其中的一种或多种(目前支持Caffe和Torch);
● DIGITS
Ubuntu deb 包安装
很简单,打开终端(快捷键 Ctrl + Alt + T),执行如下命令,既可以自动安装 digits, caffe-nv, torch7-nv, libcudnn,其中,xxx-nv 是指英伟达 fork 的xxx框架版本。具体安装方法,参见:DIGITS Ubuntu Installation (https://github.com/NVIDIA/DIGITS/blob/master/docs/UbuntuInstall.md)。
DIGITS Ubuntu deb 安装命令
#添加源
# For Ubuntu 16.04
CUDA_REPO_PKG=http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
ML_REPO_PKG=http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb
# Install repo packages
wget "$CUDA_REPO_PKG" -O /tmp/cuda-repo.deb && sudo dpkg -i /tmp/cuda-repo.deb && rm -f /tmp/cuda-repo.deb
wget "$ML_REPO_PKG" -O /tmp/ml-repo.deb && sudo dpkg -i /tmp/ml-repo.deb && rm -f /tmp/ml-repo.deb
# Download new list of packages
sudo apt-get update
# Install
sudo apt-get install digits
源码安装
DIGITS的源码可以在GitHub上找到,即这里:GitHub DIGITS (https://github.com/NVIDIA/DIGITS),具体编译构建安装过程参见:NVIDIA DIGITS Source Installation (https://github.com/NVIDIA/DIGITS/blob/master/docs/BuildDigits.md)。
提示:
安装过程若提示错误:ImportError: No module named setuptools 可以使用 sudo apt install python-setuptools 解决。
cd ~/sfw
git clone https://github.com/NVIDIA/DIGITS.git
DIGITS使用入门
终于可以开始使用DIGITS了,首先打开你的浏览器,然后:
● 对于使用deb包安装的童鞋,在浏览器地址栏输入 http://localhost/ 访问 DIGITS server 主页;
● 对于采用其他安装方式(using digits-devserver)的童鞋,在浏览器地址栏输入 http://localhost:5000/ 访问 DIGITS server 主页;
现在开始吧!DIGITS server主页界面如下,可见使用DIGITS做深度学习应用,非常简单明了人性化,就是点点按钮的事;点击图中Images下拉菜单按钮,可以看到,如今DIGITS已经支持 图像预处理、分类、目标识别、分割:等多种学习任务。
DIGITS Server Home 页简介
废话少说,开始正题,使用 DIGITS ,基本分三步:
● 第一步:准备并创建数据集
● 第二步:设计并创建任务模型
● 第三步:训练测试模型
下面以手写体分类为例,说明如何利用 DIGITS,轻松实现基于深度学习中的卷积神经网络的图像分类任务。
使用DIGITS实现基于深度学习的图像分类
● 数据集:手写体数据集 MNIST:含 0~9 十个数字,60000个训练样本,10000个测试样本;
● 网络模型:卷积神经网络 LeNet-5:一种卷积神经网络。
详情参见 Yann LeCun 主页。
下载MNIST数据集
你可访问上述数据集链接下载并解压数据,也可以使用 DIGITS 提供的数据集下载工具直接下载解压数据,数据会被下载到你指定的目录下(yourdir),本文中:
python -m digits.download_data mnist ~/yourdir/mnist
下载完成后,在你指定的目录下可以看到如下文件:
创建数据集
在DIGITS server Home页,以此选择 Datasets > New Dataset > Images > Classification ,然后随便取个用户名(username),提交(Submit),在弹出的页面中,按下图所示填写数据集信息。
DIGITS MNIST 数据集创建页面
创建完成后,可以在MNIST数据集页面查看验证数据集信息,如下图所示:
创建好的MNIST数据集页面
创建好的MNIST数据集的训练集统计信息如下图所示:
训练集统计信息——频率直方图
创建模型
我们使用经典的LeNet模型来实现手写体图像的分类,LeNet是一个卷积神经网络,它依次包含一个输入层(INPUT)、卷积层(C1)、池化层,也叫下采样层(S2)、卷积层(C3)、下采样层(S4)、卷积层(C5)、全连接层(F6)和一个输出层,由于有0~9个数字,所以输出层的神经元的个数是10。这么复杂的结构,宝宝得写多少行代码,宝宝不想当程序猿 ~,~
用于手写体分类的LeNet网络结构
然而,你不用担心,使用DIGITS,你只需要点点按钮,改改参数即可,由于是经典模型,这里连该参数都不用,点按钮就行了。点击左上角的 DIGITS 按钮,返回主页,此时,可以看到数据集(DataSets)页面多了个刚刚创建的MNIST数据集。依次选择 Models > New Model > Images > Classification 弹出模型设置界面,依次按如下步骤操作:
● 在Select Dataset 区选择 “MNIST” 数据集;
● 在下面的Standard Networks 标签页选择Caffe 版的 LeNet network;
● 选择GPU;
● 给模型命个名字;
● 点击 Create 按钮创建模型
如下图所示:
用于手写体分类的LeNet网络模型训练与测试设置
当然,你也可以设置训练代数、验证间隔(代数)、优化方法、学习率等参数。
训练模型
创建完模型后,DIGITS 开始网络的训练,并实时显示训练损失、验证损失、验证正确率、学习率变化、GPU资源占用等信息,如下图所示,非常直观和友好,有木有,~.~
DIGITS MNIST LeNet分类网络训练过程图
喝杯咖啡,或出去溜达溜达即可!
测试
现在到了测试你的模型的时候了,如下图所示,有三种选择:
● Classify One:单幅图像分类,可以可视化数据、权重、隐藏层输出等;
● Classify Many:多幅图像分类,可以查看多幅图像的分类结果统计信息;
● Top N Predictions per Category:每类的Top N分类预测图示。
测试你的手写体分类模型
上述手写体分类模型,对数字6的某幅图像分类结果如下图所示,非常直观友好有木有,宝宝瞬间喜欢上人工智能了耶:
上述手写体分类模型,对10000个测试样本图像的分类统计结果如下图所示,哇,这么高大上的矩阵我也有了:
上述手写体分类模型,Top N分类统计结果如下图所示,宝宝决定要搞深度了,谁都不能阻挡我:
后记
本文介绍了 DIGITS 及其安装,以及使用 DIGITS 进行图像分类的步骤与方法,包括数据集的创建、模型的创建与训练、模型测试等等。总结起来,使用DIGITS做深度学习应用,简直就是点点点,免去了使用Caffe等其它框架繁琐的环境配置、枯燥的码代码 Debug 的过程,你不需要去学习Python等语言,你甚至都不需要了解模型算法原理,就能轻松享受深度学习的乐趣,这一切 DIGITS 都已经为你做好,简直太爽啦!~.~ ~.~ ~.~
如果你不是程序猿,如果你不了解深度学习,如果你不知道选择何种深度学习框架,如果你不想把精力耗费在码代码上,而你却非常想了解深度学习,以至于你想成为人工智能时代的弄潮儿,那么DIGITS是你最好的入门选择!生活原本很简单,为什么要过得复杂呢?
如果你已经迫不及待地想在 DIGITS 上一试身手,如果你想找个深度学习“老司机”领路,如果你有诸多深度学习技术相关的难题有待解决,那么这里正好有个绝佳的机会:
7 月 8 日,在第二届 CCF-GAIR 2017 全球人工智能与机器人峰会上,雷锋网将联合英伟达深度学习学院(Deep Learning Institute,DLI),面向 AI 技术从业者,特别推出一个深度学习开发者专场。对深度学习和英伟达 GPU 加速感兴趣的开发者们,可以通过这次活动跟英伟达官方认证工程师来一次面对面的技术畅谈。
具体议程安排如下:
目前,开发者专场门票正在火热售卖中,只需 999元 即可获得与英伟达官方深度学习团队现场交流的机会,数量有限,售完即止,各位对深度学习感兴趣的 AI 从业者们千万不可错过!(悄悄告诉你,使用优惠码还有 200元 折扣哦)
不用写代码就能实现深度学习?手把手教你用英伟达 DIGITS 解决图像分类问题的更多相关文章
- [翻译] Canvas 不用写代码的动画
Canvas 不用写代码的动画 https://github.com/CanvasPod/Canvas Canvas is a project to simplify iOS development ...
- 玩深度学习选哪块英伟达 GPU?有性价比排名还不够!
本文來源地址:https://www.leiphone.com/news/201705/uo3MgYrFxgdyTRGR.html 与“传统” AI 算法相比,深度学习(DL)的计算性能要求,可以说完 ...
- NCCL(Nvidia Collective multi-GPU Communication Library) Nvidia英伟达的Multi-GPU多卡通信框架NCCL 学习;PCIe 速率调研;
为了了解,上来先看几篇中文博客进行简单了解: 如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?(较为优秀的文章) 使用NCCL进行NVIDIA GPU卡之间的通信(GPU卡通信模式 ...
- 推荐一款最强Python自动化神器!再也不用写代码了!
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 搞过自动化测试的小伙伴,相信都知道,在Web自动化测试中,有一款自动化测试神器工具: seleniu ...
- 对比《动手学深度学习》 PDF代码+《神经网络与深度学习 》PDF
随着AlphaGo与李世石大战的落幕,人工智能成为话题焦点.AlphaGo背后的工作原理"深度学习"也跳入大众的视野.什么是深度学习,什么是神经网络,为何一段程序在精密的围棋大赛中 ...
- Data scientist———java实现常见的机器学习代码(跟百度深度学习研究院师兄学机器学习)
2016-05-02开始决定好好记录一切有关<数据科学家>的学习过程.记录学习笔记. --------------------------------------------------- ...
- 不用写代码也能做表单 —— 加载meta即可
做增删改查要写多少代码? 一个表单一套代码,十个表单十套代码吗? 我这么懒,怎么会写这么多代码? 我想做到:即使一百个表单也只需要一套代码(而且不需要复制粘贴).实现多个表单,只需要加载不同的meta ...
- 不用写代码的框架 - RobotFramework+Eclispe环境安装篇
环境安装是学习任何一个新东西的第一步,这一步没走舒坦,那后面就没有心情走下去了. 引用名句:工欲善其事必先利其器!! Robotframework:一款 自动化测试框架. Eclipse:一款编辑工具 ...
- sailsjs 不用写代码就能生成rest api 代码
1. 脚手架安装 npm install sails -g 2. 生成基本项目 a. 项目 sails new appdemo b. 创建api sails new api demoapi a ...
随机推荐
- 最全android Demo
1.BeautifulRefreshLayout-漂亮的美食下拉刷新 https://github.com/android-cjj/BeautifulRefreshLayout/tree/Beauti ...
- bzoj3172: [Tjoi2013]单词 ac自动机
某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. Input 第一个一个整数N,表示有多少个单词,接下来N行每行一个单词.每个单词 ...
- hdu4549矩阵快速幂+费马小定理
转移矩阵很容易求就是|0 1|,第一项是|0| |1 1| |1| 然后直接矩阵快速幂,要用到费马小定理 :假如p是质数,且gcd(a,p)=1,那么 a(p-1)≡1(m ...
- PHP:第五章——字符串加密及校验函数
<?php header("Content-Type:text/html;charset=utf-8"); //1.md5——计算字符中的散列值 //对一段信息(Messag ...
- python实现八大排序算法
插入排序 核心思想 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为 O(n^2).是稳定的排序方法.插入算法 ...
- 外汇EA(LRY_FX_Robot_V5)
EA介绍 EA类型是马丁+策略,EA主要功能有风控设置(预付款.浮亏.加仓层数等达到多少进行操作).移动止损(包括隐藏移动止损).帮我操作手动单子(如果你开了首仓不会操作这个功能可参帮你加仓平仓移动止 ...
- wbr 视机而动
链接 在适当的时候, 除非能容下整个单车, 才保留一行: 缩放浏览器, 试试这段就知道了 <p>To learn AJAX, you must be familiar with the X ...
- centos7上systemd详解
centos7上systemd详解 发表于 2016-06-07 | 分类于 linux CentOS 7继承了RHEL 7的新的特性,例如强大的systemd, 而systemd的使用也使得以往 ...
- react拖拽(表格拖拽排序、普通拖拽排序以及树形拖拽排序)
表格拖拽排序:组件地址:https://reactabular.js.org/#/drag-and-drop 拖动的排序是用React-DnD:React-DnD:http://react-dnd.g ...
- HTML学习3---排版标记
上节,我们学习了boda常用的属性以及HTML的一些标记,但是图显示的效果却不是那么的好看. 原因就是没有排版好,我们这次使用居中来使这个页面更好看一点,顺便多加入几个别的标记. HTML排版标记 ( ...