首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sess.run()多个操作系统与多个sess.run()

sess.run()多个操作系统与多个sess.run()
EN

Stack Overflow用户
提问于 2019-08-15 22:03:17
回答 2查看 145关注 0票数 1

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

示例:

代码语言:javascript
复制
#!/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]))

编辑:最初,我还在想,是否存在多个会话会导致不同结果的情况,例如计算图中的依赖导致执行顺序不同等等。但我在问题中没有明确说明这一点,而是给出了一个相当虚假的例子。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-15 22:06:36

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

代码语言:javascript
复制
#!/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]))
票数 1
EN

Stack Overflow用户

发布于 2019-08-15 22:13:27

在结果方面没有任何差别:

代码语言:javascript
复制
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)

当谈到速度时,以下是一些衡量标准:

代码语言:javascript
复制
%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)

因此,如果您一起运行多个节点,那么运行速度肯定会更快。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57516740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档