2017-08-07 13:33:27 qq_23947237 阅读数 552
  • 树莓派+python 系统部分

    本课程主要讲如何安装树莓派操作系统,如何采购树莓派,如何联网,笔记本如何控制,树莓派如何共享网盘,桌面共享,如何使用souceinsight,如何使用Pycharm进行写代码

    868 人正在学习 去看看 程光淼

暑期深度学习实训笔记


本笔记包含深度学习的整体框架的summary:

  • 机器学习的大概流程
  • 得分函数
  • 损失函数
  • 寻参K近邻与交叉验证
  • 梯度下降
  • 神经网络的基本流程

目录

(一) 机器学习的大概流程

  • 数据收集数据,加定标签
  • 训练训练分类器,完成分类任务
  • 测评测试、评估当前分类器效果

(二) 得分函数

f(xw)=f(x,w) = 每个类别的得分值。

  • x:输入
  • w:参数

score function such as f(xw)=wx+bf(x,w)=w*x+b

  • 输入高维向量经过得分函数得到一个对应于每个类别的得分数值,分数越高则代表属于该类别的概率越大。

  • 一组得分值可经过e指数放大差别,再归一化得到一个[0,1]的概率值;也可以通过s型神经元σ函数映射到[0,1]。

(三) 损失函数

得分函数的分类效果好坏需要有损失函数来评估调整。得分函数分类得分的结果是由score function的 w 参数决定的,输入的 x 通过合理的 w 得到的得分才能更接近于正确的分类。

Loss function的值越大代表分类效果越差,越小越好,为0是理想状态。在softmax分类器中概率越接近于0,loss值越大;概率接近于1,loss值越小。

loss


  • softmax函数:一组得分值可经过e指数放大差别,再归一化得到一组[0,1]的概率值。

soft max


(四) 寻参的K近邻与交叉验证

(一) K近邻(KNN)分类算法,简单的机器学习算法之一。

knn

(1) k值参数不同,分类结果不同。若K=3,由于红点所占比例为2/3,绿点将被赋予红色类,若K=5,由于蓝点比例为3/5,因此绿点被赋予蓝色类。

(2) 给定一个训练数据集:对新的输入实例,在数据集中找到与该实例最邻近的k个实例,若这k个实例中大多数属于某个类,则把输入实例分为这个类。

(3) 算法中,当训练集、距离度量、k值和分类决策规则确定后,对于任何一个新的输入实例,它所属的类唯一确定。例如图像处理对动物的分类中,取L1度量,得到度量值取前10个(k=10),根据10个当中的标签类别比例,来得出分类结果。

交叉

(二) 数据可分为traintest,数据量并不大很宝贵。充分利用数据可采用交叉验证

(1) 将数据分为train、validation、test。做法为:假设5重交叉验证,将训练集分为5份,选择其中4份作为train,另一份作为val,train经过5次同时也val经过5次,将5次的平均作为该参数下的val结果。

**t {1/2/3/4} --------- v {5}**
**t {1/2/3/5} --------- v {4}**
**t {1/2/4/5} --------- v {3}**
**t {1/3/4/5} --------- v {2}**
**t {2/3/4/5} --------- v {1}**

(2) 然后对于不同的参数,重复这样的训练。选择准确率最高的参数作为最后的参数。在训练过程中不test,最终才test。

(五) 梯度下降

  • 优化loss function,达到最优。
  • 跟随梯度去寻找山坡的最低点,梯度是山坡的一个最陡峭的方向,我们沿着这个最陡峭的方向可以最快的走到山坡的最低点。
  • 沿着梯度的反方向去走,这就是梯度下降。由于梯度方向是使得LOSS值增加幅度最大的方向,所以为了LOSS能减少就要朝着梯度下降的方向去寻找最小点。
  • 多次迭代梯度下降更新参数以致收敛,一次沿着这个梯度下降的方向走多远叫做学习率。学习率对最优化问题起着决定性的作用,因为如果学习率太大有可能有跳过最低点才寻到的不是最小值,而学习率太小又会使得网络收敛太慢。

