在tensorflow中,如果我们想运行多个操作,那么将列表中的ops传递给单个sess.run()与使用多个sess.run()会有什么区别(例如速度或结果)。将一个操作传递给每个操作?

例:

#!/usr/env/bin python
import tensorflow as tf

if __name__ == '__main__':
    v = tf.Variable(0)
    c = tf.constant(3)
    add = tf.add(v, c)
    update = tf.assign(v, add)
    mul = tf.multiply(add, update)
    init = tf.compat.v1.global_variables_initializer()

    # method 1
    with tf.Session() as sess:
        sess.run(init)
        print(sess.run(add))
        print(sess.run(mul))

    # method 2
    with tf.Session() as sess:
        print(sess.run([init, add, mul]))

编辑:最初,我还想知道是否存在多个会话会导致不同结果的情况,例如,计算图中的依赖关系导致执行顺序不同等。但是我并没有在问题中明确指出这一点,只是给出了一个相当虚拟的示例代替...

#1楼 票数:1 已采纳

每次运行init ,所有权重都会随机初始化,因此无法通过这种方式进行比较。 如果您真的想比较,我将运行以下代码:

#!/usr/env/bin python
import tensorflow as tf

if __name__ == '__main__':
    v = tf.Variable(0)
    c = tf.constant(3)
    add = tf.add(v, c)
    update = tf.assign(v, add)
    mul = tf.multiply(add, update)
    init = tf.compat.v1.global_variables_initializer()

    # method 1
    with tf.Session() as sess:
        sess.run(init)
        print(sess.run(add))
        print(sess.run(mul))
        print(sess.run([add, mul]))

#2楼 票数:1

结果没有任何区别:

import numpy as np

tf.reset_default_graph()
v = tf.Variable(0)
c = tf.constant(3)
add = tf.add(v, c)
update = tf.assign(v, add)
mul = tf.multiply(add, update)
init = tf.compat.v1.global_variables_initializer()

def single():
    with tf.Session() as sess:
        sess.run(init)
        fetch_add = sess.run(add)
        fetch_mul = sess.run(mul)
    return fetch_add, fetch_mul

def multiple():
    with tf.Session() as sess:
        sess.run(init)
        fetch_add, fetch_mul = sess.run([add, mul])
    return fetch_add, fetch_mul

add_single, multiply_single = single()
add_multiple, multiply_multiple = multiple()

np.testing.assert_array_equal(add_single, add_multiple)
np.testing.assert_array_equal(multiply_single, multiply_multiple)

关于速度,以下是一些指标:

%timeit single()
# 7.44 ms ± 143 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit multiple()
# 5.56 ms ± 121 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

因此,如果同时运行多个节点,肯定会更快。

  ask by yuqli translate from so

未解决问题?本站智能推荐:

1回复

sess.run()无法运行?

我是新来的人,正在研究张量流并遇到问题。 以上是在main.py中导入的model_method.py。 main.py中的fittt函数: 在model_method.py中的build() : 在model_method.py中的fit() : 为了检查运行
1回复

将 sess.run 转换为 pytorch

我正在尝试将代码从 tf 转换为 pytorch。 我被卡住的代码部分是这个 sess.run。 据我所知,pytorch 不需要它,但我找不到复制它的方法。 我附上你的代码。 TF: 样本是一个 int32 和 ebnodb2noisevar() 返回一个 float32。 TF 中的
1回复

sess.run循环内

我有一个根据输入张量计算一系列操作的图。 该输入张量将从网络摄像头派生。 在这种情况下,我可以在while循环中包含sess.run(...) 。 但是,这是最佳选择吗? 在while循环的每次迭代中,图形中的张量(即权重)是否保持在GPU的内存中? 我读到,GPU计算最昂贵的部分
3回复

sess.run中的Tensorflow unhashable类型'list'

这些帖子实际上有成千上万,但我还没有看到一个解决我确切问题的帖子。 如果存在,请随时关闭。 我知道列表在Python中是可变的。 因此,我们无法将列表存储为字典中的键。 我有以下代码(因为它无关紧要而忽略了大量的代码): train_x是[batch_size, num_
1回复

tensorflow 编程中的 sess.run() 和“.eval()”

在 Tensorflow 编程中,有人可以告诉“.eval()”和“sess.run()”有什么区别。 它们各自做什么以及何时使用它们?
2回复

使用sess.run()时Tensorflow崩溃

我在Python v2.7中使用tensorflow 0.8.0。 我的IDE是PyCharm,我的操作系统是Linux Ubuntu 14.04 我注意到以下代码导致我的计算机冻结和/或崩溃: 激光线导致崩溃: print sess.run(mull [0,2])
1回复

将sess.run输出放入列表

因此,我的代码中包含一行,并且可以正常工作: 我想把这列为损失清单,所以我跑了: 但这是行不通的。 可能我无法分配这样的列表? 有办法做到这一点吗? 谢谢你的帮助!
1回复

在tensorflow中使用sess.run()有多昂贵?

我使用tensorflow在python中编写了机器学习算法。 下图显示了算法伪代码。 在这种算法中,我在训练循环中多次使用sess.run()。 我必须使用多个sess.run()的原因是,我必须在不同的输入端评估相同的神经网络以计算δ。 由于某些原因,我仍然不知道我的代码非常慢(请参