尝试在Microsoft CNTK中创建一个非常简单的函数,但获得错误的结果

时间:2017-10-13 13:41:18

标签: python cntk

我没想从CNTK那里得到正确的答案。我做错了什么?

import cntk as C
import numpy as np

def custom(a, b, c):
    return a * 0 + c * 0 + b


np.set_printoptions(edgeitems=1000, linewidth=1000)

a = C.input_variable(3)
b = C.input_variable(3)
c = C.input_variable(3)

f = custom(a, b, c)

q = np.zeros((1, 3)).astype(np.float32) + 0.5
w = np.zeros((1, 3)).astype(np.float32) + 1.0
e = np.zeros((1, 3)).astype(np.float32) + 1.5

print()
print("a:", q)
print("b:", w)
print("c:", e)
print(">>>>>>>>>>>>>>>>>>>>>")
results = f(q, w, e)
print(results)

我要求结果返回

[[1.0, 1.0, 1.0]]

但我得到了,

[[1.5, 1.5, 1.5]]

代替。 任何人都可以复制这个吗?复制和粘贴应该没有错误地运行。

编辑:我意识到在函数中改变变量b的位置也会改变它的值。

2 个答案:

答案 0 :(得分:3)

您需要使用eval()才能获得变量的计算结果。

因此,将行results = f(q, w, e)替换为results = f.eval({a: q, b: w, c: e})将获得预期的结果。

答案 1 :(得分:0)

我去了cntk的github发布了同样的问题。以为我在这里分享回复。

变量绑定顺序不能保证因为变量a,b,c参与图形的构造与a,b,c如何传递给函数的顺序不一样。

https://github.com/Microsoft/CNTK/issues/2489