2013-09-01 18 views
14

を持っていない私のコードです:numpyのはAttributeError:「フロート」オブジェクトは、ここで何の属性「EXP」

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

そして、この行は私にエラー「はAttributeError: 『をフロート』オブジェクトには属性 『EXP』を持っていない」を与えます。 X、tはNumpy ndarrayです。

+4

浮動小数点値に 'np'を再割り当てしたようです。 –

+4

'X'や' T'は 'float64'ではなく' object'のdtypeで誤って作成されていましたか? – user2357112

+1

いいえ、再割り当てされませんでした。 (X [0] [0])はfloat –

答えて

11

おそらく、および/またはT.質問から機能がうまく動作Xの入力値と間違って何かがあります:

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) 

結果:おそらく

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

ありがとうございます。私はdtypeについて知らず、タイプ(X)だけを使用しました。私はX = X.astype(float)を実行し、それが働いています。 –

+0

dype = objectの配列でmean()のような配列操作を使用できませんでしたか?なぜだろう? – gcamargo

+2

このエラーメッセージは非常に間違っています: 'dtype'は実際に' numpy.object'ですが、 'numpy.float64'には属性' log10'がありません。 – deeenes

4

あなたはこのようFLOAT32するタイプnp.dot(X, T)を変換:

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

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

うまくいけば、それが最終的に動作します!

関連する問題