Numpy AttributeError:'float'对象没有属性'exp'

Il'*_*nin 25 python numpy

这是我的代码:

def sigmoid(X, T): return (1.0 / (1.0 + np.exp(-1.0*np.dot(X, T))))
Run Code Online (Sandbox Code Playgroud)

这一行给了我错误"AttributeError:'float'对象没有属性'exp'".X,t是Numpy ndarray.

H.D*_*.D. 19

可能是X和/或T的输入值有问题.问题中的函数可以正常工作:

import numpy as np
from math import e

def sigmoid(X, T):
  return 1.0 / (1.0 + np.exp(-1.0 * np.dot(X, T)))

X = np.array([[1, 2, 3], [5, 0, 0]])
T = np.array([[1, 2], [1, 1], [4, 4]])

print(X.dot(T))
# Just to see if values are ok
print([1. / (1. + e ** el) for el in [-5, -10, -15, -16]])
print()
print(sigmoid(X, T))
Run Code Online (Sandbox Code Playgroud)

结果:

[[15 16]
 [ 5 10]]

[0.9933071490757153, 0.9999546021312976, 0.999999694097773, 0.9999998874648379]

[[ 0.99999969  0.99999989]
 [ 0.99330715  0.9999546 ]]
Run Code Online (Sandbox Code Playgroud)

可能它是你输入数组的dtype.将X更改为:

X = np.array([[1, 2, 3], [5, 0, 0]], dtype=object)
Run Code Online (Sandbox Code Playgroud)

得到:

Traceback (most recent call last):
  File "/[...]/stackoverflow_sigmoid.py", line 24, in <module>
    print sigmoid(X, T)
  File "/[...]/stackoverflow_sigmoid.py", line 14, in sigmoid
    return 1.0 / (1.0 + np.exp(-1.0 * np.dot(X, T)))
AttributeError: exp
Run Code Online (Sandbox Code Playgroud)

  • 对了谢谢.我不知道dtype,只使用了类型(X).我做X = X.astype(浮动),它是有效的. (4认同)
  • 这个错误信息是非常误导的:问题是`dtype`实际上是`numpy.object`,但是消息说'numpy.float64`没有属性`log10`,或者其他任何算术方法 (2认同)

小智 8

您将类型转换np.dot(X, T)为float32,如下所示:

z=np.array(np.dot(X, T),dtype=np.float32)

def sigmoid(X, T):
    return (1.0 / (1.0 + np.exp(-z)))
Run Code Online (Sandbox Code Playgroud)

希望它最终会奏效!