【问题标题】:Tensorflow subtract returns wrong valuesTensorFlow 减法返回错误值
【发布时间】:2017-06-17 16:51:56
【问题描述】:

这里是绝对的 tensorflow 初学者。我正在尝试构造两个随机张量并将它们减去以进行分配。但是,我似乎在理解减法过程的工作原理方面存在一些问题。

x=tf.random_normal([5],seed=123456)
y=tf.random_normal([5],seed=987654)
print(sess.run(x),sess.run(y))

我得到以下输出:

[ 0.38614973  2.97522092 -0.85282576 -0.57114178 -0.43243945]
[-0.43865281  0.08617876 -2.17495966 -0.24574816 -1.94319296]

但是当我尝试时

print(sess.run(x-y))

我明白了

[-1.88653958 -0.03917438  0.87480474  0.40511152  0.52793759]

现在如果我跑

print(sess.run(tf.subtract(x,y)))

我还得到了其他错误的值。

[-1.97681355  1.10086703  1.41172433  1.55840468  0.04344697]

我希望有人可以在这里帮助我。提前致谢!

【问题讨论】:

标签: python-3.x tensorflow


【解决方案1】:

当您多次执行x - y 时会出现此问题,因为每次都会为xy 分配不同的值。这是因为当你写像x=tf.random_normal([5],seed=123456) 这样的东西时,真的没有任何实际的计算。 TensorFlow 只是在静态计算图中构建一个操作节点。当您执行sess.run() 时,就会发生真正的计算。

因此,将x=tf.random_norm([5], seed=123456) 视为随机数生成器。第一次调用sess.run()x 的初始种子值为123456。但是第二次调用sess.run()时随机数生成器的状态已经发生了变化,所以值会有所不同。

您可以通过运行以下代码来验证这一点:

import tensorflow as tf
x = tf.random_normal([5], seed=123456)

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

输出将是

[ 0.38614973,  2.97522092, -0.85282576, -0.57114178, -0.43243945]
[-1.41140664, -0.50017339,  1.59816611,  0.07829454, -0.36143178]
[-1.10523391, -0.15264226,  1.79153454,  0.42320547,  0.26876169]

【讨论】:

    【解决方案2】:

    此行为实际上与您的正常种子的工作方式以及会话如何评估您的节点有关。

    Tensorflow 将在创建随机正常节点时使用它们的种子 - 在运行它们时不会

    >>> sess = tf.InteractiveSession()
    >>> x = tf.random_normal([5], seed=123456)
    >>> sess.run(x)
    array([ 0.38614976,  2.97522116, -0.85282576, -0.57114178, -0.43243945], dtype=float32)
    >>> sess.run(x)
    array([-1.41140664, -0.50017333,  1.59816611,  0.07829454, -0.36143178], dtype=float32)
    

    您可以看到在第二次运行x 时值发生了变化。 运行sess.run(x-y) 实际上会运行x(即生成随机数),然后是y(即生成其他随机数),然后是x-y。由于您在运行 tf.subtract(x,y) 之前没有使用种子重新初始化随机生成器,因此您会得到不同的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-04
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      • 2016-02-01
      相关资源
      最近更新 更多