深度介入编译器
‘壹’ 人工智能 python深度学习库有哪些
由于Python的易用性和可扩展性,众多深度学习框架提供了Python接口,其中较为流行的深度学习库如下:
第一:Caffe
Caffe是一个以表达式、速度和模块化为核心的深度学习框架,具备清晰、可读性高和快速的特性,在视频、图像处理方面应用较多。
Caffe中的网络结构与优化都以配置文件形式定义,容易上手,无须通过代码构建网络;网络训练速度快,能够训练大型数据集与State-of-the-art的模型,模块化的组件可以方便地拓展到新的模型与学习任务上。
第二:Theano
Theano诞生于2008年,是一个高性能的符号计算及深度学习库,被认为是深度学习库的始祖之一,也被认为是深度学习研究和应用的重要标准之一。其核心是一个数学表达式的编译器,专门为处理大规模神经网络训练的计算而设计。
Theano很好地整合了Numpy,可以直接使用Numpy的Ndarray,使得API接口学习成本大为降低;其计算稳定性好,可以精准地计算输出值很小的函数;可动态地生成C或者CUDA代码,用来编译成高效的机器代码。
第三:TensorFlow
TensorFlow是相对高阶的机器学习库,其核心代码使用C++编写,并支持自动求导,使得用户可以方便地设计神经网络结构,不需要亲自编写C++或CUDA代码,也无须通过反向传播求解梯度。由于底层使用C++语言编写,运行效率得到了保证,并简化线上部署的复杂度。
TensorFlow不只局限于神经网络,其数据流式图还支持非常自由的算法表达,也可以轻松实现深度学习以外的机器学习算法。
第四:Keras
Keras是一个高度模块化的神经网络库,使用Python实现,并可以同时运行在TensorFlow和Theano上。
Keras专精于深度学习,其提供了到目前为止最方便的API,用户仅需将高级的模块拼在一起便可设计神经网络,大大降低了编程开销与理解开销。
‘贰’ 为什么需要改变编译器
答案如下:
1.编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
2.解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.
3.因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式).
4.编译是将源程序翻译成可执行的目标代码,翻译与执行是分开的;而解释是对源程序的翻译与执行一次性完成,不生成可存储的目标代码。这只是表象,二者背后的最大区别是:对解释执行而言,程序运行时的控制权在解释器而不在用户程序;对编译执行而言,运行时的控制权在用户程序。
4.编译器在优化过程中采用了自动或半自动的代码生成用以替代人工优化。人的精力是有限的,通过(接近无限)的算力去适配每一个应用场景看到的网络,改变编译器,这是编译技术比人工路线强的所在。
‘叁’ 在电脑上用易语言编程用什么软件最好
c语言编程软件有哪些。
Mcrosoft Visual C++ 、Microsoft Visual Studio、 DEV C++、Code::Blocks、Borland C++、WaTCom C++、Borland C++ Builder、GNU DJGPP C++、Lccwin32 C Compiler3.1、High C、Turb C、gcc、C-Free和Win-TC、My Tc等等,由于C语言比较成熟,所以编程环境很多。
2.C语言入门,不推荐使用VC,因为VC不但庞大,而且应用开发比较高级。入门编程荐使用Dev-C 和 WIN-TC。
1)WIN-TC,该软件使用TC2为内核,提供WINDOWS平台的开发界面,因此也就支持WINDOWS平台下的功能,例如剪切、复制、粘贴和查找替换等。而且在功能上也有它的独特特色例如语法加亮、C内嵌汇编、自定义扩展库的支持等。并提供一组相关辅助工具令你在编程过程中更加游刃有余。
2)Dev-C ,Dev-C 是一个Windows下的C和C 程序的集成开发环境。它使用MingW32/GCC编译器,遵循C/C 标准。开发环境包括多页面窗口、工程编辑器以及调试器等,在工程编辑器中集合了编辑器、编译器、连接程序和执行程序,提供高亮度语法显示的,以减少编辑错误,还有完善的调试功能,能够适合初学者与编程高手的不同需求,是学习C或C的首选开发工具。
‘肆’ 计算机程序设计语言分为四类
计算机程序设计语言分为四类
为了让计算机解决实际问题,人们从一开始就不断地开展程序设计工作,这里的“程序”就是计算机能够执行的指令代码(机器码和其它代码)。程序设计人员还必须在一个被称为“计算机程序设计语言(也可以称为编译或解释性语言)”的环境中开展编程。
计算机程序设计语言
是指程序设计人员和计算机都可以识别的程序代码(包括0和1机器代码)规则,是人与计算机进行交流的工具,可以把程序设计语言分为以下四类。
1.机器语言
机器语言是一种CPU指令系统, 被称为CPU的机器语言, 它是CPU可以识别的一组由0和1序列构成的指令码。用机器语言编程序, 就是从所使用的CPU的指令系统中挑选合适的指令,组成一个指令序列。这种程序可以被机器直接理解并执行,速度很快,但由于不直观、难记、难以理解、不易查错、开发周期长,很难推广应用下去,因此,只有专业人员在编制对于执行速度有很高要求的程序时才采用这种代码。
2.汇编语言
为了减轻编程者的劳动强度,人们使用一些用于帮助记忆的符号来代替机器语言中的0、1机器指令代码序列,使得编程效率和质量得到极大的提高。把这些助记符组成的指令系统称为汇编语言。汇编语言是指令与机器语言指令基本上是一一对应的。由于这些助记符号不能被机器直接识别,所以汇编语言代码程序必须被编译成机器语言程序才能被机器理解和执行。编译之前的程序被称为“源程序”,编译之后的被称为“目标程序”。
汇编语言与机器语言都是因CPU的不同而不同, 所以统称为“面向机器的语言”。使用这类语言,可以编出效率极高的程序,但对程序设计人员的要求也很高。他们不仅要考虑解题思路,还要熟悉机器的内部结构,一般的人很难掌握这类程序设计语言,还是不能大范围推广应用。
3.面向过程的语言
面向过程思想是一种以过程为中心的编程思想,是以什么正在发生为主要目标进行编程。面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
把解题的过程看做是数据被加工的过程,这种程序设计语言称为面向过程的程序设计语言。常用的面向过程的语言有C、Fortran、Basic、Pascal等。使用这类编程语言,程序设计者可以不关心机器的内部结构甚至工作原理,把主要精力集中在解决问题的思路和方法上。这类摆脱了硬件束缚的程序设计语言被统称为高级语言。高级语言的出现大大地提高了编程效率,使人们能够开发出越来越大、功能越来越强的程序。要运行使用面向过程语言编制的程序,一般有两种方法:(1)解释型,(2)编译型。
解释型语言在程序编制完成之后,按照程序编排的顺序一条条地把指令语句转换为机器代码然后执行。因为每次运行中每条语句都要进行转换和执行这两个步骤,所以解释型语言的执行速度不快,并且每次执行都离不开语言环境。
编译型语言在程序设计完成之后,使用语言本身提供的编译(Compile)程序与连接(Link)程序把源程序编译连接成为可执行文件(扩展名一般为“.exe”)。可执行文件就能脱离语言设计环境独立运行了。当前比较流行的程序设计语言多数是编译型的。也有些语言既可以解释型地运行程序,也可以对程序进行编译连接。
解释型运行往往用在程序的调试过程中,而设计完成之后就可以把它编译成为独立的可执行文件。
计算机只能识别0、1,并不能能识别其他的语言。程序员在开发的时候,可以使用很多种语言,如c语言,java,python。使用不同的语言开发出来的程序,如果想要执行,那么最终必须要变成机器语言才能执行。那怎么样变成机器语言,我们大家可以找一个翻译。这个翻译就专门负责把编写的代码翻译成机器能够识别的机器语言,叫做编译器,不同的编译器,就负责把不同的语言翻译成计算机能够识别的机器语言来,这个就是编译器的作用。
根据编译器对源代码翻译的方式不同,编译器分成两种类型,一种类型叫编译器。而另一种类型叫做解释器。
使用编译器编译的语言,通常称为编译性语言,而使用解释器解释的语言叫做解释性语什么又是编译性语言,什么又是解释性语言?
这两种语言到底是怎么工作的?最典型的代表就是C语言、C 这种语言都叫做编译性语言。编译性语言是怎么工作的,人们来看c语言或者C 的程序在自己的开发环境内来编写代码。那当程序开发完成之后,成员就把开发完成的源代码统一交给编译器。编译器对所有源代码进行翻译。翻译成机器语言,并且最终保存成一个可执行的文件,当我们需要执行这个文件的时候,在windows下最常见的操作就是双击一下可执行文件的图标,就可以把这个文件交给CPU去执行。编译性语言的特点,程序员在自己的开发环境内开发程序开发完成之后,统一交给编译器。编译器统一进行翻译,并且最终生成一个独立的可执行文件。用户在需要的时候,就可以执行可执行文件看到最终的效果。
解释性语言的特点,python语言就是一个解释性语言,那解释性语言在开发的时候,跟编译性语言并没有太大的区别,成员仍然是在自己的开发环境内来编写代码。假设现在写了三行代码,那这三行代码怎么运行啊?要想运行解释性语言,我们就把这个源程序丢给解释器。解释器拿到源程序之后,会按照从上向下的方式逐一读取代码中央解释器称一行一行来翻译的。首先读出第一行代码,就立刻翻译成机器码。翻译完成之后,就丢给CPU去执行CPU在执行的过程中,解释器在读取第二行代码进行翻译。翻译完成之后,再交给CPU去执行,然后依次类推,从上到下一次读取每行代码读取一行。翻译一行执行一行。
编译性语言是统一编译一次性执行。
解释性语言是一行一行代码进行翻译,翻译一行执行一行,编译性语言最终产生的文件执行速度快,解释性语言执行速度慢。因为最终生成的可执行文件中不需要任何的介入。
解释性语言不同。解释语言在执行的时候,必须是翻译一行执行一行。解释性语言的执行速度就相对慢一些,需要考虑的因素就所谓跨平台,就是我们开发完成的程序,既可以在windows上运行,也可以在linux上运行,还可以在MAC上运行一次编写在任何一个平台上都能运行,这种方式就叫做跨平台。
如果我们使用的编译器是在windows平台上编译的程序,那么最终生成的可执行文件只能在windows平台上运行,它并不能够在linux上运行,并不能也不能在MAC上运行,这个是编译性语言的特点。如果使用某一个操作系统的编译器,那么,这个编译器最终生成的可执行文件就只能在这个操作系统上运行,而不能在其他操作系统上运行。
解释性语言相对来说就简单了,程序员仍按照习惯的方式来编写代码,程序编写完成之后,如果想要执行,如果是windows,就在windows上安装一套windows的解释器,如果想在linux上执行呢,就在linux上安装一套linux的解释器,就是在不同的操作系统上安装不同的解释器。既然在每个操作系统上都已经安装了解释器,那源代码就不需要任何的修改。这个就是解释性语言在跨平台上的优势。至于程序的执行是解释器的工作,只需要在不同操作系统中安装不同的解释器同一份代码就可以在不同操作系统中执行了。
开发完成的源程序要想执行,就必须找一个翻译性语言要找的翻译叫做编译器,解释性语言要找的翻译叫做解释器,而从执行效率上讲,编译性语言执行效率要比解释性语言执行效率高,但是从跨平台来讲解释性语言跨平台能力要比边形语言跨平台能力要强好。
4.面向对象的程序设计语言
随着像Windows这样具有图形用户界面的操作系统的广泛使用,人们又形成了一种面向对象的程序设计思想。这种思想把整个现实世界或是其一部分看做是由不同种类对象(Object)组成的有机整体。同一类型的对象既有共同点,又有各自不同的特性。各种类型的对象之间通过发送消息进行联系,消息能够激发对象做出相应的反应,从而构成了一个运动的整体。采用了面向对象思想的程序设计语言就是面向对象的程序设计语言,当前使用较多的面向对象语言有Visual_Basic、C++、Java等。
面向对象语言:是一类以对象作为基本程序结构单位的程序设计语言,指用于描述的设计是以对象为核心,而对象是程序运行时刻的基本成分。面向对象语言:系统中的基本构件可识认为一组可识别的离散对象,在基本层次关系的不同类中共享数据和操作。
Python是一个完全面向对象的语言,那什么又是面向对象?
面向对象是一种思维方式,同时也是一门程序设计技术。程序员每天的工作是使用自己熟悉的语言来解决一个又一个问题,那在解决问题的时候,有两种方式,第一种方式要解决这个问题,自己一步一步把这个问题解决掉,自己来逐步的解决一个问题。第二种方式就是面向对象的这种解决问题的方法,用面向对象来解决一个问题的时候,通常我们要首先考虑由谁(这里指对象,而其具备解决该问题能力)来做。找一个别人来帮助自己做事情,而我们找到了这个对象,已经具备了解决这个问题的能力。这个对象做完之后,问题也同样得到了解决。这个就是面向对象的解决方法。
第一种方式自己逐步来解决问题的每一个步骤,第二种方式我们来找一个对象替自己做事情,对象又具有做这件事情的能力。
如果开发程序,当然更倾向于第二种方式。找个对象来完成,这个思路就是面向对象的思维方式。在做事情的时候,找一个具有能力的对象,帮我们把问题解决掉就好了。这个就是从思维方式角度所谓面向对象的概念。
python是一个完全面向对象的语言。在python中,无论是函数,模块,数字以及字符串等等等等,全部都是对象。在python中所有的东西都是对象,python这门语言中已经提供有各种各样,具有很强大能力的对象。在工作中遇到不同的问题,就找不同的对象来帮我们解决问题就可以。这个是python面向对象语言的一个特点,同时大家在看第二个特点。Python应用一个强大的标准库,所以强大的标准库在python这门语言中已经内置有非常非常多,是具有强大能力的对象。当在开发时遇到不同的问题,可以在标准库中来找不同的对象,帮我们把问题解决掉就好,在python的标准库中提供有类似于系统管理,网络文本处理等,它的功能还是非常强大的。第三个特点:Python社区提供了大量的第三方模块,什么又是第三方模块?所谓第三方模块就是跟标准库类似的一个库,但是第三方模块并不是由官方来开发的,而是由网络上非常非常多python爱好者来开发的。那这些爱好者为什么要开发第三方模块原因很简单,因为标准估虽然很强大,但是标准库的力量有限,而全世界有非常多的python爱好者以及开发团队或者公司。针对当今市场上最主流的一些应用技术开发有非常多的模块,把自己开发好的这些模块开源出来。这些模块都涉及到哪些领域,分别包括有科学计算,人工智能机器学习,以及web开发大数据等。在python社区中有大量的第三方模块,而这些第三方模块在使用的,基本的方式是跟标准库类似的,python这门语言既有一个能力非常强大的标准库,又有一个非常非常丰富的第三方模块。那么,作为python的成员在开发的时候是不就非常容易了。面向对象的思维方式,就是在做事情之前,先找一个具有能力的对象,帮我们来解决问题。而python的标准库也好。Python第三方模块也好,实际上内置有大量的具有强大能力的对象,我们在使用python进行日常开发时,只需要从标准库中或者第三方模块中找到。能够帮我们解决问题的对象,并且使用对象已经具有的能力,通常就可以快速的把我们日常开发中需要解决的问题搞定了,Python提供有强大的标准库和第三方模块。在开发时,只需要找到相应具有能力的对象,就可以解决日常工作中遇到的问题了。
程序设计语言的支持环境
操作系统是计算机最重要的一类软件,其他程序的运行都要在操作系统支持与控制下进行。设计者编制的源程序并不能直接操作计算机,而要在要具体的程序设计语言的支持下通过操作系统来完成。它们之间如何相互配合,因语言、操作系统、计算机硬件的不同而不同。大多数情况下,编程人员没必要关心程序每一个细节。
‘伍’ 各种编程语言的深度学习库整理大全!
各种编程语言的深度学习库整理大全!
Python1. Theano是一个python类库,用数组向量来定义和计算数学表达式。它使得在Python环境下编写深度学习算法变得简单。在它基础之上还搭建了许多类库。
1.Keras是一个简洁、高度模块化的神经网络库,它的设计参考了Torch,用Python语言编写,支持调用GPU和CPU优化后的Theano运算。
2.Pylearn2是一个集成大量深度学习常见模型和训练算法的库,如随机梯度下降等。它的功能库都是基于Theano之上。
3.Lasagne是一个搭建和训练神经网络的轻量级封装库,基于Theano。它遵循简洁化、透明化、模块化、实用化和专一化的原则。
4.Blocks也是一个基于Theano的帮助搭建神经网络的框架。
2. Caffe是深度学习的框架,它注重于代码的表达形式、运算速度以及模块化程度。它是由伯克利视觉和学习中心(Berkeley Vision and Learning Center, BVLC)以及社区成员共同开发。谷歌的DeepDream项目就是基于Caffe框架完成。这个框架是使用BSD许可证的C++库,并提供了Python调用接口。
3. nolearn囊括了大量的现有神经网络函数库的封装和抽象接口、大名鼎鼎的Lasagne以及一些机器学习的常用模块。
4. Genism也是一个用Python编写的深度学习小工具,采用高效的算法来处理大规模文本数据。
5. Chainer在深度学习的理论算法和实际应用之间架起一座桥梁。它的特点是强大、灵活、直观,被认为是深度学习的灵活框架。
6. deepnet是基于GPU的深度学习算法函数库,使用Python语言开发,实现了前馈神经网络(FNN)、受限玻尔兹曼机(RBM)、深度信念网络(DBN)、自编码器(AE)、深度玻尔兹曼机(DBM)和卷积神经网络(CNN)等算法。
7. Hebel也是深度学习和神经网络的一个Python库,它通过pyCUDA控制支持CUDA的GPU加速。它实现了最重要的几类神经网络模型,提供了多种激活函数和模型训练方法,例如momentum、Nesterov momentum、dropout、和early stopping等方法。
8. CXXNET是一个基于MShadow开发的快速、简洁的分布式深度学习框架。它是一个轻量级、易扩展的C++/CUDA神经网络工具箱,提供友好的Python/Matlab接口来进行训练和预测。
9. DeepPy是基于NumPy的深度学习框架。
10. DeepLearning是一个用C++和Python共同开发的深度学习函数库。
11. Neon是Nervana System 的深度学习框架,使用Python开发。
Matlab
1. ConvNet 卷积神经网络是一类深度学习分类算法,它可以从原始数据中自主学习有用的特征,通过调节权重值来实现。
2. DeepLearnToolBox是用于深度学习的Matlab/Octave工具箱,它包含深度信念网络(DBN)、栈式自编码器(stacked AE)、卷积神经网络(CNN)等算法。
3. cuda-convet是一套卷积神经网络(CNN)代码,也适用于前馈神经网络,使用C++/CUDA进行运算。它能对任意深度的多层神经网络建模。只要是有向无环图的网络结构都可以。训练过程采用反向传播算法(BP算法)。
4. MatConvNet是一个面向计算机视觉应用的卷积神经网络(CNN)Matlab工具箱。它简单高效,能够运行和学习最先进的机器学习算法。
CPP
1. eblearn是开源的机器学习C++封装库,由Yann LeCun主导的纽约大学机器学习实验室开发。它用基于能量的模型实现卷积神经网络,并提供可视化交互界面(GUI)、示例以及示范教程。
2. SINGA是Apache软件基金会支持的一个项目,它的设计目标是在现有系统上提供通用的分布式模型训练算法。
3. NVIDIA DIGITS是用于开发、训练和可视化深度神经网络的一套新系统。它把深度学习的强大功能用浏览器界面呈现出来,使得数据科学家和研究员可以实时地可视化神经网络行为,快速地设计出最适合数据的深度神经网络。
4. Intel? Deep Learning Framework提供了Intel?平台加速深度卷积神经网络的一个统一平台。
Java
1. N-Dimensional Arrays for Java (ND4J) 是JVM平台的科学计算函数库。它主要用于产品中,也就是说函数的设计需求是运算速度快、存储空间最省。
2. Deeplearning4j 是第一款商业级别的开源分布式深度学习类库,用Java和Scala编写。它的设计目的是为了在商业环境下使用,而不是作为一款研究工具。
3. Encog是一个机器学习的高级框架,涵盖支持向量机、人工神经网络、遗传编程、贝叶斯网络、隐马可夫模型等,也支持遗传算法。
JavaScript
1. Convnet.js 由JavaScript编写,是一个完全在浏览器内完成训练深度学习模型(主要是神经网络)的封装库。不需要其它软件,不需要编译器,不需要安装包,不需要GPU,甚至不费吹灰之力。
Lua
1. Torch是一款广泛适用于各种机器学习算法的科学计算框架。它使用容易,用快速的脚本语言LuaJit开发,底层是C/CUDA实现。Torch基于Lua编程语言。
Julia
1. Mocha是Julia的深度学习框架,受C++框架Caffe的启发。Mocha中通用随机梯度求解程序和通用模块的高效实现,可以用来训练深度/浅层(卷积)神经网络,可以通过(栈式)自编码器配合非监督式预训练(可选)完成。它的优势特性包括模块化结构、提供上层接口,可能还有速度、兼容性等更多特性。
Lisp
1. Lush(Lisp Universal Shell)是一种面向对象的编程语言,面向对大规模数值和图形应用感兴趣的广大研究员、实验员和工程师们。它拥有机器学习的函数库,其中包含丰富的深度学习库。
Haskell
1. DNNGraph是Haskell用于深度神经网络模型生成的领域特定语言(DSL)。
.NET
1. Accord.NET 是完全用C#编写的.NET机器学习框架,包括音频和图像处理的类库。它是产品级的完整框架,用于计算机视觉、计算机音频、信号处理和统计应用领域。
R
1. darch包可以用来生成多层神经网络(深度结构)。训练的方法包括了对比散度的预训练和众所周知的训练算法(如反向传播法或共轭梯度法)的细调。
2. deepnet实现了许多深度学习框架和神经网络算法,包括反向传播(BP)、受限玻尔兹曼机(RBM)、深度信念网络(DBP)、深度自编码器(Deep autoencoder)等等。
‘陆’ 13个最常用的Python深度学习库介绍
13个最常用的Python深度学习库介绍
如果你对深度学习和卷积神经网络感兴趣,但是并不知道从哪里开始,也不知道使用哪种库,那么这里就为你提供了许多帮助。
在这篇文章里,我详细解读了9个我最喜欢的Python深度学习库。
这个名单并不详尽,它只是我在计算机视觉的职业生涯中使用并在某个时间段发现特别有用的一个库的列表。
这其中的一些库我比别人用的多很多,尤其是Keras、mxnet和sklearn-theano。
其他的一些我是间接的使用,比如Theano和TensorFlow(库包括Keras、deepy和Blocks等)。
另外的我只是在一些特别的任务中用过(比如nolearn和他们的Deep Belief Network implementation)。
这篇文章的目的是向你介绍这些库。我建议你认真了解这里的每一个库,然后在某个具体工作情境中你就可以确定一个最适用的库。
我想再次重申,这份名单并不详尽。此外,由于我是计算机视觉研究人员并长期活跃在这个领域,对卷积神经网络(细胞神经网络)方面的库会关注更多。
我把这个深度学习库的列表分为三个部分。
第一部分是比较流行的库,你可能已经很熟悉了。对于这些库,我提供了一个通俗的、高层次的概述。然后,针对每个库我详细解说了我的喜欢之处和不喜欢之处,并列举了一些适当的应用案例。
第二部分进入到我个人最喜欢的深度学习库,也是我日常工作中使用最多的,包括:Keras、mxnet和sklearn-theano等。
最后,我对第一部分中不经常使用的库做了一个“福利”板块,你或许还会从中发现有用的或者是在第二板块中我还没有尝试过但看起来很有趣的库。
接下来就让我们继续探索。
针对初学者:
Caffe
提到“深度学习库”就不可能不说到Caffe。事实上,自从你打开这个页面学习深度学习库,我就敢打保票你肯定听说Caffe。
那么,究竟Caffe是什么呢?
Caffe是由Berkeley Vision and Learning Center(BVLC)建立的深度学习框架。它是模块化的,速度极快。而且被应用于学术界和产业界的start-of-the-art应用程序中。
事实上,如果你去翻阅最新的深度学习出版物(也提供源代码),你就很可能会在它们相关的GitHub库中找到Caffe模型。
虽然Caffe本身并不是一个Python库,但它提供绑定到Python上的编程语言。我们通常在新领域开拓网络的时候使用这些绑定。
我把Caffe放在这个列表的原因是它几乎被应用在各个方面。你可以在一个空白文档里定义你的模型架构和解决方案,建立一个JSON文件类型的.prototxt配置文件。Caffe二进制文件提取这些.prototxt文件并培训你的网络。Caffe完成培训之后,你可以把你的网络和经过分类的新图像通过Caffe二进制文件,更好的就直接通过Python或MATLAB的API。
虽然我很喜欢Caffe的性能(它每天可以在K40 GPU上处理60万张图片),但相比之下我更喜欢Keras和mxnet。
主要的原因是,在.prototxt文件内部构建架构可能会变得相当乏味和无聊。更重要的是, Caffe不能用编程方式调整超参数!由于这两个原因,在基于Python的API中我倾向于对允许我实现终端到终端联播网的库倾斜(包括交叉验证和调整超参数)。
Theano
在最开始我想说Theano是美丽的。如果没有Theano,我们根本不会达到现有的深度学习库的数量(特别是在Python)。同样的,如果没有numpy,我们就不会有SciPy、scikit-learn和 scikit-image,,同样可以说是关于Theano和深度学习更高级别的抽象。
非常核心的是,Theano是一个Python库,用来定义、优化和评估涉及多维数组的数学表达式。 Theano通过与numpy的紧密集成,透明地使用GPU来完成这些工作。
虽然可以利用Theano建立深度学习网络,但我倾向于认为Theano是神经网络的基石,同样的numpy是作为科学计算的基石。事实上,大多数我在文章中提到的库都是围绕着Theano,使自己变得更加便利。
不要误会我的意思,我爱Theano,我只是不喜欢用Theano编写代码。
在Theano建设卷积神经网络就像只用本机Python中的numpy写一个定制的支持向量机(SVM),当然这个对比并不是很完美。
你可以做到吗?
当然可以。
它值得花费您的时间和精力吗?
嗯,也许吧。这取决于你是否想摆脱低级别或你的应用是否需要。
就个人而言,我宁愿使用像Keras这样的库,它把Theano包装成更有人性化的API,同样的方式,scikit-learn使机器学习算法工作变得更加容易。
TensorFlow
与Theano类似,TensorFlow是使用数据流图进行数值计算的开源库(这是所有神经网络固有的特征)。最初由谷歌的机器智能研究机构内的Google Brain Team研究人员开发,此后库一直开源,并提供给公众。
相比于Theano ,TensorFlow的主要优点是分布式计算,特别是在多GPU的环境中(虽然这是Theano正在攻克的项目)。
除了用TensorFlow而不是Theano替换Keras后端,对于TensorFlow库我并没有太多的经验。然而在接下来的几个月里,我希望这有所改变。
Lasagne
Lasagne是Theano中用于构建和训练网络的轻量级库。这里的关键词是轻量级的,也就意味着它不是一个像Keras一样围绕着Theano的重包装的库。虽然这会导致你的代码更加繁琐,但它会把你从各种限制中解脱出来,同时还可以让您根据Theano进行模块化的构建。
简而言之:Lasagne的功能是Theano的低级编程和Keras的高级抽象之间的一个折中。
我最喜欢的:
Keras
如果我必须选出一个最喜欢的深度学习Python库,我将很难在Keras和mxnet中做出抉择——但最后,我想我会选Keras。
说真的,Keras的好处我说都说不完。
Keras是一个最低限度的、模块化的神经网络库,可以使用Theano或TensorFlow作为后端。Keras最主要的用户体验是,从构思到产生结果将会是一个非常迅速的过程。
在Keras中架构网络设计是十分轻松自然的。它包括一些state-of-the-art中针对优化(Adam,RMSProp)、标准化(BatchNorm)和激活层(PReLU,ELU,LeakyReLU)最新的算法。
Keras也非常注重卷积神经网络,这也是我十分需要的。无论它是有意还是无意的,我觉得从计算机视觉的角度来看这是非常有价值的。
更重要的是,你既可以轻松地构建基于序列的网络(其中输入线性流经网络)又可以创建基于图形的网络(输入可以“跳过”某些层直接和后面对接)。这使得创建像GoogLeNet和SqueezeNet这样复杂的网络结构变得容易得多。
我认为Keras唯一的问题是它不支持多GPU环境中并行地训练网络。这可能会也可能不会成为你的大忌。
如果我想尽快地训练网络,那么我可能会使用mxnet。但是如果我需要调整超参数,我就会用Keras设置四个独立的实验(分别在我的Titan X GPUs上运行)并评估结果。
mxnet
我第二喜欢的深度学习Python库无疑就是mxnet(重点也是训练图像分类网络)。虽然在mxnet中站立一个网络可能需要较多的代码,但它会提供给你惊人数量的语言绑定(C ++、Python、R、JavaScript等)。
Mxnet库真正出色的是分布式计算,它支持在多个CPU / GPU机训练你的网络,甚至可以在AWS、Azure以及YARN集群。
它确实需要更多的代码来设立一个实验并在mxnet上运行(与Keras相比),但如果你需要跨多个GPU或系统分配训练,我推荐mxnet。
sklearn-theano
有时候你并不需要终端到终端的培养一个卷积神经网络。相反,你需要把CNN看作一个特征提取器。当你没有足够的数据来从头培养一个完整的CNN时它就会变得特别有用。仅仅需要把你的输入图像放入流行的预先训练架构,如OverFeat、AlexNet、VGGNet或GoogLeNet,然后从FC层提取特征(或任何您要使用的层)。
总之,这就是sklearn-theano的功能所在。你不能用它从头到尾的训练一个模型,但它的神奇之处就是可以把网络作为特征提取器。当需要评估一个特定的问题是否适合使用深度学习来解决时,我倾向于使用这个库作为我的第一手判断。
nolearn
我在PyImageSearch博客上用过几次nolearn,主要是在我的MacBook Pro上进行一些初步的GPU实验和在Amazon EC2 GPU实例中进行深度学习。
Keras把 Theano和TensorFlow包装成了更具人性化的API,而nolearn也为Lasagne做了相同的事。此外,nolearn中所有的代码都是与scikit-learn兼容的,这对我来说绝对是个超级的福利。
我个人不使用nolearn做卷积神经网络(CNNs),但你当然也可以用(我更喜欢用Keras和mxnet来做CNNs)。我主要用nolearn来制作Deep Belief Networks (DBNs)。
DIGITS
DIGITS并不是一个真正的深度学习库(虽然它是用Python写的)。DIGITS(深度学习GPU培训系统)实际上是用于培训Caffe深度学习模式的web应用程序(虽然我认为你可以破解源代码然后使用Caffe以外其他的后端进行工作,但这听起来就像一场噩梦)。
如果你曾经用过Caffe,那么你就会知道通过它的终端来定义.prototxt文件、生成图像数据、运行网络并监管你的网络训练是相当繁琐的。 DIGITS旨在通过让你在浏览器中执行这些任务来解决这个问题。
此外,DIGITS的用户界面非常出色,它可以为你提供有价值的统计数据和图表作为你的模型训练。另外,你可以通过各种输入轻松地可视化网络中的激活层。最后,如果您想测试一个特定的图像,您可以把图片上传到你的DIGITS服务器或进入图片的URL,然后你的Caffe模型将会自动分类图像并把结果显示在浏览器中。干净利落!
Blocks
说实话,虽然我一直想尝试,但截至目前我的确从来没用过Blocks(这也是我把它包括在这个列表里的原因)。就像许多个在这个列表中的其他库一样,Blocks建立在Theano之上,呈现出一个用户友好型的API。
deepy
如果让你猜deepy是围绕哪个库建立的,你会猜什么?
没错,就是Theano。
我记得在前一段时间用过deepy(做了初始提交),但在接下里的大概6-8个月我都没有碰它了。我打算在接下来的博客文章里再尝试一下。
pylearn2
虽然我从没有主动地使用pylearn2,但由于历史原因,我觉得很有必要把它包括在这个列表里。 Pylearn2不仅仅是一般的机器学习库(地位类似于scikit-learn),也包含了深度学习算法的实现。
对于pylearn2我最大的担忧就是(在撰写本文时),它没有一个活跃的开发者。正因为如此,相比于像Keras和mxnet这样的有积极维护的库,推荐pylearn2我还有些犹豫。
Deeplearning4j
这本应是一个基于Python的列表,但我想我会把Deeplearning4j包括在这里,主要是出于对他们所做事迹的无比崇敬——Deeplearning4j为JVM建立了一个开源的、分布式的深度学习库。
如果您在企业工作,你可能会有一个塞满了用过的Hadoop和MapRece服务器的储存器。也许这些你还在用,也许早就不用了。
你怎样才能把这些相同的服务器应用到深度学习里?
事实证明是可以的——你只需要Deeplearning4j。
总计
以上就是本文关于13个最常用的Python深度学习库介绍的全部内容
‘柒’ 深度linux的arm-linux-gnueabihf-gcc编译参数如何配
一般来说,交叉编译工具是用于在一种架构的主机(例如x86)上,编译另一种主机(例如arm)运行的程序,在这个编译期间,需要用到的头文件/库,往往需要从一个叫目标文件系统(sysroot)的路径开始查找。
sysroot里包含usr,lib,usr/lib usr/include等文件夹结构和必要的头文件和库,你理解为目标机器上的整个文件系统,搬到你这台电脑上,然后作为一个文件夹存在。
交叉编译原则上不能用主机(host)的头文件,
这首先是因为编译器在查找头文件的相对路径时,交叉编译器会配置为查找目标平台架构的位置,和主机的gcc不一样,这也是为什么它去arm-linux-gnueabihf这个目录去寻找的原因。
其次主机和目标机的系统版本有差异,再加上处理器架构的差异,往往有很多兼容性问题,甚至有难以解决的编译错误。
如果一定要用本机的头文件系统来凑合,那么需要把所有的-I都列出来,即不仅需要-I/usr/include,还需要-I/usr/include/xxx,甚至要创建一些文件夹的符号链接指向你主机的这些头文件文件夹。即使这些,往往也未必成功,有些头文件不同的系统架构,会不完全一样甚至缺失。
交叉编译一般无法使用主机的库(so)文件
主机和目标机往往架构不同,库完全不能使用
可能遇到主机和目标机架构相同的情况,比如你在intel64上编译一套运行在intel64位手机的程序,但是库兼容性的问题仍然存在。
最后结论:你这个问题,如果你是为了另一套机器(比如arm开发板编译),那么需要搞一套目标机的文件系统才能顺利编译。
对了,目标文件系统需要编译了python和dev头文件/库,好多嵌入式设备裁剪的很厉害,都不用python。
