#python #python-3.x #numpy #deep-learning #neural-network
#python #python-3.x #numpy #глубокое обучение #нейронная сеть
Вопрос:
Я пытаюсь запустить этот код для простой нейронной сети на python, однако выдается сообщение об ошибке «модуль ‘numpy’ не имеет атрибута ‘exe’ «. Я попытался выполнить поиск в Интернете, но не смог понять, в чем проблема, вот код:
import numpy as np
x=np.array([ [0,0,1],
[0,1,1],
[1,0,1],
[1,1,1] ])
y=np.array([ [1,0,0,1]]).T
class NeuralNetwork(object):
def __init__(self):
#parameters
self.inputsize= 3
self.outputsize= 1
self.hiddensize=4
self.learning_rate=0.005
#(3x4) weight matrix from input layer to hidden layer
self.w0= np.random.randn(self.inputsize, self.hiddensize)
#(4x1) weight matrix from hidden layer to output layer
self.w1=np.random.randn(self.hiddensize, self.outputsize)
def feedforward(self, x):
#forward propegation through the network
self.z = np.dot(x, self.w0) #dot product with input and first set of weights
self.z2= self.sigmoid(self.z) #activation function
self.z3= np.dot(self.z2, self.w1) #dot product with hidden layer and second set of weights
output= self.sigmoid(self.z3)
return output
def sigmoid(self, s, deriv=False):
if (deriv==True):
return s*(1-s)
return 1/(1 np.exe(-s))
def backward(self, x, y, output):
#backward propegation through the network
self.output_error= y - output #error in output
self.output_delta= self.output_error * self.sigmoid(output, deriv=True)
#hidden layer error amp; delta
self.z2_error=self.output_delta.dot(self.w1.T)
self.z2_delta=self.z2_error * self.sigmoid(self.z2, deriv=True)
#updating weights
self.w0 = self.learning_rate*(x.T.dot(self.z2_delta))
self.w1 = self.learning_rate*(self.z2.T.dot(self.output_delta))
def train(self, x, y):
output=self.feedforward(x)
self.backward(x,y, output)
пока ошибок нет, но когда я запускаю цикл
NN=NeuralNetwork()
for i in range(1000):
NN.train(x,y)
print("predicted output: " str(NN.feedforward(x)))
ошибка, вызванная
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-42-f9adb58b2d65> in <module>
1 NN=NeuralNetwork()
2 for i in range(1000):
----> 3 NN.train(x, y)
<ipython-input-39-83a1cb894a8f> in train(self, x, y)
39
40 def train(self, x, y):
---> 41 output=self.feedforward(x)
42 self.backward(x,y, output)
43
<ipython-input-39-83a1cb894a8f> in feedforward(self, x)
15 #forward propegation through the network
16 self.z = np.dot(x, self.w0) #dot product with input and first set of weights
---> 17 self.z2= self.sigmoid(self.z) #activation function
18 self.z3= np.dot(self.z2, self.w1) #dot product with hidden layer and second set of weights
19 output= self.sigmoid(self.z3)
<ipython-input-39-83a1cb894a8f> in sigmoid(self, s, deriv)
22 if (deriv==True):
23 return s*(1-s)
---> 24 return 1/(1 np.exe(-s))
25
26 def backward(self, x, y, output):
~anaconda3libsite-packagesnumpy__init__.py in __getattr__(attr)
217 return Tester
218 else:
--> 219 raise AttributeError("module {!r} has no attribute "
220 "{!r}".format(__name__, attr))
221
AttributeError: module 'numpy' has no attribute 'exe'
Это мой первый пост здесь, поэтому я прошу прощения, если есть какие-либо ошибки
Комментарии:
1. опечатка. это должно быть
np.exp
и неnp.exe
Ответ №1:
В вашей sigmoid
функции вы используете np.exe
там, где она должна быть np.exp
Numpy
не имеет какой-либо функции с именем exe
, поэтому вы получаете AttributeError
Ответ №2:
Попробуйте установить эту сигмоидальную функцию:
def sigmoid(self, s, deriv=False):
if (deriv==True):
return s*(1-s)
return 1/(1 np.exp(-s))