2016-02-29 55 views
1

我是一个新手机智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) 

如果他们实际上不同,主要区别是什么?

回答

2
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 
+0

那么,是不是正确的说,2)交叉熵的应用程序,以获得标签'0.0'或'1.0'的概率,而1)需要进一步的通道,从而得到1-热门的标签? – Kyrol

+0

不,这是不正确的。 'softmax'不会产生单热编码矢量。 softmax操作重新调整输入矢量。为了获得交叉熵作为一个错误,你将需要分别计算交叉熵。 – daniel451

+0

好吧,我明白这一点。 – Kyrol