(六) 神经网络的基本流程

神经网络

  • 1、前向传播

  • 得分 → lossloss → 正则化惩罚 → LOSSLOSS

  • 正则化就是对权重参数进行惩罚,目的就是找到一组更平滑的参数项。正则化项的结果就是对于不同权重参数 WW 进行不同力度的惩罚惩罚也就是增加其 LOSSLOSS。正则化对于整个分类模型来说非常重要,可以很有效的抑制了过拟合现象。

  • LOSSLOSS:即损失函数的最终版公式。LOSSLOSS由两部分组成的,一部分是得分函数对应的 lossloss;另一部分是正则化惩罚项值

公式

  • 参考网址:http://blog.csdn.net/tangyudi/article/details/52090167

  • 正则化,防止过拟合。λ在这里我们称做正则化参数。若λ变大说明目标函数的作用变小,正则化项的作用变大,对参数的限制能力加强,这会使得参数的变化不那么剧烈,减少代价函数对特定参数的敏感性。参数代入正则化后的代价函数,代价值比未正则化时少了。例如2个维度的参数是10和1000,相差990,都乘以1/2变成5和500,相差495。

  • 2、反向传播

  • 对于X,Y,Z若干个输入来说分别对于LOSS值做了多大的贡献,链式求导法则

  • 加法门 : 均分

  • 乘法门 : 互换

  • MAX门 : 取最大

  • 3、更新参数

1.非线性的函数:激活函数。**σ函数在某些位置斜率接近于0,在反向传播链式求导过程中梯度为0,难以更新。**因此,用MAX函数代替。

drop

2.drop-out防止过拟合。Dropout的出现很好的可以解决这个问题,每次做完dropout,相当于从原始的网络中找到一个更瘦的网络,让某些指定的神经元不参与计算和更新。让某个神经元的激活值以一定的概率p,让其停止工作。 test用全部神经元,训练只用部分。不工作的那些节点可以暂时认为不是网络结构的一部分,但是它的权重需要保留仅仅只是暂时不更新而已,因为下次样本输入时它可能又要工作了。
3.权重初始化不可以全部设置为0,因为这样会导致各项参数会沿着相同的方向更新。

(七) 结尾

深度学习的基础为神经网络,基本上它的框架理清了。
2017.8.7

2017-10-08 20:00:36 Charlie_Black 阅读数 274
  • 树莓派+python 系统部分

    本课程主要讲如何安装树莓派操作系统,如何采购树莓派,如何联网,笔记本如何控制,树莓派如何共享网盘,桌面共享,如何使用souceinsight,如何使用Pycharm进行写代码

    868 人正在学习 去看看 程光淼

  研究的专业方向是关于深度学习方面,最近想动手在自己笔记本上跑了一下,于是动手写一下这方面的经验。目的一是总结而是能够时不时看一下反思,等哪天想出思路,SCI也能够触手可得。


工作室中有可以搞深度学习的服务器,但是我先是在自己的笔记本上尝试运行下,出什么问题至少可以返工。

先说一下笔记本配置,我觉得我是搞深度学习最穷配置的吧。微笑微笑

联想笔记本,win8系统(没听错,不是Linux ,笔记本还得做其他任务呢),只有cpu,没有GPU,没有英伟达的显卡

caffe框架  opencv(用的话只用cv2的包) 还有Anaconda(python2.7) VS2013(一定安装2013)  

1、安装caffe框架,安装Anaconda,解释下,搞深度学习有很多框架可以使用,但是caffe是目前初学者最好用的,也是应用最广的。caffe框架有多个接口,但是应用最好的还是python接口。对于python我也没有学过,从零开始学习吧。学习python的好的工具就是Anaconda(初学者)。安装教程推荐如下吧:

