擅长:python、mysql、java
<p><code>tf.nn.l2_loss()</code>函数返回一个0维张量。</p>
<p>但是不需要手动地将其应用到每个权重张量是很好的,因此将权重张量存储在列表中是解决问题的一种方法(正如@mrry所指出的)。</p>
<p>但不必每次都写出来,您可以使用以下函数</p>
<pre><code>def l2_loss_sum(list_o_tensors):
return tf.add_n([tf.nn.l2_loss(t) for t in list_o_tensors])
</code></pre>
<p>在您的情况下,这看起来像:</p>
<pre><code>total_loss = l2_loss_sum([layers[j].weights for j in range(self.n_layers)])
</code></pre>
<p>此外,<code>tf.nn.l2_loss()</code>隐式地将平方运算应用于值,并将所有平方值乘以1/2,因此如果使用类似于<code>tf.nn.l2_loss(layers[j].weights**2 for j in range(self.n_layers))</code>的方法,则实际上会将权重提高到第四次方。因此,这个损失项的导数会很奇怪:它不会抵消1/2到1(但会隐式地使β加倍),权重会被立方化。</p>