我是TensorFlow的新手,我在最近几天研究它。 我想了解以下两个函数是否相同:
1
softmax = tf.add(tf.matmul(x, weights), biases, name=scope.name)
2
softmax = tf.nn.softmax(tf.matmul(x, weights) + biases, name=scope.name)
如果它们实际上不同,主要区别是什么?
答案 0 :(得分:3)
softmax1 = tf.add(tf.matmul(x, weights), biases, name=scope.name)
不等于
softmax2 = tf.nn.softmax(tf.matmul(x, weights) + biases, name=scope.name)
因为softmax1
完全没有softmax计算,softmax2
确实没有。请参阅tf.nn.softmax的Tensorflow API。 general idea of a softmax是通过重新调整整个数据序列来规范化输入,确保它们的条目位于区间(0,1)中,总和为1。
两个陈述之间唯一相同的是基本计算。 +
做同样的事情tf.add,tf.add(tf.matmul(x, weights), biases)
等于 tf.matmul(x, weights) + biases
。
编辑:添加一些说明(我想你真的不知道softmax在做什么?):
tf.matmul(x, W) + bias
计算x
(您的输入矢量)和W
当前图层的权重之间的矩阵乘法。然后添加bias
。
此计算模拟一层的激活。此外,您还拥有激活功能,例如sigmoid
功能可以转换您的激活功能。因此,对于一个层,您通常会执行以下操作:
h1 = tf.sigmoid(tf.matmul(x, W) + bias)
此处h1
将激活此图层。
softmax
操作只是重新调整您的输入。例如,如果您在输出层上激活了此项:
output = [[1.0, 2.0, 3.0, 5.0, 0.5, 0.2]]
softmax重新调整此输入以适应区间(0,1)中的值,并且总和等于1:
tf.nn.softmax(output)
> [[ 0.01497873, 0.0407164 , 0.11067866, 0.81781083, 0.00908506,
0.00673038]]
tf.reduce_sum(tf.nn.softmax(output))
> 1.0