1)http://blog.csdn.net/sinat_27403413/article/details/52791489

2)http://www.cnblogs.com/yixuan-xu/p/5858595.html

我是按照以上两个教程配置的,但是在运行配置的过程中也是该出错就出错,等哪天出现错误我再重新贴出来。

2、caffe框架安装完成要使用手写体数据进行测试,相当于hello world。


这是编译好的caffe文件部分截图,这过程中出的问题蛮多的,网上一个一个搜,基本上都能解决。手写体数据测试参考教程:非常全而且系统

从一到二:利用mnist训练集生成的caffemodel对mnist测试集与自己手写的数字进行测试 - Yixuan-Xu - 博客园
http://www.cnblogs.com/yixuan-xu/p/5862657.html

3、配置OPENCV

参考教程较多,找不到原来的网址了。

4、安装好caffe之后,我分别测试了mnist数据库和cifar10——图像分类任务,效果挺好的。












2019-06-11 11:09:20 SilenceDXY 阅读数 409
  • 树莓派+python 系统部分

    本课程主要讲如何安装树莓派操作系统,如何采购树莓派,如何联网,笔记本如何控制,树莓派如何共享网盘,桌面共享,如何使用souceinsight,如何使用Pycharm进行写代码

    868 人正在学习 去看看 程光淼

在这炎炎的夏日,当你写好一个神经网络准备跃跃欲试时。
在这里插入图片描述
看着一步一步的训练,心里充满了欣慰。就在这时,笔记本突然发出高温报警,风扇也在飞速的旋转似乎要起飞了一样。
在这里插入图片描述
这时,我突然想起前两天同学的电脑因为高温把显卡烧坏了。吓得我赶紧把程序关掉,手往键盘上一摸。烫skr人,基本可以煎鸡蛋了。
在这里插入图片描述
Try 1:
由于现在还在家放假,用不了学校的公共服务器,我开始尝试使用谷歌的云计算服务器。
首先把自己的数据集上传到谷歌服务器。
很久很久以后。。。。
在这里插入图片描述
好了,安装步骤搭建好keras的环境,上传代码,最后运行。
结果。。。。竟然速度慢到出奇。原来几秒钟的事,现在竟然预计1小时!
后来查看了显卡的占用,发现搞了半天竟然显卡没有用上!!
又是弄了一晚上,结果显卡一直用不起来!
Try2:
在很久的调试后,还是放弃了谷歌。实在是用不习惯哇。麻烦的一批。
最后我还是选择在自己的电脑上跑。
这次我准备了:电扇,冰块!
运行起来,温度依旧89左右。然后是风扇的起飞声。
Try3:
不行,温度依旧没有明显下降。最后我想到了CPU降频。为何不把CPU的使用率锁定呢?
在这里插入图片描述
我在软件里选择了节能模式,可是温度还是没有明显的下降!
最后,我打开了电源选项:在这里插入图片描述
将CPU、的使用锁定在60%,就在这是。终于响起了胜利的号角。
在这里插入图片描述
温度一路走低,风扇声音也慢慢变小。一颗悬着的心总算放下。
回头看看训练的结果,速度竟然没有增加多少!!
在这么多尝试下,总算能在笔记本上愉快的跑训练了!!
在这里插入图片描述

2019-04-17 00:02:44 dongyuqing1987 阅读数 510
  • 树莓派+python 系统部分

    本课程主要讲如何安装树莓派操作系统,如何采购树莓派,如何联网,笔记本如何控制,树莓派如何共享网盘,桌面共享,如何使用souceinsight,如何使用Pycharm进行写代码

    868 人正在学习 去看看 程光淼

选什么样的机器

深度学习主要对GPU有要求,所以选择机器的时候一定要有一块差不多的显卡注意要N卡。最稳妥的是组装一台机器。如果真的想来个笔记本,一定要谨慎,后面会说明原因。

先安装一个系统

