我已经使用 conda 安装了 scipy。
当我尝试从 scipy 导入 softmax 时,出现错误:
from scipy.special import softmax
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-34-35eed14e1f88> in <module>
----> 1 from scipy.special import softmax
ImportError: cannot import name 'softmax' from 'scipy.special' (C:\Users\Alienware\Anaconda3\envs\tf2\lib\site-packages\scipy\special\__init__.py)
另一方面,我可以从 sklearn 导入 softmax,但当我尝试使用它时却遇到异常:
from sklearn.utils.extmath import softmax
X = np.array([[2, 3], [4,5]])
softmax(X)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-35-781ae2561cff> in <module>
1 X = np.array([[2, 3], [4,5]])
----> 2 softmax(X)
~\Anaconda3\envs\tf2\lib\site-packages\sklearn\utils\extmath.py in softmax(X, copy)
597 max_prob = np.max(X, axis=1).reshape((-1, 1))
598 X -= max_prob
--> 599 np.exp(X, X)
600 sum_prob = np.sum(X, axis=1).reshape((-1, 1))
601 X /= sum_prob
TypeError: ufunc 'exp' output (typecode 'd') could not be coerced to provided output parameter (typecode 'l') according to the casting rule ''same_kind''
最佳答案
您的问题的第一部分可能已由评论回答,并归结为您使用的 SciPy 版本不包含 softmax
。对于第二部分,错误消息表明无法将 double 转换为长整型数;您可以通过在输入中仅使用 double 来解决此问题:
In [13]: softmax(X.astype(np.double))
Out[13]:
array([[0.26894142, 0.73105858],
[0.26894142, 0.73105858]])
从 the documentation 中也可以明显看出 softmax
不适用于整数。是 by design :
Parameters
X : array-like of floats, shape (M, N) Argument to the logistic function
关于python - 从 scipy 导入 softmax 并在从 sklearn 导入后使用它时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59006937/