Theano Tutorial文档翻译(六) - 条件
2016-08-16 21:11
330 查看
原文地址:http://deeplearning.net/software/theano/tutorial/conditions.html
而
例子:
在这个例子中,当一条件两输出
除非使用
这里没有自动优化器会用一个
IfElse vs Switch
两个操作符都在符号变量构建了条件。IfElse要提供一个布尔条件和两个变量
Switch要提供一个张量条件和两个变量。
switch是一个依次元素运算,所以比
ifelse更常用。
而
switch评估两个输出变量,
ifelse很懒并且只评估和条件有关的一个变量。
例子:
from theano import tensor as T from theano.ifelse import ifelse import theano, time, numpy a, b = T.scalars('a', 'b') x, y = T.matrices('x', 'y') z_switch = T.switch(T.lt(a, b), T.mean(x), T.mean(y)) z_lazy = ifelse(T.lt(a, b), T.mean(x), T.mean(y)) f_switch = theano.function([a, b, x, y], z_switch, mode=theano.Mode(linker='vm')) f_lazyifelse = theano.function([a, b, x, y], z_lazy, mode=theano.Mode(linker='vm')) val1 = 0 val2 = 1 big_mat1 = numpy.ones((10000, 1000)) big_mat2 = numpy.ones((10000, 1000)) n_times = 10 tic = time.clock() for i in range(n_times): f_switch(val1, val2, big_mat1, big_mat2) print('time spent evaluating both values %f sec' % (time.clock() - tic)) tic = time.clock() for i in range(n_times): f_lazyifelse(val1, val2, big_mat1, big_mat2) print('time spent evaluating both values %f sec' % (time.clock() - tic))
在这个例子中,当一条件两输出
IfElse操作花费更小的时间(约switch的一半)。
time spent evaluating both values 0.6700 sec time spent evaluating one value 0.3500 sec
除非使用
linker='vm'或
linker=‘cv’,
ifelse会计算两个变量并且和
switch有相同计算时间。即使连接器不是经常默认设置
cvm,它会在将来实现。
这里没有自动优化器会用一个
ifelse的广播标量替代
swicth,这往往不是更快的。
注意:如果你使用test values,然后所有IfElse的分支都会被计算。这很正常,因为Python的贪婪原则和test values的语义,当使用test vales时意味着所有都会被计算。当我们构建两个分支,他们都会在test values被执行。这不会产生任何改变当执行Theano的编译功能
相关文章推荐
- Theano Tutorial文档翻译(一):词汇
- Theano Tutorial文档翻译(三) - 基础张量功能
- Theano Tutorial文档翻译(二):代数
- Theano Tutorial文档翻译(七) - 循环
- Theano Tutorial文档翻译(五) - 衍生工具
- Theano Tutorial文档翻译(八) - 怎样标准化Theano的信息
- deep learning tutorial 翻译 (theano 学习笔记)
- (Spring文档翻译)Part V, the Web 17.1 Spring Web MVC framework介绍
- Apache OFBiz Development The Beginners Tutorial 翻译之四 运行OFBiz
- The Portable Executable File Format PE文件格式中文翻译文档
- 翻译:A Tutorial on the Device Tree (Zynq) -- Part III
- 在响应链中使用视图控制器Using View Controllers in the Responder Chain[苹果官方文档的翻译]
- [Guava官方文档翻译] 3. 前置条件检查(Preconditions Explained)
- 考虑翻译oracle 的bbed介绍文档<Disassembling the Oracle Data Block>
- Processing Bitmaps Off the UI Thread不在UI线程中处理Bitmaps(Android官方翻译文档2)
- 翻译:A Tutorial on the Device Tree (Zynq) -- Part I
- Deep learning with Theano 官方中文教程(翻译)(四)—— 卷积神经网络(CNN)
- 【翻译】The Java Tutorial中的"继承"概念
- Deep learning with Theano 官方中文教程(翻译)(三)——多层感知机(MLP)
- oracle bbed 文档<Disassembling the Oracle Data Block> 翻译(1)