关于矩阵使用softMax激活

softMax适合多分类,本质就是一组概率和为1的一个列表

当我们初始化一个矩阵为(2,3,4)的三维Tensor张量,在不同的维度进行softMax运算的时候,不会改变原始数据的维度,其运算逻辑如下:

当dim=-1

就是第三个维度进行softmax

就是每一行的数拿去softMax,其概率和为1:

当dim=-2时,选取的是第二个维度

进行计算后,得到的如图

红色方框内的每个值都为1

当dim = -3 时表示最外层进行softMax:

颜色相同的放进去运算算出的结果和为1

### Softmax 函数与矩阵运算 Softmax 是一种常用于机器学习和神经网络中的激活函数,主要用于多分类问题的概率分布估计。它的核心作用是将输入向量转换成一个概率分布形式的输出向量。 #### 原理概述 对于给定的一个 n 维实数向量 \( z = [z_1, z_2, ..., z_n] \),Softmax 的定义为: \[ \text{softmax}(z_i) = \frac{\exp(z_i)}{\sum_{j=1}^{n}\exp(z_j)}, i = 1, 2, ..., n \] 其中,\( \exp(x) \) 表示自然指数函数 \( e^x \)[^1]。该公式的核心在于通过对每个元素取指数并归一化的方式,使得最终的结果是一个合法的概率分布(即所有分量之和等于 1)。 当扩展到矩阵时,假设有一个形状为 \( m \times n \) 的矩阵 \( Z \),则可以逐行或者逐列地应用上述公式来完成 Softmax 运算[^2]。 #### 实现方法 以下是 Python 中基于 NumPy 库实现 Softmax 函数的方法: ```python import numpy as np def softmax(Z): """ 计算矩阵Z的Softmax值 参数: Z -- 输入矩阵/数组 (shape: m x n) 返回: S -- 输出经过Softmax处理后的矩阵 (shape: m x n) """ exp_Z = np.exp(Z - np.max(Z, axis=-1, keepdims=True)) # 防止数值溢出 S = exp_Z / np.sum(exp_Z, axis=-1, keepdims=True) return S ``` 此代码片段实现了对任意大小矩阵Softmax 转换操作,并且通过减去每行的最大值防止了因指数爆炸而导致的数值不稳定问题[^3]。 #### TensorFlow 中的应用实例 如果是在 TensorFlow 框架下,则可以直接调用内置的 `tf.nn.softmax` 方法来进行类似的变换: ```python import tensorflow as tf # 创建随机张量 tensor_input = tf.random.uniform((2, 3), minval=-1., maxval=1.) y_pro = tf.nn.softmax(tensor_input) print("Input Tensor:\n", tensor_input.numpy()) print("\nAfter applying Softmax:") print(y_pro.numpy()) # 验证总和是否接近于1 print("\nThe sum of probabilities along the last dimension:", tf.reduce_sum(y_pro, axis=-1).numpy()) ``` 这段程序展示了如何利用 TensorFlow 对二维张量执行 Softmax 变换以及验证结果是否满足概率性质的要求——沿指定轴方向上的各元素相加之和应近似等于 1。 #### 注意事项 - **维度保持不变**: 不论是对哪条轴做 Softmax 处理,原数据结构的空间布局都不会发生变化;仅改变的是内部数值关系。 - **稳定性考量**: 在实际编程过程中需特别注意浮点精度带来的潜在风险,比如采用合适的缩放策略规避过大或过小数值引发的问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值