Theano一览

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

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

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

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

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

先睹为快

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

 import theano
from theano import tensor #声明两个浮点数类型的变量
a=tensor.dscalar()
b=tensor.dscalar() #创建一个简单的表达式
c=a+b #将表达式转换成图函数,方便他们进行计算
f=theano.function([a,b],c) #a=1.5,b=2.5,计算c
assert 4.0==f(1.5,2.5)

它做了什么其他库没做的?

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

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

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

Theano at a Glance的更多相关文章

  1. Deconvolution Using Theano

    Transposed Convolution, 也叫Fractional Strided Convolution, 或者流行的(错误)称谓: 反卷积, Deconvolution. 定义请参考tuto ...

  2. Theano printing

    Theano printing To visualize the internal relation graph of theano variables. Installing conda insta ...

  3. Theano Graph Structure

    Graph Structure Graph Definition theano's symbolic mathematical computation, which is composed of: A ...

  4. Theano Inplace

    Theano Inplace inplace Computation computation that destroy their inputs as a side-effect. Example i ...

  5. broadcasting Theano vs. Numpy

    broadcasting Theano vs. Numpy broadcast mechanism allows a scalar may be added to a matrix, a vector ...

  6. theano scan optimization

    selected from Theano Doc Optimizing Scan performance Minimizing Scan Usage performan as much of the ...

  7. theano sparse_block_dot

    theano 中的一个函数 sparse_block_dot; Function: for b in range(batch_size): for j in range(o.shape[1]): fo ...

  8. ubuntu系统theano和keras的安装

    说明:系统是unbuntu14.04LTS,32位的操作系统,以前安装了python3.4,现在想要安装theano和keras.步骤如下: 1,安装pip sudo apt-get install ...

  9. theano学习

    import numpy import theano.tensor as T from theano import function x = T.dscalar('x') y = T.dscalar( ...

随机推荐

  1. django-模板之comment标签(六)

    index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  2. Swagger解决你手写API接口文档的痛

    首先,老规矩,我们在接触新事物的时候, 要对之前学习和了解过的东西做一个总结. 01 痛     苦 不做.不行 之前,前后端分离的系统由前端和后端不同的编写,我们苦逼的后端工程师会把自己已经写完的A ...

  3. [springboot 开发单体web shop] 3. 用户注册实现

    目录 用户注册 ## 创建数据库 ## 生成UserMapper ## 编写业务逻辑 ## 编写user service UserServiceImpl#findUserByUserName 说明 U ...

  4. API gateway 之 kong 基本操作 (三)

    一.演示环境准备 1.nginx配置 [root@nginx conf.d]# pwd /etc/nginx/conf.d [root@nginx conf.d]# ls conf_bak kong_ ...

  5. 使用memset初始化int数组

    memset()是一个来自于string库的函数,正规用法是初始化char类型的数组.因为char类型只占1个字节,memset按字节赋值后,会将char类型数组的所有元素变为你指定的值.但是4字节的 ...

  6. RocketMQ 消息发送system busy、broker busy原因分析与解决方案

    目录 1.现象 2.原理解读 2.1 RocketMQ 网络处理机制概述 2.2 pair.getObject1().rejectRequest() 2.3 漫谈transientStorePoolE ...

  7. [考试反思]1008csp-s模拟测试64:契机

    暴力没打满...有点垃圾... 考得稍绝望,啥也不会啊??? T3的测试点分治还写挂了... 其实就是没有沉下心好好的思考,在三道题上来回切换结果一个成型思路都没有 T2既然已经想到那一步了居然没有继 ...

  8. 口胡题fr

    T1五种贡献恶心的要死.$1.grand$$2.father$$3.brother$$4.son$$5.grandson$我们选择维护三个量.1.儿子和,$sx$2.孙子和,$gsx$3.自己的值,$ ...

  9. C/C.cpp

    我是怎么说服自己这题没有答案单调性的? 当轮数大于最优答案时,B的操作就成了捣乱,会使A多进行若干操作才能回复原状态 嗯,所以答案没有单调性. 就没去想A的操作可以把B的抵消啊.. 另外swap没有交 ...

  10. 关于数论分块里r=sum/(sum/l)的证明!

    今天的模拟赛里T2要使用到数论分块,里面有一个重要的坎就是关于r=sum/(sum/l)的证明,网上关于这道题的题解里都没有关于这个的证明,那么我就来填补一下: 在以下的文章里,我都会使用lo(x)表 ...