导航:首页 > 源码编译 > theano源码

theano源码

发布时间:2023-12-17 13:49:24

Ⅰ 为什么说python是人工智能的首选语言

为什么Python是人工智能技术首选的编程语言?
原因1:Python是一种说人话的语言
所谓"说人话",是指这种语言:
开发者不需要关注底层
语法简单直观
表达形式一致
我们先来看几个代码的例子:
C 语言Hello World 代码:
int main(){ printf("Hello, World!"); return 0;}
Java 语言Hello World 代码:
public class HelloWorld { public static void main(String[] args){ System.out.println("Hello World!"); }}
Python 语言Hello World代码:
print("Hello World!")
仅仅是一个Hello World程序,就能看出区别了,是不是?
编译 VS 解释
当然,仅仅是一个Hello World的话,C和Java的代码也多不了几行。
可是不要忘了,C和Java的代码要运行,都必须先经过编译的环节。
对于C语言来说,在不同的操作系统上使用什么样的编译器,也是一个需要斟酌的问题。一旦代码被到新的机器,运行环境和之前不同,还需要重新编译,而那台机器上有没有编译器还是一个问题,安装上编译器后,也许和之前最初的编译器有所区别,还得修改源代码来满足编译环境的需求……
我到底做错了什么?我只是想运行一个别人写的程序而已。
而Python则不用编译,直接运行。而且都可以不用写文件,一条条语句可以直接作为命令行运行,真的太方便了。
语言语法
和Python比,Java的语法更"啰嗦"。
从上面的例子已经可以看出,创建一个链表,Java还需要声明和逐个插入节点,而Python则可一行代码完成从链表创建到插入节点及赋值的全部操作。
Java非让你很别扭地写好几行,Python直接一句搞定。
这样的结果就是,Python写起来省事,读起来也方便。可读性远超Java。
表达风格
在10年或者更久远之前,Python经常被用来和Perl相提并论。毕竟在那个时候,C是系统级语言,Java是面向对象语言,而Python & Perl则是脚本语言的双子星。
Python和Perl在设计层面有一个非常大的区别:
Python力求让不同的人在撰写同样功能实现的代码时,所用的表达形式尽量一致;
而Perl则是故意追求表达的千姿百态,让同一个人在不同地方写同样功能时所用具体形式都不同。
从哲学层面讲,Perl的追求更加自由主义,更利于释放人类的多样化天性。然而,Perl写的程序——那叫一个乱七八糟!
如果不是想成为代码诗人,或者语言大师,只是想用尽量简单直接的方法,把事情做了,首选语言确实是Python。
原因2:强大的AI支持库
矩阵运算
NumPy由数据科学家Travis Oliphant创作,支持维度数组与矩阵运算。结合Python内置的math和random库,堪称AI数据神器!有了它们,就可以放心大胆玩矩阵了!
大家知道,不管是Machine Learning,还是Deep Learning,模型、算法、网络结构都可以用现成的,但数据是要自己负责I/O并传递给算法的。
而各种算法,实际上处理的都是矩阵和向量。
使用NumPy,矩阵的转置、求逆、求和、叉乘、点乘……都可以轻松地用一行代码搞定,行、列可以轻易抽取,矩阵分解也不过是几行代码的问题。
而且,NumPy在实现层对矩阵运算做了大量的并行化处理,通过数学运算的精巧,而不是让用户自己写多线程程序,来提升程序效率。
有了Python这种:语法简洁明了、风格统一;不需要关注底层实现;连矩阵元素都可以像在纸上写公式一样;写完公式还能自动计算出结果的编程语言,开发者就可以把工作重心放在模型和算法上了。

Ⅱ 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深度学习库介绍的全部内容

Ⅲ 如何系统地自学 Python

是否非常想学好 Python,一方面被琐事纠缠,一直没能动手,另一方面,担心学习成本太高,心里默默敲着退堂鼓?

