[英]Type Error comes up when I create a Class object
我正在研究神經網絡。 當我在NNetwork
內部使用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]])
需要改變什么?
一個問題是你忘了在UseNN
添加self
作為第一個參數。
這里的另一個問題是括號(NN, InputList)
,它使函數期望一個參數,一個元組。
得到你想要的正確方法是:
def UseNN(self, NN,InputList):
這將解決它。 此外,您應該避免將CamelCase
用於函數和變量。 它通常用於類,以區分它們。
希望能幫助到你!
除非使用@classmethod
修飾類方法, @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
問題將消失。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.