Can tensorflow';s mod运算符匹配python';s模实现?

Can tensorflow';s mod运算符匹配python';s模实现?,python,tensorflow,Python,Tensorflow,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.m

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()

有趣的发现。也许值得在此处提交github问题:

对于解决方法,我认为您可以使用以下行:

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

这是另一个解决方案。它将除数与第一个模的结果相加,然后再次进行模运算

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)

对于任何对此感兴趣的人来说:它似乎已经在TF1.12.0中得到了纠正(也许它在新版本中也起作用)