【发布时间】:2017-08-22 10:12:24
【问题描述】:
我有以下问题:我想在 Python 中计算 softmax 函数并得到一个意想不到的结果。代码如下:
import numpy as np
def softmax(x):
"""Compute softmax values for each sets of scores in x."""
return np.exp(x) / np.sum(np.exp(x), axis=0)
它工作得很好,但我不知道为什么:它在矩阵上工作如下:如果我插入一个 2x2 矩阵 A,输出是另一个 2x2 矩阵。这是为什么?它不应该返回一个不同大小的数组,因为矩阵的每个元素,即 $x=A[0,0]$,都会产生 2 个输出值(即 $exp(x)/(exp(A[0,0]) +exp(A[1,0]))$ 和 $exp(x)/(exp(A[0,1])+exp(A[1,1]))$,因为还是 axis=0 命令?这将导致一个 8 元素的输出数组,但实际结果只有 4 个元素。另外,axis=0 命令究竟是如何工作的?如果我输入 A=np.array([2, 4]),那么np.sum(A, axis=0) 的逻辑结果应该是 array([2, 4]),因为列是求和的。但结果是 array([6])。命令 np.sum(A , axis=1) 奇怪地产生“'axis' entry is out of bounds”,尽管结果应该是数组([6]),因为行被总结了。也许我的两个问题是相关的。 任何帮助将不胜感激! 谢谢, 里昂
【问题讨论】:
-
寻求调试帮助的问题应包括minimal reproducible example。请包括输入 + 预期输出与实际输出。
-
如果您考虑
np.array([[2], [4]])并使用axis=1,您对np.sum的直觉会起作用。