Python 如何将参数从全局模型复制到特定于线程的模型 背景:

Python 如何将参数从全局模型复制到特定于线程的模型 背景:,python,tensorflow,Python,Tensorflow,我是TensorFlow的新手,我正在尝试实现一些偶尔需要从全局共享模型复制到局部线程特定模型的算法 问题: 完成上述任务的最佳/正确方法是什么?我在下面提供了一个虚拟示例,说明了我目前的做法以及我遇到的错误。有人能解释一下为什么会发生错误吗 import tensorflow as tf import threading class ExampleModel(object): def __init__(self, graph): with graph.as_default():

我是TensorFlow的新手,我正在尝试实现一些偶尔需要从全局共享模型复制到局部线程特定模型的算法

问题: 完成上述任务的最佳/正确方法是什么?我在下面提供了一个虚拟示例,说明了我目前的做法以及我遇到的错误。有人能解释一下为什么会发生错误吗

import tensorflow as tf
import threading

class ExampleModel(object):
  def __init__(self, graph):
    with graph.as_default():
      self.w = tf.Variable(tf.constant(1, shape=[1,2]))

sess = tf.InteractiveSession()
graph = tf.get_default_graph()
global_network = ExampleModel(graph)
sess.run(tf.initialize_all_variables())

def example(i):
  global global_network, graph
  local_network = ExampleModel(graph)
  sess.run(local_network.w.assign(global_network.w))

threads = []
for i in range(5):
  t = threading.Thread(target=example, args=(i,))
  threads.append(t)

for t in threads:
  t.start()
错误: 关于Tensorflow中的类:

重要提示:对于图形构造,此类不是线程安全的。 所有操作都应该从单个线程或外部线程创建 必须提供同步。除非另有规定,所有 方法不是线程安全的

导致错误的是
self.w=…
声明和
local_network.w.assign(…)
操作

我知道它基本上会杀死您的多线程实现,但是您可以通过将这些声明移动到主线程来修复上述代码。然后,您可以使用线程实际运行您指定的操作。例如:

将tensorflow导入为tf
导入线程
类示例模型(对象):
定义初始化(自,图形):
使用graph.as_default():
self.w=tf.Variable(tf.constant(1,shape=[1,2]))
sess=tf.InteractiveSession()
graph=tf.get\u default\u graph()
全局网络=示例模型(图)
sess.run(tf.global\u variables\u initializer())
def示例(sess,分配w):
sess.run(分配w)
线程=[]
对于范围(5)中的i:
本地_网络=示例模型(图形)
assign\u w=本地网络.w.assign(全局网络.w)
线程(target=example,args=(sess,assign_w))
threads.append(t)
对于螺纹中的t:
t、 开始()
我还建议您通过
args
参数将变量传递给线程,而不是使用
global


<>最后,考虑使用<代码> GULALL变量变量初始化器,而不是弃用<代码> RealAlgZeALE变量> /代码> ./P>嗨,我在多线程上也有类似的问题,有什么文档或例子可以指导我吗?谢谢
Exception in thread Thread-3:
Traceback (most recent call last):
  File "/Users/kennyhsu5/anaconda/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/Users/kennyhsu5/anaconda/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "tmp.py", line 16, in example
    local_network = ExampleModel(graph)
  File "tmp.py", line 7, in __init__
    self.w = tf.Variable(tf.constant(1, shape=[1,2]))
  File "/Users/kennyhsu5/anaconda/lib/python2.7/site-packages/tensorflow/python/ops/variables.py", line 211, in __init__
dtype=dtype)
  File "/Users/kennyhsu5/anaconda/lib/python2.7/site-packages/tensorflow/python/ops/variables.py", line 319, in _init_from_args
    self._snapshot = array_ops.identity(self._variable, name="read")
  File "/Users/kennyhsu5/anaconda/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2976, in __exit__
    self._graph._pop_control_dependencies_controller(self)
  File "/Users/kennyhsu5/anaconda/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2996, in _pop_control_dependencies_controller
    assert self._control_dependencies_stack[-1] is controller
AssertionError