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具有更复杂的代数规则,可以处理更多种类的数学运算(如序列,极限和积分)。

最新文章

  1. 《编写可维护的JavaScript》——JavaScript编码规范(三)
  2. mysql自动化安装
  3. Android判断App是否在前台运行(转)
  4. wp8.1 Study11:APP里文件读写和使用XML和Json序列化
  5. 使用k-近邻算法改进约会网站的配对效果
  6. JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet
  7. Linux关闭selinux
  8. xcode单步调试快捷键
  9. es6英文文档翻译
  10. tomcat的常用配置方法
  11. 【Hadoop】NameNode
  12. 结对编程四则运算gui
  13. docker dead but pid file exists
  14. java--List、Set、Map的基础
  15. Mybatis 使用了哪些设计模式?
  16. VMware vSphere虚拟化-VMware ESXi 5.5组件安装过程记录
  17. python---基于memcache的自定义session类
  18. 算法: skiplist 跳跃表代码实现和原理
  19. js 事件调度
  20. Centos下挖XMR门罗币的详细教程

热门文章

  1. vue 列表的排序过渡 shuffle遇到的问题
  2. Nexus 离线更新中央仓库索引
  3. 【PyTorch教程】P2. Python编辑器的选择、安装及配置
  4. Apache Tomcat服务部署网站
  5. 「2019.7.22 考试」AC和WA0一步之遥
  6. Ubuntu16.04下nvidia驱动+nvidia-docker+cuda9+cudnn7安装
  7. call 与apply深入
  8. 通俗易懂了解Vue组件的生命周期
  9. Linux学习(推荐学习资源)——保持更新
  10. Flink入门(一)——Apache Flink介绍