Seite 1 von 1

class wird nicht erkannt

Verfasst: Sonntag 12. November 2017, 16:48
von znieh99
Hallo Forum,
ich bin ein blutiger Anfänger in Python und kämpfe mit meiner ersten Klasse. Wie folgender Code zeigt, rufe ich die Instanz einer Klasse auf und bekomme die Meldung das diese nicht existiert. Ich kann mir das nicht erklären?

---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-7-dbbb5c1c0e55> in <module>()
12
13 # erstelle instanz des neuralen netzwerks
---> 14 n = NeuralNetwork(input_nodes, hidden_nodes, output_nodes, learning_rate)
15 #n.query([1.0, 0.5, -1.5])

NameError: name 'NeuralNetwork' is not defined
----------------------------------------------------------------------------

Code: Alles auswählen

import numpy
# scipy.special für die sigmoid funktion
import scipy.special

# anzahl der input, hidden und output nodes
input_nodes = 3
hidden_nodes = 3
output_nodes = 3

# lernrate
learning_rate = 0.3

# erstelle instanz des neuralen netzwerks
n = NeuralNetwork(input_nodes, hidden_nodes, output_nodes, learning_rate)
#n.query([1.0, 0.5, -1.5])

Code: Alles auswählen

# neural network class definition
class NeuralNetwork:
    
    # initialisiere das neurale netzwerk
    def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate):
        # setzt anzahl der nodes in jeden input, hidden, output layer
        self.inodes = inputnodes
        self.hnodes = hiddennodes 
        self.onodes = outputnodes 
         
        # verbinde gewicht matrixen wih und who
        # gewichte in den arrays sind w_i_j, wenn die verbindung von node i (input)
        # zum Node j (hidden) im nächsten layer geht
        self.wih = numpy.random.normal(0.0, pow(self.hnodes, -0.5), (self.hnodes, self.inodes))
        self.who = numpy.random.normal(0.0, pow(self.onodes, -0.5), (self.onodes, self.hnodes))
        
        
        # setzt lernrate
        self.lr = learningrate
    
        # die aktivierungsfunktion ist die sigmoid funktion
        self.activation_function = lambda x: scipy.special.expit(x)
        pass

    
    # trainiere das neurale netzwerk
    def train():
        pass
    
    # frage das neurale netzwerk
    def query(self, inputs_list):
        # wandle input list nach 2d array
        inputs = numpy.array(inputs_list, ndmin=2).T
        
        # berechne input signal des hidden layer
        hidden_inputs = numpy.dot(self.wih, inputs)
        # berechne output signal des hidden layer
        hidden_outputs = self.activation_function(hidden_inputs)
        
        # berechne input signal des output layers
        final_inputs = numpy.dot(self.who, hidden_outputs)
        # berechne output signal des output layers
        final_outputs = self.activation_function(final_inputs)
        
        return final_outputs
                

Re: class wird nicht erkannt

Verfasst: Sonntag 12. November 2017, 16:54
von __deets__
Wenn du diesen Code in der Reihenfolge ausführst nicht weiter verwunderlich. Kannst du Begriffe verwenden, die erst später eingeführt werden?

Und dieser und andere sind Gründe, warum man keinen Code auf Modulebene packt. Sondern in eine Funktion. Und die am ENDE aufruft.

Re: class wird nicht erkannt

Verfasst: Sonntag 12. November 2017, 17:16
von znieh99
Danke für die rasche Antwort.
Der aufrufende Teil steht in einer cell nach der Klasse (habe beides probiert). Was meinst du mit Modulebene? Sind das die Cells? Wen ich das in einer Funktion aufrufe, wie rufe ich dann diese Funktion auf?
lg heinz

Re: class wird nicht erkannt

Verfasst: Sonntag 12. November 2017, 18:31
von znieh99
Habe nun den Aufruf in eine Funktion gepackt und rufe diese im Anschluß auf. Das funktioniert nun!

Danke und lg heinz

Code: Alles auswählen

import numpy
# scipy.special für die sigmoid funktion
import scipy.special

def test():
    # anzahl der input, hidden und output nodes
    input_nodes = 3
    hidden_nodes = 3
    output_nodes = 3
    
    # lernrate
    learning_rate = 0.3

    # erstelle instanz des neuralen netzwerks
    n = NeuralNetwork(input_nodes, hidden_nodes, output_nodes, learning_rate)
    n.query([1.0, 0.5, -1.5])
    pass

test()