代码之家  ›  专栏  ›  技术社区  ›  solver149

Tensorflow多个会话。在同一迭代中运行()

  •  2
  • solver149  · 技术社区  · 7 年前

    以下是Tensorflow NN训练部分的两种代码模式。

    我发现使用模型1是合乎逻辑的,但我经常在多个地方看到模型2。我觉得模式2是错误的。对于相同的数据,模型会在会话中为每次迭代运行两次图吗?有没有我遗漏了什么,人们会因为其他原因而这样做?

    模式1

    for epoch in range(epochs):
        for iteration in range(num_tr_iter):
            _, loss, accuracy = sess.run([optimizer, loss, accuracy], feed_dict)
    

    for epoch in range(epochs):
        for iteration in range(num_tr_iter):
            sess.run(optimizer, feed_dict)
            loss, accuracy = sess.run([loss, accuracy],feed_dict)
    

    为了更清楚,我将问题扩大

    如果下面的sess.run()执行optimizer节点,它将执行其所有依赖节点。它还将运行基础convnet和loss函数。

        sess.run(optimizer, feed_dict)
    

    接下来,如果下面的sess.run()执行loss节点,为什么不使用当前权重执行convnet呢。我不是在推断它会再次运行优化。即使要计算当前损耗,tensorflow是否会执行convnet并计算损耗?

            loss, accuracy = sess.run([loss, accuracy],feed_dict)
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   Jacob Soderlund    7 年前

    Session.Run 将仅运行计算第一个参数中给定的图形元素。

    所以在模型2中, sess.run(optimizer, feed_dict) loss, accuracy = sess.run([loss, accuracy],feed_dict)

    请注意,Session.Run docs 提及:

    顺序是。。。在未定义的调用中计算操作。

        2
  •  0
  •   Abhishek Verma    7 年前

    在模型2中,第一行代码在模型上运行优化器,第二行计算损失和精度。它不会运行图形两次。