复制张量流图

MBZ

复制TensorFlow图并使之保持最新状态的最佳方法是什么?

理想情况下,我想将重复的图形放在另一个设备上(例如,从GPU到CPU),然后不时更新副本。

rdadolf

简短的答案:您可能需要检查点文件permalink)。


长答案:

让我们在这里清除设置。我假设您有两个设备A和B,并且您正在A上进行训练,并在B上进行推理。您希望定期使用在另一个设备上进行训练时发现的新参数来更新运行推理的设备上的参数。 。上面链接的教程是一个不错的起点。它向您展示了tf.train.Saver对象是如何工作的,这里您不需要任何更复杂的东西。

这是一个例子:

import tensorflow as tf

def build_net(graph, device):
  with graph.as_default():
    with graph.device(device):
      # Input placeholders
      inputs = tf.placeholder(tf.float32, [None, 784])
      labels = tf.placeholder(tf.float32, [None, 10])
      # Initialization
      w0 = tf.get_variable('w0', shape=[784,256], initializer=tf.contrib.layers.xavier_initializer())
      w1 = tf.get_variable('w1', shape=[256,256], initializer=tf.contrib.layers.xavier_initializer())
      w2 = tf.get_variable('w2', shape=[256,10], initializer=tf.contrib.layers.xavier_initializer())
      b0 = tf.Variable(tf.zeros([256]))
      b1 = tf.Variable(tf.zeros([256]))
      b2 = tf.Variable(tf.zeros([10]))
      # Inference network
      h1  = tf.nn.relu(tf.matmul(inputs, w0)+b0)
      h2  = tf.nn.relu(tf.matmul(h1,w1)+b1)
      output = tf.nn.softmax(tf.matmul(h2,w2)+b2)
      # Training network
      cross_entropy = tf.reduce_mean(-tf.reduce_sum(labels * tf.log(output), reduction_indices=[1]))
      optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)    
      # Your checkpoint function
      saver = tf.train.Saver()
      return tf.initialize_all_variables(), inputs, labels, output, optimizer, saver

培训计划的代码:

def programA_main():
  from tensorflow.examples.tutorials.mnist import input_data
  mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
  # Build training network on device A
  graphA = tf.Graph()
  init, inputs, labels, _, training_net, saver = build_net(graphA, '/cpu:0')
  with tf.Session(graph=graphA) as sess:
    sess.run(init)
    for step in xrange(1,10000):
      batch = mnist.train.next_batch(50)
      sess.run(training_net, feed_dict={inputs: batch[0], labels: batch[1]})
      if step%100==0:
        saver.save(sess, '/tmp/graph.checkpoint')
        print 'saved checkpoint'

...以及推理程序的代码:

def programB_main():
  from tensorflow.examples.tutorials.mnist import input_data
  mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
  # Build inference network on device B
  graphB = tf.Graph()
  init, inputs, _, inference_net, _, saver = build_net(graphB, '/cpu:0')
  with tf.Session(graph=graphB) as sess:
    batch = mnist.test.next_batch(50)

    saver.restore(sess, '/tmp/graph.checkpoint')
    print 'loaded checkpoint'
    out = sess.run(inference_net, feed_dict={inputs: batch[0]})
    print out[0]

    import time; time.sleep(2)

    saver.restore(sess, '/tmp/graph.checkpoint')
    print 'loaded checkpoint'
    out = sess.run(inference_net, feed_dict={inputs: batch[0]})
    print out[1]

如果先启动训练程序,然后启动推理程序,则会看到推理程序产生两个不同的输出(来自同一输入批次)。这是因为它获取了训练程序已检查点确定的参数。

现在,该程序显然不是您的终点。我们不进行任何真正的同步,并且您必须确定就检查点而言“定期”是什么意思。但这应该使您了解如何将参数从一个网络同步到另一个网络。

最后一个警告:这并不能意味着这两个网络是必然确定性。TensorFlow中存在已知的不确定性元素(例如this),因此如果需要完全相同的答案,请当心。但这是在多个设备上运行的硬道理。

祝你好运!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法将数据输入张量流图

来自分类Dev

如何在张量流中解释张量板图?

来自分类Dev

如何从内存缓冲区加载张量流图

来自分类Dev

如何在张量流中复制一列?

来自分类Dev

如何修复ValueError:图断开:无法在张量流中获取张量值?

来自分类Dev

Python - 张量流错误,张量必须来自同一个图

来自分类Dev

置换张量流张量

来自分类Dev

在张量流中扩展张量

来自分类Dev

保存为张量流图的Keras序列模型缺少火车运行?

来自分类Dev

有没有办法在 C++ 中保存冻结的张量流图?

来自分类Dev

通过张量流复制到keras进行归一化

来自分类Dev

使用不同的人工神经网络框架(ffnet,张量流)复制结果

来自分类Dev

重载张量流模型

来自分类Dev

张量流懒吗?

来自分类Dev

张量流中的外积

来自分类Dev

张量流重塑用法

来自分类Dev

重载张量流模型

来自分类Dev

Python 3.6 张量流

来自分类Dev

张量流 RNN 实现

来自分类Dev

张量流,删除重复

来自分类Dev

图像排序张量流

来自分类Dev

InvalidArgumentError 张量流

来自分类Dev

张量流中张量列表的总和

来自分类Dev

在张量流中更改张量的比例

来自分类Dev

在张量流中索引一维张量

来自分类Dev

放大张量流中的张量

来自分类Dev

从张量流中的张量提取特定元素

来自分类Dev

张量流为批量梯度洗牌张量

来自分类Dev

更新张量流中的张量