Numpy AttributeError: 'float' object has no attribute 'exp'

匿名 (未验证) 提交于 2019-12-03 02:29:01

问题:

Here is my code:

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

And this line gives me error "AttributeError: 'float' object has no attribute 'exp'". X, t are Numpy ndarray.

回答1:

Probably there's something wrong with the input values for X and/or T. The function from the question works 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) 

Result:

[[15 16]  [ 5 10]]  [0.9933071490757153, 0.9999546021312976, 0.999999694097773, 0.9999998874648379]  [[ 0.99999969  0.99999989]  [ 0.99330715  0.9999546 ]] 

Probably it's the dtype of your input arrays. Changing X to:

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

Gives:

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 


回答2:

You convert type np.dot(X, T) to float32 like this:

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

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

Hopefully it will finally work!



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!