标签:minus shape googl dev 理解 cli 变化 spl ref
学而不思则罔,思而不学则怠。
最近在看《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>−<!-- − --></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">^<!-- ^ --></mo> </mover> </mrow> <mo stretchy="false">)</mo> <mo>−<!-- − --></mo> <mo stretchy="false">(</mo> <mn>1</mn> <mo>−<!-- − --></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>−<!-- − --></mo> <mrow class="MJX-TeXAtom-ORD"> <mover> <mi>y</mi> <mo stretchy="false">^<!-- ^ --></mo> </mover> </mrow> <mo stretchy="false">)</mo> </math> |
应该是二值分布。不过书中给的代码有谬误,20行中1-y_写成了1-y。
参考博客https://www.cnblogs.com/qggg/p/6850120.html
如果本文有理解错误的地方还请评论指正,你的帮助是我进步的动力。
标签:minus shape googl dev 理解 cli 变化 spl ref
原文地址:https://www.cnblogs.com/IGNB/p/10789648.html