我是一个新手机智TensorFlow,我在过去的几天研究它。 我想了解,如果以下两个函数是等效与否:这些功能在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)
如果他们实际上不同,主要区别是什么?
我是一个新手机智TensorFlow,我在过去的几天研究它。 我想了解,如果以下两个函数是等效与否:这些功能在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)
如果他们实际上不同,主要区别是什么?
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
那么,是不是正确的说,2)交叉熵的应用程序,以获得标签'0.0'或'1.0'的概率,而1)需要进一步的通道,从而得到1-热门的标签? – Kyrol
不,这是不正确的。 'softmax'不会产生单热编码矢量。 softmax操作重新调整输入矢量。为了获得交叉熵作为一个错误,你将需要分别计算交叉熵。 – daniel451
好吧,我明白这一点。 – Kyrol