幸运的是,Python 是一门初学者友好的编程语言,想要完全掌握它,你不必花上太多的时间和精力。

Python 的设计哲学之一就是简单易学,体现在两个方面:

Ⅳ 最受欢迎的 15 大 Python 库有哪些

Python常用库大全,看看有没有你需要的。
环境管理
管理 Python 版本和环境的工具
p – 非常简单的交互式 python 版本管理工具。
pyenv – 简单的 Python 版本管理工具。
Vex – 可以在虚拟环境中执行命令。
virtualenv – 创建独立 Python 环境的工具。
virtualenvwrapper- virtualenv 的一组扩展。
包管理
管理包和依赖的工具。
pip – Python 包和依赖关系管理工具。
pip-tools – 保证 Python 包依赖关系更新的一组工具。
conda – 跨平台,Python 二进制包管理工具。
Curdling – 管理 Python 包的命令行工具。
wheel – Python 分发的新标准,意在取代 eggs。
包仓库
本地 PyPI 仓库服务和代理。
warehouse – 下一代 PyPI。
Warehousebandersnatch – PyPA 提供的 PyPI 镜像工具。
devpi – PyPI 服务和打包/测试/分发工具。
localshop – 本地 PyPI 服务(自定义包并且自动对 PyPI 镜像)。
分发
打包为可执行文件以便分发。
PyInstaller – 将 Python 程序转换成独立的执行文件(跨平台)。
dh-virtualenv – 构建并将 virtualenv 虚拟环境作为一个 Debian 包来发布。
Nuitka – 将脚本、模块、包编译成可执行文件或扩展模块。
py2app – 将 Python 脚本变为独立软件包(Mac OS X)。
py2exe – 将 Python 脚本变为独立软件包(Windows)。
pynsist – 一个用来创建 Windows 安装程序的工具,可以在安装程序中打包 Python本身。
构建工具
将源码编译成软件。
buildout – 一个构建系统,从多个组件来创建,组装和部署应用。
BitBake – 针对嵌入式 Linux 的类似 make 的构建工具。
fabricate – 对任何语言自动找到依赖关系的构建工具。
PlatformIO – 多平台命令行构建工具。
PyBuilder – 纯 Python 实现的持续化构建工具。
SCons – 软件构建工具。
交互式解析器
交互式 Python 解析器。
IPython – 功能丰富的工具,非常有效的使用交互式 Python。
bpython- 界面丰富的 Python 解析器。
ptpython – 高级交互式Python解析器, 构建于python-prompt-toolkit 之上。
文件
文件管理和 MIME(多用途的网际邮件扩充协议)类型检测。
imghdr – (Python 标准库)检测图片类型。
mimetypes – (Python 标准库)将文件名映射为 MIME 类型。
path.py – 对 os.path 进行封装的模块。
pathlib – (Python3.4+ 标准库)跨平台的、面向对象的路径操作库。
python-magic- 文件类型检测的第三方库 libmagic 的 Python 接口。
Unipath- 用面向对象的方式操作文件和目录
watchdog – 管理文件系统事件的 API 和 shell 工具
日期和时间
操作日期和时间的类库。
arrow- 更好的 Python 日期时间操作类库。
Chronyk – Python 3 的类库,用于解析手写格式的时间和日期。
dateutil – Python datetime 模块的扩展。
delorean- 解决 Python 中有关日期处理的棘手问题的库。
moment – 一个用来处理时间和日期的Python库。灵感来自于Moment.js。
PyTime – 一个简单易用的Python模块,用于通过字符串来操作日期/时间。
pytz – 现代以及历史版本的世界时区定义。将时区数据库引入Python。
when.py – 提供用户友好的函数来帮助用户进行常用的日期和时间操作。
文本处理
用于解析和操作文本的库。
通用
chardet – 字符编码检测器,兼容 Python2 和 Python3。
difflib – (Python 标准库)帮助我们进行差异化比较。
ftfy – 让Unicode文本更完整更连贯。
fuzzywuzzy – 模糊字符串匹配。
Levenshtein – 快速计算编辑距离以及字符串的相似度。
pangu.py – 在中日韩语字符和数字字母之间添加空格。
pyfiglet -figlet 的 Python实现。
shortuuid – 一个生成器库,用以生成简洁的,明白的,URL 安全的 UUID。
unidecode – Unicode 文本的 ASCII 转换形式 。
uniout – 打印可读的字符,而不是转义的字符串。
xpinyin – 一个用于把汉字转换为拼音的库。

