博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Theano 中文文档 0.9 - 7.2.4 条件
阅读量:6241 次
发布时间:2019-06-22

本文共 1571 字,大约阅读时间需要 5 分钟。

7.2.4 条件

译者:,原文:。

本文以 协议发布,转载请保留作者署名和文章出处。

人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606。

IfElse和Switch

  • 这两个op在符号变量上构建一个条件。
  • IfElse接收一个布尔条件和两个变量作为输入。
  • Switch接收一个张量作为条件,两个变量作为输入。switch是按元素操作,因此比ifelse更通用。
  • switch对两个输出变量同时求值,ifelse是延迟的并且只求值一个条件的变量。

示例

from theano import tensor as Tfrom theano.ifelse import ifelseimport theano, time, numpya,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 = 10tic = 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 one value %f sec' % (time.clock() - tic))

在这个例子中,IfElse op比起Switch花费更少的时间(大约一半),因为它只计算两个变量中的一个。

$ python ifelse_switch.pytime spent evaluating both values 0.6700 sectime spent evaluating one value 0.3500 sec

除非使用linker='vm'linker='cvm'ifelse将计算两个变量并花费与switch相同的计算时间。虽然linker当前未默认设置为cvm,但在不久的将来将会设置为它。

没有自动优化将switch替换为使用broadcasted的标量的ifelse,因为这不总是更快。查看这个。

注意

如果你使用,则将计算IfElse的所有分支。这是正常的,因为使用test_value意味着当我们构建它时,由于Python的贪婪评估和测试值的语义,所有的都将被计算。当我们构建两个分支时,它们都将被执行测试值。这在编译的Theano函数的执行期间不引起任何改变。

你可能感兴趣的文章
oracle在线迁移同步数据,数据库报错
查看>>
linux性能剖析工具
查看>>
flutter中的异步
查看>>
计算机高手也不能编出俄罗斯方块——计算机达人成长之路(16)
查看>>
# 2017-2018-1 20155224 《信息安全系统设计基础》第七周学习总结
查看>>
scikit-learn预处理实例之一:使用FunctionTransformer选择列
查看>>
邮件客户端导入邮件通讯录地址薄
查看>>
Linux系统安装
查看>>
Cassandra监控 - OpsCenter手册
查看>>
一些关于写Java代码的建议
查看>>
网络社交如何保护个人隐私?做好这4步
查看>>
SQL*Plus中的Echo
查看>>
SEO基础知识8大精华文章之第一篇(连载)
查看>>
面向sql编程
查看>>
对前面的自定义的toast制作拖拽效果,以及双击居中效果
查看>>
如何规划构建一套大型的Citrix桌面虚拟化架构 - 后记
查看>>
animationFromTop
查看>>
SEM如何做数据分析?
查看>>
语音转文字如何在线转换的?
查看>>
PXE批量实现自动化安装系统
查看>>