TensorFlow:如何总结TensorBoard的两个对象网络?

TensorFlow:如何总结TensorBoard的两个对象网络?,tensorflow,tensorboard,Tensorflow,Tensorboard,我有一个类,它有创建网络的方法 class DQN: def __init__(self, session, input_size, output_size, name): . . . self._build_network() def _build_network(self, h_size=16, l_rate=0.01): with tf.variable_scope(self.net_name

我有一个类,它有创建网络的方法

class DQN:
    def __init__(self, session, input_size, output_size, name):
        .
        .
        .
        self._build_network()

    def _build_network(self, h_size=16, l_rate=0.01):
        with tf.variable_scope(self.net_name):
            self._X = tf.placeholder(tf.float32, [None, self.input_size], name="input_x")
            net = self._X
            net = tf.layers.dense(net, h_size, activation=lambda x: tf.maximum(0.3*x,x))
            net = tf.layers.dense(net, self.output_size) 
            self._Qpred = net

        self._Y = tf.placeholder(shape=[None, self.output_size], dtype=tf.float32)

        # Loss function
        with tf.name_scope("loss") as scope:
            self._loss = tf.reduce_mean(tf.square(self._Y - self._Qpred))
            self._loss_summary = tf.summary.scalar("loss", self._loss)

        # Learning
        self._train = tf.train.AdamOptimizer(learning_rate=l_rate).minimize(self._loss)

    def update(self, x_stack, y_stack, merged_summary):
        return self.session.run(
            [self._loss, self._train, merged_summary],
            feed_dict={
                self._X: x_stack,
                self._Y: y_stack,
            }
        )
并且必须创建两个
DQN
实例(单独的网络)

我想做的是跟踪
mainDQN
loss
功能。但是对于以上代码,调用
update()
时会发生错误。 :

我认为这个错误与
targetDQN
有关

但我不知道该怎么处理


需要你的建议,谢谢。

你说得对,这个问题与
targetDQN
对象有关。基本上,您的
merged\u摘要
是一个op,它既依赖于您的主
损失
,也依赖于您的目标
损失
。因此,当您询问其评估时,它将需要输入
DQN

我建议您通过以下方式重构
update
函数:

def update(self, x_stack, y_stack):
    return self.session.run(
        [self._loss, self._train, self._loss_summary],
        feed_dict={
            self._X: x_stack,
            self._Y: y_stack,
        }
    )
因此,您只要求对正确的摘要进行评估


编辑:如果您想要更多与
DQN
对象之一关联的摘要,可以使用
tf.summary.merge
方法(请参阅)合并它们,并要求对其进行评估。

非常棒的解决方案!感谢提问:如果我添加更多摘要实例变量(比如,
self.\u weight,self.\u bias
.etc),我是否必须在
[self.\u loss,self.\u train,self.\u loss\u summary]
中手动添加这些变量?感觉像是坏代码。。。有更好的方法吗?有一种方法可以做到这一点:
tf.summary.merge
请参见
tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'target/input_x' with dtype float
     [[Node: target/input_x = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
def update(self, x_stack, y_stack):
    return self.session.run(
        [self._loss, self._train, self._loss_summary],
        feed_dict={
            self._X: x_stack,
            self._Y: y_stack,
        }
    )