买回一个电脑最常见的情况里面有一个windows或者组装机是没有系统的。开始我们的工作前强烈建议好好考虑一下更换自己的系统。
换的话当然是linux,无论是深度学习框架,还是写代码做实验的工作效率,linux的体验都是无与伦比的。所以想很爽的完成深度学习,首先要基于Linux系统。个人推荐Ubuntu,选一个近期的大版本,(即双数年份的4月版本,如:16.04,18.04)。废话不多说,开搞

安装盘制作

首先制作一个U盘做系统盘,这篇博客详细介绍了制作的方法。基本上都是常规操作没有遇到什么大坑。

开始安装

有了系统盘就可以开始装系统了

正常流程:

如果你是组装的台式机,无论是Ubuntu安装,还是window+ubuntu双系统,教程都比较多,算是常规操作了。

笔记本的坑:

如果是笔记本的话,要多多小心,上面的常规操作可能不成功。个人建议是要买哪个型号的机器提前看看网上有没有安装成功的案例,有的话再入手不迟。如果搜不到,要多多小心哦!

装上驱动

这里驱动主要是显卡驱动,深度学习要爽的话,当然要来一块N卡,显卡好用,CUDA难装。台式机依然是常规操作,教程很多.一步步来急不得。

显卡的坑

笔记本由于双显卡问题,导致安装cuda又变的很坑。个人经验将显卡驱动和cuda分开安装的方法成功率很高。
下面是个人在各种笔记本电脑上安装cuda的战绩:

  1. 深海泰坦x6ti 成功
  2. 神舟战神 失败
  3. thinkpad p470 成功

验证

到此位置你的ubuntu+cuda环境就搭建好了。
在终端中,用nvidia-smi查看驱动是否正常,返回列表中显示正常的显卡信息就成功了。
如图中表示显卡驱动正常要注意的是通过上述验证的话并不代表CUDA能正常运行。在安装CUDA的过程中大家都得到了"NVIDIA_CUDA-9.0_Samples",默认的话会放在根目录下。选几个例子跑一下,结果正确表明CUDA安装真的成功了。

