Tensorflow Eager Execution 多线程
Tensorflow Eager Execution Multithreaded
运行 tensorflow 2.0 上的 DDPG 强化学习器。对于我正在使用的批量大小,训练非常慢,所以我希望 运行 在一个单独的线程中进行训练而不是执行。
但是,当我尝试在单独的线程上训练 Tensorflow 模型而不是使用它来预测和执行时,我 运行 遇到了问题。
首先是图形错误:
ValueError: Tensor("dense_2/kernel/Read/ReadVariableOp:0", shape=(3, 9), dtype=float32) must be from the same graph as Tensor("Const:0", shape=(32, 3), dtype=float32).
这个问题很容易通过在训练线程上从主线程恢复图表来解决:
with self.tf_graph.as_default():
此错误随后消失,但在新线程上禁用了急切执行,这会导致其他问题。有没有办法在第二个线程上恢复 tensorflow 模型的会话,以便可以在一个线程上训练 tensorflow 模型并在另一个线程上进行评估?或者这是不可能的?
最终我成功了。当我认为我使用的是 tensorflow 2 时,我是 运行 tensorflow 1.4,因此默认情况下禁用急切执行。启用即时执行后,我不需要在另一个线程上做任何特殊的事情,它就可以正常工作。
我在主线程上创建了一个单独的模型副本,并在执行前从锁中的训练线程复制了权重。
运行 tensorflow 2.0 上的 DDPG 强化学习器。对于我正在使用的批量大小,训练非常慢,所以我希望 运行 在一个单独的线程中进行训练而不是执行。
但是,当我尝试在单独的线程上训练 Tensorflow 模型而不是使用它来预测和执行时,我 运行 遇到了问题。
首先是图形错误:
ValueError: Tensor("dense_2/kernel/Read/ReadVariableOp:0", shape=(3, 9), dtype=float32) must be from the same graph as Tensor("Const:0", shape=(32, 3), dtype=float32).
这个问题很容易通过在训练线程上从主线程恢复图表来解决:
with self.tf_graph.as_default():
此错误随后消失,但在新线程上禁用了急切执行,这会导致其他问题。有没有办法在第二个线程上恢复 tensorflow 模型的会话,以便可以在一个线程上训练 tensorflow 模型并在另一个线程上进行评估?或者这是不可能的?
最终我成功了。当我认为我使用的是 tensorflow 2 时,我是 运行 tensorflow 1.4,因此默认情况下禁用急切执行。启用即时执行后,我不需要在另一个线程上做任何特殊的事情,它就可以正常工作。
我在主线程上创建了一个单独的模型副本,并在执行前从锁中的训练线程复制了权重。