前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Theano 中文文档 0.9 - 7.2.4 条件

Theano 中文文档 0.9 - 7.2.4 条件

作者头像
ApacheCN_飞龙
发布2022-12-01 16:32:23
2960
发布2022-12-01 16:32:23
举报
文章被收录于专栏:信数据得永生

7.2.4 条件

译者:Python 文档协作翻译小组,原文:Conditions。 本文以 CC BY-NC-SA 4.0 协议发布,转载请保留作者署名和文章出处。

IfElse和Switch

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

示例

代码语言:javascript
复制
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 one value %f sec' % (time.clock() - tic))

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

代码语言:javascript
复制
$ python ifelse_switch.py
time spent evaluating both values 0.6700 sec
time spent evaluating one value 0.3500 sec

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

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

注意

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 7.2.4 条件
    • IfElse和Switch
    相关产品与服务
    云服务器
    云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档