官术网_书友最值得收藏!

2.8 Theano中的條件表達式

Theano雖然是基于Python的工具包,但它本身屬于符號語言,因此無法直接使用Python中的if語句。IfElse和Switch這兩種操作都是基于符號變量建立約束條件。IfElse將boolean作為條件,將兩個變量作為輸入;Switch將tensor作為條件,將兩個變量作為輸入。Switch是一個逐元素的操作,這一特性使得它比IfElse更加通用。

Switch在兩個輸出變量上進行評估,而IfElse只對一個關于條件的變量進行評估。

運行結果如下所示:

    python ifelse_switch.py
    time spent evaluating both values 0.234337 sec
    time spent evaluating one value 0.134876 sec

在這個例子中,IfElse操作比Switch花費的時間更少,從結果看,這次操作中IfElse節省了大約一半的時間。這是因為IfElse只計算了兩個變量中的一個。

只有在使用linker='vm'或者linker='cvm'的情況下,IfElse才會計算兩個變量,計算時間與Switch相同。綜上所述,IfElse與Switch主要區別有以下兩點:

· IfElse的條件表達式condition只支持標量值,而Switch的條件表達式可以是任意形式的符號變量。在實際使用Theano的過程中,Switch的應用更為廣泛。

· IfElse的運算具有惰性,從上面的例子中可以看出,IfElse的執行過程采用了“短路”策略,只會執行其中一個分支,而Switch會執行全部的分支,當全部分支執行完成后才根據條件表達式condition的值返回執行結果。

主站蜘蛛池模板: 庆元县| 莱州市| 武威市| 灵寿县| 平凉市| 濮阳县| 邹平县| 德州市| 张北县| 英德市| 永丰县| 澜沧| 通渭县| 太康县| 调兵山市| 昌江| 铜梁县| 余姚市| 乐都县| 麻城市| 裕民县| 丹寨县| 木兰县| 荥经县| 岳西县| 北碚区| 镇安县| 柯坪县| 崇文区| 静安区| 平顶山市| 神农架林区| 色达县| 富平县| 丹阳市| 郸城县| 望谟县| 华蓥市| 米林县| 兴义市| 仁化县|