详解TensorFlow的 tf.nn.softmax 函数:softmax 激活函数

yizhihongxing

什么是softmax函数

在机器学习的过程中,很多训练算法都是基于概率论的基础理论进行的。softmax函数是一种用于归一化多维向量的函数,通常作为神经网络的输出层的激活函数,可以将任意实数值向量转换为概率分布。

softmax函数的数学定义

对于给定的一个包含m个元素的向量 $\boldsymbol{z}=(z_1,z_2,...,z_m)$,softmax函数通过以下公式定义:

$$
\text{softmax}(\boldsymbol{z})_j = \frac{e^{zj}}{\sum\limits{i=1}^{m} e^{z_i}}, \ \ 1 \leq j \leq m,
$$

其中,分母用于保证所有计算后的分量和为1,分子 $e^{z_j}$ 是将原始分量扩大的一个操作,其实就是将分量转化成概率分布。

TensorFlow中 tf.nn.softmax 函数使用方法

TensorFlow中的tf.nn.softmax函数可以直接对张量进行softmax操作,函数的完整定义如下:

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

函数的参数说明如下:

  • logits:需要进行softmax操作的张量,可以任意维度。
  • axis:指定进行softmax操作的维度,默认为None,此时将进行最后一维的softmax操作。

示例1:对一个简单的二维张量进行softmax操作

import tensorflow as tf

x = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
y = tf.nn.softmax(x, axis=1)
print(y)

输出结果:

tf.Tensor(
[[0.09003057 0.24472848 0.66524094]
 [0.09003057 0.24472848 0.66524094]], shape=(2, 3), dtype=float32)

示例2:对MNIST手写数字数据集的预测结果进行softmax操作

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

# 载入MNIST数据集
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)

# 构建模型
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x, W) + b)

# 运行模型
with tf.Session() as sess:
    sess.run(init)
    # 获取测试集的预测结果
    correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    print("Accuracy:", sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))

总结

softmax函数是机器学习中常用的归一化函数,可以将任何一个m维向量转换成概率分布。TensorFlow提供了tf.nn.softmax函数,可以在计算图中直接进行softmax操作。在构建深度学习模型时,经常需要使用softmax函数作为输出层的激活函数,将卷积神经网络的最后一层输出的向量转换成分类概率分布。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解TensorFlow的 tf.nn.softmax 函数:softmax 激活函数 - Python技术站

(0)
上一篇 2023年3月23日
下一篇 2023年3月23日

相关文章

合作推广
合作推广
分享本页
返回顶部