2017-11-20 22:13:27 Lauyeed 阅读数 3818
  • 树莓派+python 系统部分

    本课程主要讲如何安装树莓派操作系统,如何采购树莓派,如何联网,笔记本如何控制,树莓派如何共享网盘,桌面共享,如何使用souceinsight,如何使用Pycharm进行写代码

    868 人正在学习 去看看 程光淼

       最近,一直在自学深度学习。一边学习理论,一遍学习编程。在做CNN的时候,手头的笔记本电脑就吃不消了,运行的速度明显跟不上。本来想买一台带好点的显卡,可是调研了一下,带NVIDIA 1080的差不多要1万左右,更不用说更高的配置。

       偶然发现百度云里面有一款用于服务深度学习者的产品:百度深度学习。

       浅试了一下,个人感觉有以下几个优点,值得用来进行深度学习的学习:

       1. 上手容易。有帮助文档,可以帮助新手入门。虽然不是很丰富,但是上手很容易。

       2. 价格还算可以接受。因为我只是新手,计算的任务仅限于测试一些案例和调试一些参数。而该产品是使用按量计费的,最便宜的配置5.16元/时(Nvidia K40),非常符合我的需求,用完即可释放。

       3. 系统镜像已经预置了Tensorflow,keras等主流框架,非常方便。而且如果有缺少的包,也可自行安装。

       当然,也有不好的地方:

       1. 每次用完释放,无法保存镜像,每次都要重新下载数据。

       2. 用的是python2.7的版本。我笔记本上一直用的事Python3.5的版本。

       以下,简单描述一下使用过程(假设已经有百度云账号而且账号里面的余额不少于100元):

       1. 进入百度深度学习平台(https://cloud.baidu.com/product/bdl.html)

       2. 点击“立即使用”

       3. 点击“创建集群”

       4. 输入集群名称(随便取)、输入管理员密码、选择集群镜像、选择配置

       5. 点击“下一步”,点击“去支付”,随即你就拥有了一个带有Nvidia K40显卡的计算机。

       6. 进入管理控制台,点击集群名称,在基本信息里面可以看到公网IP,可以通过该IP访问该计算机。(该产品还自带了Jupyter notebook,不过目前没有太多的帮助文档,试用了一下,目前好像不太好用),以下是集群信息:

               

       7. 打开“Putty”(或者其他类似功能的工具),输入上述公网IP,输入用户名root,密码(创建集群时设置的密码),即可登陆集群。

       8. 集群中内置了3个domo,可以试一下,运行速度比笔记本快了很多。

      

       接下来就是上传自己的代码、数据、运行,并下载运行结果。集群是利用百度另一款产品,BOS实现数据的上传和下载。这里需要另外购买BOS,对于学习来说,BOS很便宜,是按照储存的量来计费的。以下是1GB的费用,只要0.74801元/月

     

        按照我的理解,集群需要通过BOS作为中转来实现和本地的数据交换。也就是说,本地计算机需要上传数据到BOS,然后集群从BOS上下载数据;算完之后,需要将集群上的数据上传到BOS,然后本地电脑再从BOS上下载,稍微有点麻烦,希望以后能够实现直接的上传和下载。不过,因为BOS和集群属于同一个内网,所以速度很快,可以达到20M/s。

       以下,介绍BOS的创建:

       1. 进入对象存储:https://cloud.baidu.com/product/bos.html

       2. 点击“立即使用”

       3. 点击“新建Bucket”,输入“Bucket名称”,(该名称是唯一的,可通过该名称储存,下载数据),区域和集群一致,存储类型选择“标准”,读写权限选择“公共读写”(我这里主要是用来学习,读数据的安全不是很重视,为了方便,选择“公共读写”)

       4. 点击“确定”,即可拥有一个类似硬盘的云盘

       5. 点击你创建的“Bucket名称”,即可进行文件的上传

       6. 这里假设你上传了文件cifar10_vgg16.zip文件,点击获取地址,即可获得该文件的地址file_address(指文件地址)

       7. 在Putty中输入wget file_address,即可从BOS中下载该文件到深度学习平台 

       以上介绍了文件的上传,即从本地上传到BOS,集群再从BOS中下载。反过来的过程,即从集群上传文件到BOS,需要使用BOS CLI,

       1. 从以下地址下载BOS CLI安装包https://cloud.baidu.com/doc/Downloadcenter/CLI.html

       2. 通过上述步骤将该安装包从本地上传到BOS,然后从BOS下载到集群

       3. 在Putty中解压安装包、安装

    $ unzip bce-cli-0.10.8.zip
    $ cd bce-cli-0.10.8
    $ python setup.py install
       4. 安装完之后,就可以把集群中的文件上传到BOS,这里假设你要上传mnist.py

    bce bos cp mnist.py bos:/mybucket/mnist.py
       (这里mybucket要换成你刚才创建的Bucket名称)

       这样,就可以实现代码、数据在集群和本地电脑上的上传和下载,就可以愉快地进行深度学习了。

       以下,通过vgg16神经网络分类cifar10数据集对比一下,我破烂的笔记本电脑(ThinkPad E430c)和带一个Nvidia K40集群的速度:


ThinkPad E430C 8.8examples/sec
Nvidia K40 460examples/sec
       通过以上表格,K40可以达到笔记本电脑的52倍!
       用完之后,要记得点击“释放”,这样集群就自动删除了,然后百度会根据的用的时间进行计费。

       不好的事,集群释放之后,你计算的结果,上传的数据就跟着消失了(BOS中的数据不会消失)。等下一次你要算的时候,就要从头开始,不过每次创建的时间也不会太长,估计在3分钟左右,也可以接受。




        


       

没有更多推荐了,返回首页