class wird nicht erkannt

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
znieh99
User
Beiträge: 3
Registriert: Sonntag 12. November 2017, 16:29

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
                
__deets__
User
Beiträge: 14541
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
znieh99
User
Beiträge: 3
Registriert: Sonntag 12. November 2017, 16:29

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
znieh99
User
Beiträge: 3
Registriert: Sonntag 12. November 2017, 16:29

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()
Antworten