Numpy AttributeError: l'objet 'float' n'a pas d'attribut 'exp'

Voici mon code:

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

et cette ligne me donne une erreur " AttributeError:' float ' object n'a pas d'attribut 'exp'". X, t sont Numpy ndarray.

18
demandé sur Il'ya Zhenin 2013-09-01 14:08:11

2 réponses

Probablement il ya quelque chose de mal avec l'entrée les valeurs de X et/ou T. La fonction de la question des œuvres 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)

Résultat:

[[15 16]
 [ 5 10]]

[0.9933071490757153, 0.9999546021312976, 0.999999694097773, 0.9999998874648379]

[[ 0.99999969  0.99999989]
 [ 0.99330715  0.9999546 ]]

C'est probablement le dtype de vos tableaux d'entrées. Changer X en:

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

Donne:

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
14
répondu H.D. 2013-09-02 07:47:34

vous convertissez le type np.dot(X, T) pour float32 comme ceci:

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

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

espérons que ça va enfin marcher!

5
répondu mehtab rai 2017-06-07 13:49:30