tf.nn.softmax参数详解以及作用

参考地址:https://zhuanlan.zhihu.com/p/93054123

tf.nn.softmax(logits,axis=None,name=None,dim=None)

  • logits:一个非空的Tensor。必须是下列类型之一:half, float32,float64
  • axis:将在其上执行维度softmax。默认值为-1,表示最后一个维度
  • name:操作的名称(可选)
  • dim:axis的已弃用的别名

输入: 全连接层(往往是模型的最后一层)的值
输出: 归一化的值,含义是属于该位置的概率;
通过Softmax回归,将logistic的预测二分类的概率的问题推广到了n分类的概率的问题。

softmax的输出向量是概率,该样本属于各个类的概率。输出的向量的每个值的大小范围为0到1。
当一个样本经过softmax层并输出一个向量,会取这个向量中值最大的那个数的index作为这个样本的预测标签

返回: 一个Tensor,与logits具有相同的类型和shape,softmax函数的输出不改变维度的大小
用途: 如果做单分类问题,那么输出的值就取top1(最大,argmax);如果做多(N)分类问题,那么输出的值就取topN

softmax的数学计算公式

softmax = tf.exp(logits) / tf.reduce_sum(tf.exp(logits), axis)

计算tf.exp(x)

e为自然底数,值为2.7182818284…
tf.exp(x) = e x

tf.reduce_sum(tensor,axis) 是求和函数
  • tensor: 要减少的张量
  • axis: 要减小的尺寸.
    默认值为None,则缩小所有尺寸.
    为0,按行求和
    为1,按列求和
  • keep_dims:如果为true,则保留长度为1的缩小尺寸.
x = tf.constant([[1, 1, 1], [1, 1, 1]])
sess = tf.InteractiveSession()

print(sess.run(tf.reduce_sum(x))) # 6 默认值为None,则缩小所有尺寸.
print(sess.run(tf.reduce_sum(x,0))) # [2,2,2] 为0,按行求和
print(sess.run(tf.reduce_sum(x,0))) # [3,3] 为0,按列求和

'''
axis=0是按照行来求和,即把所有的行都加起来,也就是[1+1,1+1,1+1]-->[2,2,2]
axis=1是按照列来求和,即把所有的列都加起来,也就是[1+1+1][1+1+1]-->[3,3]
'''
使用tf.nn.softmax
array = tf.constant([4.0,1.0,5.0], dtype=tf.float32)
sess = tf.InteractiveSession()
print(sess.run(tf.nn.softmax(array))) #[0.26538792 0.01321289 0.7213992 ]

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