Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Type Error comes up when I create a Class object

I'm working on a neural network. When I use a function from inside NNetwork inside NNetwork, it raises:

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)

My code is:

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]])

What needs to be changed?


1 Answers

One problem is that you forgot to add self as a first argument in UseNN.

Another problem here, is the parentheses around (NN, InputList), which make the function expect one argument, a tuple.

The right way to get what you want would be:

def UseNN(self, NN,InputList):

This will fix it. Also, you should avoid using CamelCase for functions and variables. It's usually used for classes, to differentiate them.

Hope it helps!

like image 156
aIKid Avatar answered Apr 13 '26 03:04

aIKid



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!