Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tensorflow:如何赋予变量作用域_Python_Tensorflow - Fatal编程技术网

Python Tensorflow:如何赋予变量作用域

Python Tensorflow:如何赋予变量作用域,python,tensorflow,Python,Tensorflow,我必须先训练一个网络,然后再训练它。我使用单独文件中的代码和它们自己的会话来实现这一点,但是第一个会话中的变量仍然会被带入并导致问题(因为我在一个“主”文件中运行这两个文件) 我可以通过运行我的pretrain文件来解决这个问题,该文件保存了经过训练的层,然后运行我的训练文件来加载保存的层。但如果能够一步完成这两件事,那就太好了。如何“断开链接”并避免不需要的变量具有全局范围 “主”文件的外观如下所示: from util import pretrain_nn from NN import Ne

我必须先训练一个网络,然后再训练它。我使用单独文件中的代码和它们自己的会话来实现这一点,但是第一个会话中的变量仍然会被带入并导致问题(因为我在一个“主”文件中运行这两个文件)

我可以通过运行我的pretrain文件来解决这个问题,该文件保存了经过训练的层,然后运行我的训练文件来加载保存的层。但如果能够一步完成这两件事,那就太好了。如何“断开链接”并避免不需要的变量具有全局范围

“主”文件的外观如下所示:

from util import pretrain_nn
from NN import Network

shape = [...]
layer_save_file = ''
data = get_data()

# Trains and saves layers
pretrain_nn(shape, data, layer_save_file) 

# If I were to print all variables (using tf.all_variables) 
# variables only used in pretrain_nn show up 
# (the printing would be done inside `Network`)
NN = Network(shape, pretrain=True, layer_save_file) 

NN.train(data)

# Doesn't work because apparently some variables haven't been initialized.
NN.save()

变量的生存期隐式地绑定到TensorFlow图,默认情况下,两个计算都将添加到同一个(全局)图中。您可以使用
和tf.Graph()。作为默认值():
围绕每个子计算的块来适当地确定它们的范围:

with tf.Graph().as_default():
  # Trains and saves layers
  pretrain_nn(shape, data, layer_save_file) 

with tf.Graph().as_default():
  NN = Network(shape, pretrain=True, layer_save_file) 

  NN.train(data)

  NN.save()

如果没有代码片段,我对“变量在另一个脚本中显示”的最初反应是假设您正在从pretrain import*执行
。添加了示例代码,尽管我不知道您想表达什么观点<代码>*
将导入所有模块,它与函数中的python变量无关。正如我所说,这是一个盲目的猜测,没有看到代码。我想说的一点是,如果“GLOBAL\u COUNTER”是util中的一个变量,那么来自util import的
将把“GLOBAL\u COUNTER”导入main\u file.py。不过,这显然不适用于这里。感谢您提供的示例。是否可以通过简单地重置图形来进行范围界定?在tensorflow API中有一个函数
tf.Graph()。\uuu init\uuuu()
,它似乎可以做到这一点,但当我尝试使用时,仍然会出现有关取消选中它的错误。正在使用的值。(这样做的好处是我不必总是费心添加上下文管理器,它将隐藏在我的
pretrain\u nn
函数和
网络
类后面)