Ⅳ 如何有效地阅读PyTorch的源代码

最近刚开始使用theano, 经验不多,连个基本的模型都跑不通,于是去看了下Keras,源码比较简洁,可以当作theano的示例教程来看,感受如下:
文档看似很全,每个layer是干啥的,每个参数是啥都写了,但是不去读代码,实际很多人是无法从文档理解其具体用法的。这点看issue里的讨论里可以看出。同样,example似乎很多,而且都能直接run,还都是real world的数据集,看似很好,但是实际上,对于新手,如果需要的模型跟example里的不完全一样,不容易搞懂到底需要把输入输出的数据搞成啥格式。举个例子,example都是做的classification的,没有做sequence labeling的例子,如果想拿来做个pos tagging,不知道数据如何组织。当然,这些其实花一天读下代码或者好好翻翻issue讨论就可以解决了,但我相信不少人不会去认真读代码或者看讨论,而是直接换个工具。我感觉目前的doc只有懂了代码的人才能看懂,不懂得看文档还是没啥用。
2.项目很简单所以开发者不多,但是很活跃,每天都有新东西加进去。今天增加了一个新的分支后端可以用theano或者tensorflow了,不过貌似由于不支持scan,backend用tensorflow的没实现recurrent layer。他们也意识到文档的问题,觉得需要为小白用户多加点tutorial而不是光给develop看。
我没用过其他的framework,仅说keras拿来学习theano基本用法,很不错
库本身的代码,比较简单易读,我作为python菜鸟,也能看懂。目前model有sequential和grapgh两种,前者并不是指recurrent而是说网络是一层层堆的(也包括recurrent).其他的主要概念包括layer,regularizer, optimizer,objective都分离开。layer用于build每层的输出函数,model会用最后一层的输出,根据objective和每个layer的regularizer来确定最终的cost,然后在update时用optimizer来更新参数。把这四个看下加上model里的fit函数,就会用theano啦。很多模型都能cover,seq2seq这种也有现成的可用。建议不要光看example,多看看github上的 issues讨论,实在找不到,直接提问。效率方面,我不懂theano怎么优化,感觉keras的这种封装,没什么成本,跟自己用原生theano是一样的。当然,theano本身就好慢啊。。估计是我不懂用吧。。
用于测试函数式返回的数值是否有错。如果有错,该函数返回

阅读全文

与theano源码相关的资料

热点内容
海康摄像萤石云服务器 浏览:814
安卓手机怎么改安卓版名 浏览:147
雅思听力807词汇pdf 浏览:897
黄豆私人加密 浏览:192
java分钟转换小时 浏览:245
易语言服务器如何提高 浏览:591
网站主机服务器地址查看 浏览:859
算法学不会能当程序员吗 浏览:119
程序员技术交流研究 浏览:814
javaresponse文件 浏览:734
linuxrar压缩文件夹 浏览:218
魅蓝手机连接不上服务器怎么回事 浏览:379
工行app怎么改已绑定银行卡 浏览:533
oppo芯片程序员 浏览:602
oppok3应用怎么加密 浏览:327
电脑软盘怎么加密码 浏览:815
服务器光交换机有什么用 浏览:708
app上怎么拍蛙小侠 浏览:217
志高聊天app怎么下载 浏览:635
邮政app怎么不能扫付款码 浏览:559