Python Tensorflow和课堂教学。我是否需要为每个实例化创建一个单独的图?
我有一个简短的问题。举个例子,我正在编写一个TunSoFrand程序来模拟一个将执行布尔函数的单层感知器。如果我正在编写一个包含该感知器的类,我是否需要为该类的每个实例化使用tf.graph创建一个单独的图 也就是说,如果我对布尔函数和、或和与非门进行建模,并编写一个类感知器: 我是否需要在init方法中为每个类实例运行tf.graph,以便它们不使用相同的命名空间?或者我可以为每种类型的操作定义作用域,只实例化一个类来执行所有三种类型的操作吗Python Tensorflow和课堂教学。我是否需要为每个实例化创建一个单独的图?,python,tensorflow,Python,Tensorflow,我有一个简短的问题。举个例子,我正在编写一个TunSoFrand程序来模拟一个将执行布尔函数的单层感知器。如果我正在编写一个包含该感知器的类,我是否需要为该类的每个实例化使用tf.graph创建一个单独的图 也就是说,如果我对布尔函数和、或和与非门进行建模,并编写一个类感知器: 我是否需要在init方法中为每个类实例运行tf.graph,以便它们不使用相同的命名空间?或者我可以为每种类型的操作定义作用域,只实例化一个类来执行所有三种类型的操作吗 谢谢这取决于您希望为您的问题提供的总体架构,原则
谢谢这取决于您希望为您的问题提供的总体架构,原则上这两种解决方案都是正确的 如果您预见到需要模型进行交互,例如创建需要两个模型的成本函数/推理,那么最好将它们都放在同一个图中,否则您将需要通过会话提取数据以使它们进行交互 相反,如果你知道这些模型永远不会相互交流,那么我认为在单独的图中构建它们是一个好的做法,以避免未经处理的交互,例如,最小化模型的成本函数w.r.t.一个属于另一个模型的变量 对于第二种解决方案,我喜欢用以下方式构造类,但我不确定这是否是一种好的做法:
class MyModel(object):
def __init__(self, **kwargs):
self.g = tf.Graph()
self.sess = None
with self.g.as_default():
self.build_graph()
def build_graph(self):
# here all the logic to build the graph.
# usually you store the outputs of the model in attributes
# self.input_data_placeholder
# self.target_data_placeholder
# self.prediction
# self.cost_tensor
# self.learning_rate_placeholder
# self.train_op
# self.accuracy_tensor
# self.init_op
def open_session(self):
if self.sess is None:
sess = tf.Session(graph=self.g)
sess.run(init_op)
else:
sess = self.sess
return sess
def predict(self, data):
sess = self.open_session()
pred = sess.run(
self.prediction,
feed_dict={self.input_data_placeholder: data}
)
return pred
def update(self, data, target, learning_rate):
sess = self.open_session()
cost, _ = sess.run(
[self.cost_tensor, self.train_op],
feed_dict={self.input_data_placeholder: data,
self.target_data_placeholder: target,
self.learning_rate_placeholder: learning_rate
}
return cost
现在,该类隐藏了所有与tensorflow相关的内容,您可以使用numpy.array与它通信