Softmax¶
稀疏 Softmax 激活层,输入 x
为 SparseCooTensor 或 SparseCsrTensor ,创建一个可调用对象以计算输入 x 的 Softmax 。
当输入 x 为 SparseCsrTensor 时,仅支持 axis=-1,是由于 Csr 稀疏存储格式,更适合按行读取数据。
如果将 x 从稀疏矩阵转换为稠密矩阵, \(i\) 代表行数, \(j\) 代表列数,且 axis=-1 时有如下公式:
\[softmax_ij = \frac{\exp(x_ij - max_j(x_ij))}{\sum_j(exp(x_ij - max_j(x_ij))}\]
参数¶
axis (int, 可选) - 指定对输入 SparseTensor 计算 softmax 的轴。对于 SparseCsrTensor,仅支持 axis=-1。默认值:-1。
name (str,可选) - 具体用法请参见 Name,一般无需设置,默认值为 None。
形状¶
input:任意形状的 SparseCooTensor 或 SparseCsrTensor,数据类型为 float32、float64。
output:和 input 具有相同形状和数据类型的 SparseTensor。
代码示例¶
>>> import paddle
>>> paddle.seed(2022)
>>> mask = paddle.rand((3, 4)) < 0.7
>>> x = paddle.rand((3, 4)) * mask.astype('float32')
>>> print(x)
Tensor(shape=[3, 4], dtype=float32, place=Place(cpu), stop_gradient=True,
[[0.88156885, 0.14463395, 0.17831714, 0.43818203],
[0.07617740, 0.75576496, 0. , 0.61921930],
[0. , 0. , 0.42460245, 0.03001321]])
>>> csr = x.to_sparse_csr()
>>> print(csr)
Tensor(shape=[3, 4], dtype=paddle.float32, place=Place(cpu), stop_gradient=True,
crows=[0, 4, 7, 9],
cols=[0, 1, 2, 3, 0, 1, 3, 2, 3],
values=[0.88156885, 0.14463395, 0.17831714, 0.43818203, 0.07617740,
0.75576496, 0.61921930, 0.42460245, 0.03001321])
>>> softmax = paddle.sparse.nn.Softmax()
>>> out = softmax(csr)
>>> print(out)
Tensor(shape=[3, 4], dtype=paddle.float32, place=Place(cpu), stop_gradient=True,
crows=[0, 4, 7, 9],
cols=[0, 1, 2, 3, 0, 1, 3, 2, 3],
values=[0.38234913, 0.18298410, 0.18925257, 0.24541418, 0.21302439,
0.42031071, 0.36666498, 0.59738696, 0.40261301])
>>> coo = x.to_sparse_coo(sparse_dim=2)
>>> print(coo)
Tensor(shape=[3, 4], dtype=paddle.float32, place=Place(cpu), stop_gradient=True,
indices=[[0, 0, 0, 0, 1, 1, 1, 2, 2],
[0, 1, 2, 3, 0, 1, 3, 2, 3]],
values=[0.88156885, 0.14463395, 0.17831714, 0.43818203, 0.07617740,
0.75576496, 0.61921930, 0.42460245, 0.03001321])
>>> out = softmax(coo)
>>> print(out)
Tensor(shape=[3, 4], dtype=paddle.float32, place=Place(cpu), stop_gradient=True,
indices=[[0, 0, 0, 0, 1, 1, 1, 2, 2],
[0, 1, 2, 3, 0, 1, 3, 2, 3]],
values=[0.38234913, 0.18298411, 0.18925257, 0.24541420, 0.21302438,
0.42031071, 0.36666498, 0.59738696, 0.40261301])