【问题标题】:Is the collection in tensorflow.get_collection() cleared?tensorflow.get_collection() 中的集合是否被清除?
【发布时间】:2016-09-23 09:16:32
【问题描述】:

我正在通过斯坦福课程学习使用 Tensorflow 的神经网络。我在实现 RNN 时发现了这一点,但不太明白为什么会累积损失:

# This adds a loss operation to the Graph for batch training
def add_loss_op(self, output):
    all_ones = [tf.ones([self.config.batch_size * self.config.num_steps])]
    cross_entropy = sequence_loss(
        [output], [tf.reshape(self.labels_placeholder, [-1])], all_ones, len(self.vocab))
    tf.add_to_collection('total_loss', cross_entropy)
    # Doesn't this increase in size every batch of training?
    loss = tf.add_n(tf.get_collection('total_loss')) 
    return loss

get_collection()here 的文档没有提到任何关于清除变量的内容。由于这是针对每个训练步骤运行的,因此每个训练阶段/小批量训练的损失是否都会增加并结转?

我还是个神经网络新手,所以请纠正我对此的任何误解!

【问题讨论】:

    标签: python neural-network tensorflow recurrent-neural-network


    【解决方案1】:

    我相信这里的 add_n 实际上只是为了确保将“total_loss”集合中的任何预先存在的损失添加到最终结果中。它不会改变任何变量,只是将其输入相加并返回总数。

    【讨论】:

      【解决方案2】:

      如果我没猜错的话,在这个 add_loss_to_collection 操作之前,还有其他操作可以将 l2_loss 的可训练变量添加到这个集合中。如果是这样,这个 add_n 操作意味着总结这个“损失”集合中的所有损失(包括 l2_loss 和预测损失)。你在“运行 add_to_loss 操作的迭代次数很多,loss 是不是增加了?”的时候迷惑了,不,如果你调试运行过程,你会看到这个集合的大小在整个 Graph 正在构建时已经确定,当 tensorflow 运行时实际上,该集合的大小或框架没有改变。

      【讨论】:

        猜你喜欢
        • 2012-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-05
        • 1970-01-01
        • 2019-05-07
        相关资源
        最近更新 更多