我无法理解他们的任何内容,我是从http://deeplearning.net/software/theano/tutorial/conditions.html读到的。我想他们的功能就像我们的ifelse但不能理解如何使用它们。请指点一下。感谢
答案 0 :(得分:3)
从链接中复制代码以便于解释: http://deeplearning.net/software/theano/extending/graphstructures.html
private void setMachineTime(){
Timer timer = new Timer();
long startTime = new Date().getTime();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
long endTime = new Date().getTime();
long diffTime = endTime - startTime;
String diffSeconds = formatTime(diffTime / 1000 % 60);
String diffMinutes = formatTime(diffTime / (60 * 1000) % 60);
String diffHours = formatTime(diffTime / (60 * 60 * 1000) % 24);
System.out.println(diffHours + ":" + diffMinutes + ":" + diffSeconds);
}
}, 0, 1000);
}
private String formatTime(long diff){
long t;
t = diff;
if(t < 10){
return String.valueOf("0"+t);
} else {
return String.valueOf(t);
}
}
在该示例中,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。
另一方面,在“切换”的情况下,无论条件如何,都将评估可能的输出,并且在示例中,在f_switch(val1,val2,big_mat1,big_mat2)中,无论val1和val2如何都是big_mat1将评估big_mat2(这里,对大矩阵的所有元素执行平均函数)。因此,“切换”几乎需要两次“ifelse”才能执行。
答案 1 :(得分:2)
我认为它只是另一个作用于三个符号变量的运算符,如果第一个为真,则返回第二个,否则返回第三个。
但是对于许多运算符(例如-
和+
),theano已经为符号变量重载了它们,所以你可能感觉不到差异。
例如,如果a
和b
是数字,那么c=a+b
会创建一个变量c
,其值为a+b
。如果a
和b
是符号变量,那么c=a+b
会创建另一个符号变量c
,这将对a
和{{应用(逐个元素)添加1}}当相应的函数被调用/评估时。
以下是theano运算符和图表的介绍。 http://deeplearning.net/software/theano/extending/graphstructures.html
在某种意义上,ternary operator是python的本机,相当于theano的b
或ifelse
符号变量。