Theano 中文文档 0.9 - 3. Theano一览

3. Theano一览

译者:Python 文档协作翻译小组,原文:Theano at a Glance

本文以 CC BY-NC-SA 4.0 协议发布,转载请保留作者署名和文章出处。

Python 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606。

Theano是一个Python库,它允许你定义、优化和求值数学表达式,特别是具有多维数组(numpy.ndarray)的数学表达式。对于涉及大量数据的问题,使用Theano可以获得与手工编写的C实现不相上下的速度。它还可以通过利用最近的GPU超过CPU上的C多个数量级。

Theano将计算机代数系统(CAS)的各个方面与优化编译器的各个方面相结合。它还可以为许多数学运算生成定制的C代码。CAS与优化编译的这种组合对于复杂数学表达式重复求值并且求值速度很关键的任务特别有用。对于许多不同的表达式每个求值一次的情况,Theano可以最小化编译/分析的开销,但仍然提供诸如自动微分等符号特征。

Theano的编译器对这些符号表达式应用许多不同复杂度的优化。这些优化包括,但不限于:

  • 使用GPU进行计算
  • 恒定折叠
  • 合并相似的子图,避免冗余计算
  • 算术简化(例如x*y/x -> y, --x -> x
  • 在各种上下文中插入高效的BLAS操作(例如GEMM
  • 使用内存别名来避免计算
  • 使用就地操作,无论它涉不涉及到别名
  • 元素子表达式的循环融合
  • 数值稳定性的改进(例如和)
  • 完整列表请参阅优化

Theano是在LISA实验室编写的,以支持高效机器学习算法的快速开发。Theano以希腊数学家命名,她可能是毕达哥拉斯的妻子。Theano根据BSD许可证(link)发布。

先睹为快

这里是如何使用Theano的示例。它没有展示Theano的许多功能,但它具体说明了Theano是什么。

import theano
from theano import tensor

# declare two symbolic floating-point scalars
a = tensor.dscalar()
b = tensor.dscalar()

# create a simple expression
c = a + b

# convert the expression into a callable object that takes (a,b)
# values as input and computes a value for c
f = theano.function([a,b], c)

# bind 1.5 to 'a', 2.5 to 'b', and evaluate 'c'
assert 4.0 == f(1.5, 2.5)

Theano不是一个正常意义上的编程语言,因为你在Python中编写一个程序来为Theano构建表达式。在某种程度上它仍然像一个编程语言,因为你必须

  • 声明变量(a,b)并给出它们的类型
  • 构建表达式来表示如何将这些变量放在一起
  • 将表达式图编译为函数,以便将它们用于计算。

可以把theano.function看作一个编译器的接口,它从纯粹的符号图中构建一个可调用的对象。Theano的最重要的特性之一是theano.function可以优化图,甚至将其中的一些或全部编译为本机机器指令。

它做了什么,但是其它库没有做?

Theano是一个Python库和优化编译器,用于处理和求值表达式,特别是矩阵表达式。矩阵的操作通常使用numpy包来完成,那么什么是Theano做的而Python和numpy没有做的呢?

  • 执行速度优化:Theano可以使用g++nvcc将表达式图的部分编译成CPU或GPU指令,它们运行起来比纯Python快得多。
  • 符号微分:Theano可以自动构建用于计算梯度的符号图。
  • 稳定性优化:Theano可以识别[某些]数值不稳定的表达式,并使用更稳定的算法计算它们。

最接近Theano的Python包是sympy。Theano比Sympy更注重张量表达,并有更多的机制进行编译。Sympy具有更复杂的代数规则,可以处理更多种类的数学运算(如序列,极限和积分)。

如果将numpyMATLABsympyMathematica进行比较,Theano是一种试图结合两个世界的最好的部分的东西。

入门

安装Theano

在你的系统上下载并安装Theano的说明。

教程

开始使用Theano的基本功能。如果你是新手,去这里!

API文档

Theano提供的细节。建议先通读教程

可在此处找到在线文档的PDF版本。

Theano的愿景

这是我们对Theano的愿景。这是给人们对Theano未来的一个期望,但我们不能承诺实现所有的。这也应该能帮助你理解Theano与其他计算工具的关系。

  • 支持张量和稀疏运算

  • 支持线性代数运算

  • 图变换

    • 微分/高阶微分
    • 'R'和'L'微分运算符
    • 速度/内存优化
    • 数值稳定性优化
  • 可以使用多种编译语言、指令集:C/C++、CUDA、OpenCL、PTX、CAL、AVX ...

  • 延迟求值

  • 循环

  • 并行执行(SIMD、多核,集群上的多节点,分布式多节点)

  • 支持NumPy所有功能和SciPy的基本功能

  • 在Theano中轻松封装库函数

注意:短期没有计划支持多节点计算。

Theano愿景的状态

以下是截至2013年12月3日(Theano版本0.6之后)的愿景状态:

  • 我们支持使用numpy.ndarray对象的张量,我们支持对它们的许多操作。
  • 我们通过使用scipy.{csc,csr,bsr} _matrix对象支持稀疏类型,并支持对它们的一些操作。
  • 我们已经开始实现/封装更高级的线性代数运算。
  • 我们有许多图变换,涵盖上面列出的4个类别。
  • 我们可以通过更好的存储优化和指令选择来改进图转换。
    • 类似于在优化阶段的自动调整,但这不适用于只有1个的操作。
    • 使用示例:根据输入大小确定是否应将计算移动到GPU。
    • 可能实现:允许fgraph中的Theano变量拥有超过1个所有者。
  • 我们支持Python 2和Python 3。
  • 我们对float32类型的张量有一个CUDA后端。
  • 已经开始尝试通用GPU ndarray(GPU张量)(在libgpuarray项目中启动)
    • 将GPU后端移到Theano外部。
    • 将在Windows上为GPU提供更好的支持,并在CPU上支持OpenCL后端。
  • 循环可以工作,但并不是所有的相关优化都已完成。
  • cvm链接器允许延迟求值。它是当前的默认链接器。
    • 如何让DebugMode检查?目前,DebugMode非延迟地检查计算。
  • CPU上的SIMD并行性来自编译器。
  • 多核并行支持有限。如果外部BLAS实现支持它,许多点通过gemm,gemv和ger并行化。此外,支持逐个元素的操作。请参阅Multi cores support in Theano
  • 无多节点支持。
  • 实现大多数但不是所有NumPy的函数/别名。* https://github.com/Theano/Theano/issues/1080
  • 将现有的Python函数封装的更简单并写成文档。
  • 我们知道如何从对象类型(张量、稀疏矩阵、dtype、broadcast 标志)分离共享变量内存存储位置,但我们需要这样做。

联系我们

关于Theano的讨论发生在theano-devtheano-users邮件列表中。对Theano的开发感兴趣的人应该检查前者,而后者保留给涉及最终用户的问题。

问题、评论、赞美、批评和错误报告应提交到这些邮件列表。

我们欢迎各种贡献。如果你对如何扩展Theano有任何问题,请随时问问theano-dev邮件列表。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容