我正在学习 Coursera 的 Tensorflow 课程,但我无法理解下面的代码。你能用简单的英语解释一下吗?
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation=tf.nn.relu),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)])
我想知道
tf.nn.softmax
是做什么的。在课程描述中,他们有以下描述,但我不清楚。
顺序:定义神经网络中的层序列
Flatten:还记得之前打印出来时我们的图像是正方形的吗? > 展平只是将该正方形变成一维集合。
密集:添加一层神经元
每一层神经元都需要一个激活函数来告诉它们要做什么。有很多选项,但现在只使用这些。
Relu 实际上意味着 “如果 X>0 返回 X,否则返回 0”——所以它所做的只是将 0 或更大的值传递到网络中的下一层。
Softmax 采用一组值,并有效地选择最大的值,因此,例如,如果最后一层的输出看起来像
,它可以让您免于通过它寻找最大值,并将其转换为[0.1, 0.1, 0.05, 0.1, 9.5, 0.1, 0.05, 0.05, 0.05]
-- 目标是节省大量编码![0,0,0,0,1,0,0,0,0]
这是文档:https://www.tensorflow.org/api_docs/python/tf/nn/softmax
基本上,softmax 适合分类。它将采用任何数字并将其映射到 0 或 1 的输出(例如),因为我们说如果 Softmax(X) <0.5 then set it equal to zero and if Softmax(X)>=0.5 则将其设置为等于 1。
看一下这里的这篇文章,其中也介绍了 sigmoid 和 softmax 函数。图表很重要。谷歌图像搜索也会给出该函数的一些图表。
http://dataaspirant.com/2017/03/07/difference- Between-softmax-function-and-sigmoid-function/
tf.keras.layers.Dense
在神经网络中创建一个层。在您的代码中,有两个这样的层。第一层有 128 个“神经元”,并使用称为
tf.nn.relu
的特殊数学函数进行激活。该层帮助网络学习数据中的模式。第二层有 10 个神经元,使用
tf.nn.softmax
进行激活。该层帮助网络做出预测。现在,让我们关注
tf.nn.softmax
。它就像第二层 10 个神经元的投票系统。它获取来自这些神经元的数字并将其转化为概率。想象一下,您有 10 个数字代表网络对不同选项的信心。这些数字可能是这样的: [2.0、3.0、1.0、0.1、2.5、1.8、0.5、1.2、0.7、2.2]。当您使用
tf.nn.softmax
时,这些数字会更容易理解。它会压缩它们,使它们加起来为 1。这就像在说:“网络对每个选项的确定性如何?”应用
tf.nn.softmax
后,数字可能如下所示: [0.11274497, 0.30647259, 0.04147656, 0.01686311, 0.18588502, 0.09230777, 0.0251568, 0.05065958, 0.03072 659, 0.13770701]。现在,这些新数字告诉您可能性。例如,网络对第二个选项 (3.0) 最有信心 (30.6%),对第四个选项 (0.1) 不太有信心 (1.7%)。