CNTK:条件执行
CNTK: conditional execution
是否可以在 CNTK 中创建一个 "conditional" 网络并根据另一个输入变量仅将其应用于其中一个输入?
见以下代码:
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)
Howerer,这不起作用,因为 sel_branch
需要 3 个参数,而不是 a_branch
或 b_branch
要求的参数(这是完全正确的,因为我在这里使用 element_select
错误的方式)
请记住,objective 是为了避免执行两个分支,
答案是否定的,目前CNTK中没有条件执行。一般情况是 flag 是一个 vector/tensor 并且它的一些元素将是 0 而其他元素将是 1。当所有元素都具有相同的值但未实现时,有一个明显的优化。然而,即使实现了 sel_branch
的签名仍然需要 3 个参数,因为那是 "compile-time" 属性,而上述优化只能在运行时确定。即使在 flag 是标量的情况下,它在一个批次中可能为 0,而在另一个批次中可能为 1,并且 sel_branch
的签名不能在批次之间更改。
是否可以在 CNTK 中创建一个 "conditional" 网络并根据另一个输入变量仅将其应用于其中一个输入? 见以下代码:
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)
Howerer,这不起作用,因为 sel_branch
需要 3 个参数,而不是 a_branch
或 b_branch
要求的参数(这是完全正确的,因为我在这里使用 element_select
错误的方式)
请记住,objective 是为了避免执行两个分支,
答案是否定的,目前CNTK中没有条件执行。一般情况是 flag 是一个 vector/tensor 并且它的一些元素将是 0 而其他元素将是 1。当所有元素都具有相同的值但未实现时,有一个明显的优化。然而,即使实现了 sel_branch
的签名仍然需要 3 个参数,因为那是 "compile-time" 属性,而上述优化只能在运行时确定。即使在 flag 是标量的情况下,它在一个批次中可能为 0,而在另一个批次中可能为 1,并且 sel_branch
的签名不能在批次之间更改。