尝试在 Microsoft CNTK 中创建一个极其简单的函数,但得到了错误的结果
Trying to make a extremely simple function in microsoft CNTK but obtain wrong results
我没有从下面的代码中得到 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)
我要求结果return
[[1.0, 1.0, 1.0]]
但是我得到了,
[[1.5, 1.5, 1.5]]
相反。
任何人都可以复制这个吗?复制和粘贴应该 运行 没有错误。
编辑:我意识到在函数中移动变量 b 的位置也会改变它的值。
您需要使用eval()
才能获得变量的计算结果。
因此,将行 results = f(q, w, e)
替换为 results = f.eval({a: q, b: w, c: e})
会得到预期的结果。
我去了cntk的github去post同样的问题。以为我在这里分享回复。
不保证变量绑定顺序,因为变量 a、b、c 参与图的构建与 a、b、c 传递到函数的顺序不同。
我没有从下面的代码中得到 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)
我要求结果return
[[1.0, 1.0, 1.0]]
但是我得到了,
[[1.5, 1.5, 1.5]]
相反。 任何人都可以复制这个吗?复制和粘贴应该 运行 没有错误。
编辑:我意识到在函数中移动变量 b 的位置也会改变它的值。
您需要使用eval()
才能获得变量的计算结果。
因此,将行 results = f(q, w, e)
替换为 results = f.eval({a: q, b: w, c: e})
会得到预期的结果。
我去了cntk的github去post同样的问题。以为我在这里分享回复。
不保证变量绑定顺序,因为变量 a、b、c 参与图的构建与 a、b、c 传递到函数的顺序不同。