我正在研究神经网络。当我使用NNetwork
内NNetwork
内的函数时,它会引发:
Traceback (most recent call last):
File "C:\Python27\MyPython\MyNeuralNetwork.py", line 72, in <module>
NeuralNet.train([[3,5,2],[10,8,1],[35,3,6],[345,3,32]])
File "C:\Python27\MyPython\MyNeuralNetwork.py", line 67, in train
self.train331()
File "C:\Python27\MyPython\MyNeuralNetwork.py", line 44, in train331
x1 = self.UseNN(N1,x)
TypeError: UseNN() takes exactly 1 argument (3 given)
我的代码是:
import math, time
class Neuron():
def __init__(self,weight,thresh, alpha=.1):
self.thresh = thresh
self.weight = weight
self.alpha = alpha
def use(self,Input):
x = Input[0]*self.weight
y = Input[1]*self.weight;
z = Input[2]*self.weight;
return[(x+y+z)]
def adjustWeight(subtract = False):
if subtract == False: self.weight += alpha
else: self.weight -= alpha
class NNetwork():
def __init__(self,alpha = .1):
self.alpha = alpha
def UseNN((NN,InputList)):
x = NN.use(InputList)
if x[0] > x[1]: return x[0]
else: return 0
def train331(self):
#Creates the Neurons, assigning the weights, threshholds, and alpha
N1 = Neuron(3,7,.1)
N2 = Neuron(7,3,.1)
N3 = Neuron(3,9,.1)
#NextLevel
N4 = Neuron(-6,0,.1)
N5 = Neuron(10,4,.1)
N6 = Neuron(1,6,.1)
#OutputLevel
O1 = Neuron(0,0,.1)
am = 1
for amount in self.trainset:
#It runs each neuron through an algorithm,
#then collects each result into a list
x = self.trainset[am]
print "First layer: ",x
x1 = self.UseNN(N1,x)
x2 = self.UseNN(N2,x)
x3 = self.UseNN(N3,x)
y = [x1, x2, x3]
print "Second layer: ",y
y1 = self.UseNN(N4,y)
y2 = self.UseNN(N5,y)
y3 = self.UseNN(N6,y)
z = [y1,y2,y3]
z1 = self.UseNN(O1,z)
am += 1
print "Output layer: ",z1
def train(self,trainingSet,epochs=100):
self.epochs = epochs
self.trainset = trainingSet
self.train331()
NeuralNet = NNetwork()
NeuralNet.train([[3,5,2],[10,8,1],[35,3,6],[345,3,32]])
需要改变什么?
答案 0 :(得分:3)
一个问题是您忘记在self
中添加UseNN
作为第一个参数。
这里的另一个问题是围绕(NN, InputList)
的括号,它使函数期望一个参数,一个元组。
获得你想要的东西的正确方法是:
def UseNN(self, NN,InputList):
这将解决它。此外,您应该避免使用CamelCase
来表示函数和变量。它通常用于类,以区分它们。
希望它有所帮助!
答案 1 :(得分:1)
除非使用@classmethod
修饰类方法,否则第一个参数始终预先填充self
(实例本身)。因此,通过更改UseNN
的签名来自
def UseNN((NN,InputList)): # accepts self (NN), and 1 more argument
到
def UseNN(self, NN, InputList): # accepts self, and 2 more arguments
问题将会消失。