2016-10-06 8 views
2

Pythonの%オペレータは常に、例えば、除数(第2引数)と同じ符号付き数を返す:ただしtensorflowのmod演算子はpythonのモジュロの実装にマッチできますか?

-7.0 % 3.0 -> 2.0 

、TensorflowのMOD操作者がわずかに異なる方法で実装しているように見える:

tf.mod(-7.0, 3.0).eval() -> -1.0 

TensorflowにPythonの実装と同じ値を返すにはどうすればよいですか?

import tensorflow as tf 


def main(): 

    v_num = -7.0 
    v_div = 3.0 

    mod_tf = tf.mod(v_num, v_div) 
    mod_py = v_num % v_div 

    with tf.Session() as sess: 
     sess.run(tf.initialize_all_variables()) 

     print('TF: {} % {} = {}'.format(v_num, v_div, mod_tf.eval())) 
     print('PY: {} % {} = {}'.format(v_num, v_div, mod_py)) 

if __name__ == "__main__": 
    main() 

答えて

1

興味深い所見。たぶんここにgithubの問題を提起する価値:この問題を回避するためにhttps://github.com/tensorflow/tensorflow/issues

を、私はあなたがこのラインを使用することができると思う:

mod_tf = tf.cond(mod_tf < 0, lambda: mod_tf+v_div, lambda: mod_tf) 
0

ここで別のソリューションです。これは最初のモジュロの結果に除数を加え、再びモジュロを行います。

def positive_mod(val, div): 
    # Return the positive result of the modulo operator. 
    # Does x = ((v % div) + div) % div 
    return tf.mod(tf.add(tf.mod(val, div), div), div) 
関連する問題