tensorflow--交叉熵

学而不思则罔,思而不学则怠。

最近在看《TensorFlow 实战Google深度学习框架第二版》这本书。从头开始学习深度学习,对于细节方面进行探究。相当于重新拾起来这门”手艺“。

这篇随笔重点是交叉熵。在本书中出现的位置是62页,章节是3.4.5完整神经网络样例程序的20行附近(可能空行不一致),这里示例代码中出现了损失函数,代码如下:

 1 import tensorflow as tf
 2 from numpy.random import RandomState
 3 
 4 batch_size = 8
 5 
 6 w1 = tf.Variable(tf.random_normal((2,3), stddev=1, seed=1))
 7 w2 = tf.Variable(tf.random_normal((3,1), stddev=1, seed=1))
 8 
 9 #定义输入的张量,第一维设为None,方便变化
10 x = tf.placeholder(tf.float32, shape=(None, 2), name='x-input')
11 y_ = tf.placeholder(tf.float32, shape=(None, 1), name='y-input')
12 
13 a = tf.matmul(x, w1)
14 y = tf.matmul(a, w2)
15 
16 #cross_entropy就是损失函数
17 y = tf.sigmoid(y)
18 cross_entropy = -tf.reduce_mean(
19     y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0))
20     + (1-y_)*tf.log(tf.clip_by_value(1-y, 1e-10, 1.0)))

我们可以看到18行这里是我修改过的代码,根据交叉熵的理论,在这个例子中交叉熵的公式应该为

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
  <mi>l</mi>
  <mi>o</mi>
  <mi>s</mi>
  <mi>s</mi>
  <mo>=</mo>
  <mo>&#x2212;<!-- − --></mo>
  <mi>y</mi>
  <mi>l</mi>
  <mi>o</mi>
  <mi>g</mi>
  <mo stretchy="false">(</mo>
  <mrow class="MJX-TeXAtom-ORD">
    <mover>
      <mi>y</mi>
      <mo stretchy="false">&#x005E;<!-- ^ --></mo>
    </mover>
  </mrow>
  <mo stretchy="false">)</mo>
  <mo>&#x2212;<!-- − --></mo>
  <mo stretchy="false">(</mo>
  <mn>1</mn>
  <mo>&#x2212;<!-- − --></mo>
  <mi>y</mi>
  <mo stretchy="false">)</mo>
  <mi>l</mi>
  <mi>o</mi>
  <mi>g</mi>
  <mo stretchy="false">(</mo>
  <mn>1</mn>
  <mo>&#x2212;<!-- − --></mo>
  <mrow class="MJX-TeXAtom-ORD">
    <mover>
      <mi>y</mi>
      <mo stretchy="false">&#x005E;<!-- ^ --></mo>
    </mover>
  </mrow>
  <mo stretchy="false">)</mo>
</math>

应该是二值分布。不过书中给的代码有谬误,20行中1-y_写成了1-y。

参考博客https://www.cnblogs.com/qggg/p/6850120.html

如果本文有理解错误的地方还请评论指正,你的帮助是我进步的动力。

猜你喜欢

转载自www.cnblogs.com/IGNB/p/10789648.html
今日推荐