Python 条件执行

Python 条件执行,python,python-3.x,neural-network,cntk,Python,Python 3.x,Neural Network,Cntk,是否可以在CNTK中创建一个“条件”网络,并根据另一个输入变量仅对其中一个输入应用它? 请参阅以下代码: a_in = ct.input_variable(shape=[16,16]) b_in = ct.input_variable(shape=[16,16]) flag = ct.input_variable(shape=[]) a_branch = ct.layers.Sequential([...]) b_branch = ct.layers.Sequential([...]) se

是否可以在CNTK中创建一个“条件”网络,并根据另一个输入变量仅对其中一个输入应用它? 请参阅以下代码:

a_in = ct.input_variable(shape=[16,16])
b_in = ct.input_variable(shape=[16,16])
flag = ct.input_variable(shape=[])

a_branch = ct.layers.Sequential([...])
b_branch = ct.layers.Sequential([...])

sel_branch = ct.element_select(flag, a_branch, b_branch)

out = sel_branch(a_in, b_in)
但是,这不起作用,因为
sel_branch
需要3个参数,而不是
a_branch
b_branch
请求的参数(这是完全正确的,因为我在这里使用
元素选择


请记住,目标是避免执行两个分支,

答案是否定的,此时CNTK中没有条件执行。一般情况下,flag是一个向量/张量,它的一些元素为0,其他元素为1。当所有元素都具有相同的值但没有实现时,会有一个明显的优化。然而,即使它被实现,
sel_branch
的签名仍然需要3个参数,因为这是一个“编译时”属性,而上述优化只能在运行时确定。即使在您的情况下,当标志是标量时,一个批次中的标志也可能是0,另一个批次中的标志可能是1,并且
sel_分支
的签名不能在批次之间更改