Python 如何在tensorflow中以嵌套方式运行2个会话?

Python 如何在tensorflow中以嵌套方式运行2个会话?,python,machine-learning,tensorflow,deep-learning,Python,Machine Learning,Tensorflow,Deep Learning,我使用tensorflow来训练网络,这是主要的会话a。为了预处理输入数据,我使用了空间变换网络(tensorflow版本)。这基本上意味着在训练期间,会话A首先开始,在每个历元之后,将使用会话B对空间变压器网络的一部分进行预处理。在会话B中,我有这样一行代码 para = tf.Variable(initial_value=initial, name='para', trainable = False) 当我开始运行时,会发生错误并指示运行时错误 RuntimeError: Graph is

我使用tensorflow来训练网络,这是主要的会话a。为了预处理输入数据,我使用了空间变换网络(tensorflow版本)。这基本上意味着在训练期间,会话A首先开始,在每个历元之后,将使用会话B对空间变压器网络的一部分进行预处理。在会话B中,我有这样一行代码

para = tf.Variable(initial_value=initial, name='para', trainable = False)
当我开始运行时,会发生错误并指示运行时错误

RuntimeError: Graph is finalized and cannot be modified.
我想知道解决这个问题的正确方法是什么?据我所知,有两种可能的方法: 1) 在主会话A中合并预处理部分,并使用feed_dict将预处理参数传递给会话。 2) 在主会话A的培训期间,找到处理另一个正在运行的会话以进行预处理的方法


有人对这个问题有经验吗?请帮帮我。

如果您要移动大量数据,并且每个导入的数据不同,则您需要保存数据一次,然后继续导入

# in the setup of your tensorflow graph
para_feed = tf.placeholder( dtype=tf.float32 , name='para', shape=[None,2] )
para = tf.Variable( dtype=tf.float32 , name='para', shape=[None,2] )
update_para = tf.assign(para,para_feed)

# to assign
sess.run( update_para , feed_dict={para_feed: initial})
# run your induction multiple times
# ...
如果您没有大量的数据,那么就这样简化它

# in the setup of your tensorflow graph
para = tf.placeholder( dtype=tf.float32 , name='para', shape=[None,2] )

# run your induction multiple times 
sess.run( your_induction_target , feed_dict={para: initial})

如果您要移动大量数据,并且每个归纳法的数据不同,则您需要保存数据一次,然后继续归纳法

# in the setup of your tensorflow graph
para_feed = tf.placeholder( dtype=tf.float32 , name='para', shape=[None,2] )
para = tf.Variable( dtype=tf.float32 , name='para', shape=[None,2] )
update_para = tf.assign(para,para_feed)

# to assign
sess.run( update_para , feed_dict={para_feed: initial})
# run your induction multiple times
# ...
如果您没有大量的数据,那么就这样简化它

# in the setup of your tensorflow graph
para = tf.placeholder( dtype=tf.float32 , name='para', shape=[None,2] )

# run your induction multiple times 
sess.run( your_induction_target , feed_dict={para: initial})

新信息:我刚刚发现的一件事是,我使用了tf.train.Supervisor,因此它将在运行sv=tf.train.Supervisor(…)之后完成图形。之后的预处理运行无法修改图形…是的,关于使用feed_dict传递参数,您是正确的。另一种方法是使用feed_dict将数据移动到占位符中,然后使用tf.assign将值分配给长寿命变量。第二个选项非常有用,如果您要一次性移入大量数据并对其进行多次迭代。它将为您节省每次导入迭代时将数据从RAM复制到GPU的带宽。新信息:我刚刚发现的一件事是,我使用了tf.train.Supervisor,因此它将在运行sv=tf.train.Supervisor(…)后完成图形。之后的预处理运行无法修改图形…是的,关于使用feed_dict传递参数,您是正确的。另一种方法是使用feed_dict将数据移动到占位符中,然后使用tf.assign将值分配给长寿命变量。第二个选项非常有用,如果您要一次性移入大量数据并对其进行多次迭代。它将为您节省每次导入迭代时将数据从RAM复制到GPU的带宽。