gpt4 book ai didi

neural-network - theano 中 ifelse 和 switch 的用途是什么?

转载 作者:行者123 更新时间:2023-12-04 06:40:16 26 4
gpt4 key购买 nike

我无法理解它们的任何内容,我是从http://deeplearning.net/software/theano/tutorial/conditions.html读到的。 。我想它们的功能就像我们的 ifelse,但无法理解如何使用它们。请对此进行一些指导。谢谢

最佳答案

代码是从链接复制的,以便更容易解释: http://deeplearning.net/software/theano/extending/graphstructures.html

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))

在示例中, f_switch(val1, val2, big_mat1, big_mat2) 和 f_lazyifelse(val1, val2, big_mat1, big_mat2) 都在做同样的事情。如果 val1 是“小于”val2,则返回 big_mat1,否则返回 big_mat2。

但是“switch”和“ifelse”在性能上存在差异。在“ifelse”中,根据条件,仅评估可能的输出之一。在此示例中,在 f_lazyifelse(val1, val2, big_mat1, big_mat2) 中,如果 val1 小于 val2,则仅评估对大矩阵的所有元素执行均值函数的 big_mat1,而不会评估 big_mat2。

另一方面,在“switch”的情况下,无论条件如何,都会评估两个可能的输出,并且在示例中,在 f_switch(val1, val2, big_mat1, big_mat2) 中,无论 val1 和 val2 都是 big_mat1并且将计算 big_mat2 (此处,对大矩阵的所有元素执行均值函数)。因此“switch”几乎需要两次“ifelse”来执行。

关于neural-network - theano 中 ifelse 和 switch 的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35823165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com