【问题标题】:Numpy AttributeError: 'float' object has no attribute 'exp'Numpy AttributeError:“float”对象没有属性“exp”
【发布时间】:2013-09-04 15:00:27
【问题描述】:

这是我的代码:

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

这行给了我错误

"AttributeError: 'float' 对象没有属性 'exp'"。 X, t 是 Numpy ndarray。

【问题讨论】:

  • 看起来您将np 重新分配给了一个浮点值。
  • XT 是否会意外地使用object 而不是float64 的dtype 创建?
  • 不,没有发生重新分配。 type(X) 是 numpy ndarray,type(X[0][0]) 是浮点数
  • 嗯。但是当我实现 X = X.astype(float) 时,一切正常。
  • 试试print X.dtype, T.dtype,看看你会得到什么。你很可能有错误的数据类型。

标签: python numpy


【解决方案1】:

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))

结果:

[[15 16]
 [ 5 10]]

[0.9933071490757153, 0.9999546021312976, 0.999999694097773, 0.9999998874648379]

[[ 0.99999969  0.99999989]
 [ 0.99330715  0.9999546 ]]

可能是输入数组的 dtype。将 X 更改为:

X = np.array([[1, 2, 3], [5, 0, 0]], dtype=object)

给予:

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

【讨论】:

  • 好的,谢谢。我不知道 dtype,只使用了 type(X)。我做了 X = X.astype(float) 并且成功了。
  • 所以像 mean() 这样的数组操作不能在 dype=object 的数组中使用?我想知道为什么?
  • 这个错误信息非常具有误导性:问题是dtype实际上是numpy.object,但是信息说numpy.float64没有属性log10,或者任何算术方法跨度>
【解决方案2】:

您将类型 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)))

希望它最终会奏效!

【讨论】:

    猜你喜欢
    • 2018-10-02
    • 2018-07-02
    • 1970-01-01
    • 2017-07-02
    • 2016-04-15
    • 2020-01-11
    • 1970-01-01
    • 2022-09-22
    • 2023-01-24
    相关资源
    最近更新 更多