2017-10-13 8 views
1

CNTKからの正しい答えを以下のコードから得られませんでした。私は何か悪いことをしましたか?Microsoft 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]] 

ことを要求。 誰でもこれを複製できますか?コピー&ペーストはエラーなしで実行する必要があります。

EDIT:関数の変数bの位置を変更すると値が変わることもわかりました。

答えて

3

変数の計算結果を得るには、eval()を使用する必要があります。

したがって、results = f(q, w, e)results = f.eval({a: q, b: w, c: e})に置き換えると、予期した結果が得られます。

0

私は同じ質問を投稿するためにcntkのgithubに行った。私はここで答えを共有すると思った。

変数のバインド順序は変数a、b、cとしては保証されません。グラフの作成にはa、b、cがどのように関数に渡されるかと同じ順序ではありません。

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

関連する問題