Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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,我有一个简短的问题。举个例子,我正在编写一个TunSoFrand程序来模拟一个将执行布尔函数的单层感知器。如果我正在编写一个包含该感知器的类,我是否需要为该类的每个实例化使用tf.graph创建一个单独的图 也就是说,如果我对布尔函数和、或和与非门进行建模,并编写一个类感知器: 我是否需要在init方法中为每个类实例运行tf.graph,以便它们不使用相同的命名空间?或者我可以为每种类型的操作定义作用域,只实例化一个类来执行所有三种类型的操作吗 谢谢这取决于您希望为您的问题提供的总体架构,原则

我有一个简短的问题。举个例子,我正在编写一个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与它通信