簡體   English   中英

我創建一個Class對象時出現類型錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM