2013-09-01 68 views
14

Đây là mã của tôi:NumPy AttributeError: đối tượng 'phao' không có thuộc tính 'exp'

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

Và dòng này mang lại cho tôi lỗi "AttributeError: đối tượng 'phao' không có thuộc tính 'exp'". X, t là Numpy ndarray.

+4

Có vẻ như bạn đã gán lại 'np' cho giá trị float. –

+4

Liệu 'X' hoặc' T' có xảy ra ngẫu nhiên khi được tạo bằng một kiểu dtype của 'đối tượng' thay vì' float64' không? – user2357112

+1

Không, được chỉ định lại không xảy ra. type (X) là ndarray numpy, type (X [0] [0]) là float –

Trả lời

11

Có lẽ có điều gì đó sai trái với các giá trị đầu vào cho X và/hoặc T. Các chức năng từ các câu hỏi làm việc ok:

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) 
print 
# Just to see if values are ok 
print [1./(1. + e ** el) for el in [-5, -10, -15, -16]] 
print 
print sigmoid(X, T) 

Kết quả:

[[15 16] 
[ 5 10]] 

[0.9933071490757153, 0.9999546021312976, 0.999999694097773, 0.9999998874648379] 

[[ 0.99999969 0.99999989] 
[ 0.99330715 0.9999546 ]] 

Có lẽ đó là dtype của đầu vào của bạn mảng. Thay đổi X:

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

Cung cấp:

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 
+3

Có, cảm ơn. Tôi không biết về dtype và chỉ sử dụng loại (X). Tôi đã làm X = X.astype (float) và nó được làm việc. –

+0

vì vậy hoạt động mảng như mean() không thể được sử dụng trong mảng với dype = object? Tôi tự hỏi tại sao? – gcamargo

+2

thông báo lỗi này rất gây hiểu lầm: vấn đề là 'dtype' thực ra là 'numpy.object', nhưng thông báo nói' numpy.float64' không có thuộc tính 'log10', hoặc bất kỳ phương pháp số học nào – deeenes

4

Bạn chuyển đổi loại np.dot(X, T) để float32 như thế này:

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

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

Hy vọng rằng nó cuối cùng sẽ làm việc!

Các vấn đề liên quan