我有一个深度神经网络,层之间的权重存储在列表中.
layers[j].weights
我想在我的成本函数中包括岭惩罚.然后我需要使用诸如tf.nn.l2_loss(layers[j].weights**2 for j in range(self.n_layers))
所有权重的平方和之类的东西
.
特别是权重定义为:
>>> avs.layers [, , , , , , ] >>> >>> avs.layers[0].weights >>>
我怎么能在张量流中做到这一点?
对张量列表求和的标准方法是使用该tf.add_n()
操作,该操作采用张量列表(每个具有相同的大小和形状)并产生包含总和的单个张量.
对于你遇到的特殊问题,我假设每个layers[j].weights
人都有不同的大小.因此,您需要在求和之前将每个元素减少到标量,例如使用tf.nn.l2_loss()
函数本身:
weights = [layers[j].weights for j in range(self.n_layers)] losses = [tf.nn.l2_loss(w) for w in weights] total_loss = tf.add_n(losses)
(但请注意,当要添加的值很大时,您可能会发现计算一系列tf.add()
操作更有效,因为TensorFlow会将每个add_n
参数的值保留在内存中,直到所有这些值都被计算出来.一系列add
操作允许一些计算更早发生.)