深度学习工具深度学习的进步也很大程度上依赖于软件基础设施的进步。软件库如:Torch(2011)、Theano(2012)、DistBelief(2012)、PyLearn2(2013)、Caffe(2013)、MXNet(2015)和TensorFlow(2015)都可以支持重要的研究项目或商业产品。如果说深度学习,我个人是2015年接触到的。其实这个技术隐藏了很久,2012年彻底爆出来了,已经成为AI的主流领域,所以今天要说的是最实用和接触最多的环节就是框架,也可以说是工具。你知道哪些工具???今天就把我用过的工具分享给大家。希望大家能找到自己喜欢的工具,和它们一起去“炼金术”(不知道什么意思的自行百度)嘿嘿!自从考研以来,接触过的深度学习工具一只手都能数过来。有兴趣的可以深入搜索。网上还是有很多不同的说法。下面我就结合自己的实际经验谈谈深度学习工具。MatlabMatlab刚开始接触深度学习,第一个用到的工具是:DeepLearnToolbox,一个用于深度学习的Matlab工具箱。深度学习作为机器学习的一个新领域,侧重于学习深度数据模型。它的主要灵感来自于人脑表面的深层结构。深度学习理论的一个很好的概述是学习人工智能。深层架构。这个工具箱比较简单。当时做了一个手写数字和人脸分类(AR人脸库)。主要包括以下内容:NN:前馈BP神经网络库CNN:卷积神经网络库DBN:深度信念网络库SAE:stackautoencoder库CAE:卷积自编码器库Util:用于libraryData:datastoragetests的实用函数:用来验证工具箱是否正常工作的测试用例如下rand('state',0)cnn.layers={struct('type','i')%inputstruct('type','c','outputmaps',6,'kernelsize',5)%卷积层struct('type','s','scale',2)%下采样层struct('type','c','outputmaps',12,'kernelsize',5)%卷积层struct('type','s','scale',2)%下采样层};cnn=cnnsetup(cnn,train_x,train_y);opts.alpha=1;opts.batchsize=50;opts.numepochs=5;cnn=cnntrain(cnn,train_x,train_y,opts);saveCNN_5cnn;loadCNN_5;[er,bad]=cnntest(cnn,test_x,test_y);图;情节(cnn.rL);断言(er<0.12,'Toobierror');运行界面比较简单:PyTorch,Pytorch库,我其实用的不多,只是随便试了下,也懒得摸了,没什么意思,接下来简单说说.他是一个基于Python的科学计算包,目标用户有两类。一种是用GPU代替numpy;另一个是深度学习救援平台:提供最大的灵活性和速度。在深度学习方面,您可以使用torch.nn包来构建神经网络。autograd包是已知的,nn包依赖于autograd包来定义模型并派生。一个nn.Module包含层和一个返回输出的favor(input)方法。案例如下importtorchfromtorch.autogradimportVariableimporttorch.nnimporttorch.nn.functionalasFclassNet(nn.Module):def__init__(self):super(Net,self).__init__()#1inputimagechannel,6outputchannels,5*5squareconvolution#kernelself.conv1=nn。Conv2d(1,6,5)self.conv2=nn.Conv2d(6,16,5)#anaffineoperation:y=Wx+bself.fc1=nn.Linear(16*5*5,120)self.fc2=nn.Linear(120,84)self.fc3=nn.Linear(84,10)defforward(self,x):#maxpoolingovera(2,2)windowx=F.max_pool2d(F.relu(self.conv1(x)),(2,2))#Ifsizeisasquareyoucanonlyspecifyasinglenumberx=F.max_pool2d(F.relu(self.conv2(x)),2)x=x.view(-1,self.num_flat_features(x))x=F.relu(self.fc1(x))x=F.relu(self.fc2(x))x=self.fc3(x)returnxdefnum_flat_features(self,x):size=x.size()[1:]#alldimensionsexceptthebatchdimensionnum_features=1forsinsize:num_features*=sreturnnum_featuresnet=Net()print(net)具体操作和详细过程,有兴趣的可以抽空玩玩!CaffeCaffe的作者是加州大学伯克利分校的贾扬清。Caffe是一个c++/CUDA架构,支持命令行、Python和Matlab界面,可以在CPU/GPU上运行。深度学习不断发展,其相应的实验工具也受到大家的关注。Caffe是流行的深度学习框架之一。工具中已经提前提供了模板,即工具有现成的编程框架,可以与当前流行的图形计算GPU配合使用,加速网络训练。流行的神经网络所有网络框架算法都可以在Caffe中运行,你可以自己设置框架,因为Caffe已经预先定义了每一个结构,研究人员也可以根据自己的设计需求进行相应的添加,设计新的深度学习框架完成预期的任务。在Caffe框架中,主要有三种结构:Blobs、Layers和Nets,因为它们是预定义的结构,所以在使用框架时不能改变。BlobsBlob是Caffe框架中的一个主要结构。它是一个包装纸。使用Caffe框架时,必须对数据进行格式化。只有这样的数据格式才能在Caffe框架中执行和处理。而且Caffe在设计的时候,很多函数和类都是预先设计好的,在执行过程中不能修改它的结构,否则函数调用不上,导致网络训练失败。Blob的格式主要由四个元素组成:Number、Channel、Height和Width。如果进行图像处理,则表示图像通道(一般彩色图像是3通道数据,Height和Width表示输入数据的大小。对于Elements,主要体现在训练过程中,因为你需要训练的时候选择一次输入多少数据,也就是一次输入的数据量,通常称为Batch。这种训练方式也可以大大缓解内存不足的问题。LayersLayers是Caffe的重要结构之一network在框架中,网络是因为Layers的作用,通过接收输入输出数据,通过内部计算最终输出,Caffe在使用网络层时,其定义方式非常简单明了,大致分为分为三个小步骤,如下:1)建立网络层,建立层与层之间的连接关系。可以通过随机初始化操作来初始化一些网络层变量;2)网络训练过程中,首先计算Forwardpropagation,在校正过程中,Layers接受上一层的输出数据作为本次的输入数据,最后通过内部计算输出。3)前向传播后,由于得到的结果与预期相差较大,通过上述反向传播进行计算,调整网络的参数值达到最优值,在反向传播计算过程中,Layers会将每次计算的梯度值存储在这一层中。Nets之前介绍的Layers是Nets的一个子元素。整个Nets是通过各个Layer的组合得到的。在这个结构中,Nets定义了网络的层、输入和输出。例如Caffe定义中最基本的隐藏层网络定义如下:name:"LogReg"layers{name:"mnist"type:DATAtop:"data"top:"label"data_param{source:"input_leveldb"batch_size:64}}layers{name:"ip"type:INNER_PRODUCTbottom:"data"top:"ip"inner_product_param{num_output:2}}layers{name:"loss"type:SOFTMAX_LOSSbottom:"ip"bottom:"label"top:"loss"}Caffe的优势作为一个开源框架,Caffe的表达结构受到很多研究者的喜爱,因为它可以鼓励更多的人去创新、修改和完善,并在实践中加以应用。在该框架中,网络的模型、设计和优化过程都是通过指令调用和执行的,不像其他工具框架需要硬编码来获取相应的操作。并且在Caffe应用中,可以使用CPU中央处理器和GPU图形图像处理器进行学习,两个处理器可以来回切换,只要在GPU机器上设置一条指令,使用GPU一般是增加的,因为它可以提高网络的训练速度,减少训练时间,提高网络的训练效率,进一步微调网络。开源框架的好处是可以被大家扩展,所以Caffe推动了自己的发展。贾扬清创建Caffe后,短短一年时间,就有上千名研究爱好者参与开发,他们都做出了巨大的贡献,才会有一个完整的深度学习框架,现在这个框架还在优化和发展中。快速上手,因为网络模型不需要用代码的形式来表达,只需要用文本的形式来表达,并且模型已经在Caffe框架中定义好了。Caffe的出现的特点是在学术机构的实验室和行业相关部门的使用。因为Caffe与NVIDIAGPU结合,可以达到很高的效率。有一个实验,用英伟达出品的K40图形图像处理器训练图像,一天可以执行超过6000万张训练图像。现在它的性能速度可以说是常用的深度学习框架中最快的框架之一。使用其他任务方便快捷,因为Caffe定义了每一层的类型,只需要通过简单的调用定义自己设计的网络模型即可。TFGoogle在2011年推出了一个人工深度学习系统——DistBelief。借助DistBelief,Google能够扫描其数据中心的数千个核心并构建更大的神经网络。该系统将Google应用程序中的语音识别提高了25%,在GooglePhotos中构建了图像搜索,并为Google的图像标题匹配实验提供了支持。DistBelief仍然有很多不足和局限。它很难设置,而且与Google的内部基础架构联系得太紧密,因此无法共享研究代码机会。针对上述问题,谷歌于2015年在GoogleResearchBlog中宣布推出新一代人工智能学习系统——TensorFlow。TensorFlow是异构分布式系统上的大规模机器学习框架。具有良好的可移植性(从手机等小型移动设备到大型集群),支持多种深度学习模型。按照谷歌的说法,TensorFlow全面、灵活、便携、易于使用,更重要的是,它是开源的。同时,TensorFlow的速度相比上一代DistBelief有了很大的提升。在一些基准测试中,TensorFlow的分数是第一代系统的两倍。尽管如此,TensorFlow仍然不如大多数其他开源框架高效。但随着TensorFlow源代码的逐步开放,对cuDNN等新硬件、新设备、新加速的支持不断完善,成为了极具潜力的深度学习。有兴趣的可以体验一下PlayGround,这是一个用于教学目的的简单神经网络在线演示和实验的图形化平台,非常强大地可视化神经网络的训练过程。用它在浏览器中训练神经网络,对Tensorflow有一个感性的认识。TF缺点TensorFlow的每一个计算流程都必须构造成静态图,并且缺少符号循环(symbolicloops),会造成一些计算困难;没有对视频识别有用的三维卷积(3-Dconvolution);虽然现在TensorFlow比起始版本快58倍,但在执行性能方面仍然落后于竞争对手。让我们今天去这个职位。感觉讲了很多,但不是很深入。有机会来一个关于深度学习工具的话题。一起慢慢聊吧!
