2017-05-18 5 views
0

Ich führe das Testskript von der Keras website für Multilayer Perceptron (MLP) für Multi-Klasse-Softmax-Klassifizierung. Wenn ich im jupyter Notizbuch laufe, bekomme ich den Fehler "Name 'keras' ist nicht definiert". Dies mag ein einfaches Python-Syntax-Problem sein, auf das ich nicht scharf bin, aber dieser Code kommt direkt aus Keras, also erwarte ich, dass er so funktionieren sollte wie er ist. Ich habe andere neurale Netze mit Keras laufen lassen, also bin ich mir ziemlich sicher, dass ich alles installiert habe (keras mit Anaconda installiert). Kann jemand helfen? Ich habe sowohl den Code als auch den Fehler unten eingefügt. Vielen Dank!keras.utils.to_categorical() - Name keras nicht definiert

from keras.models import Sequential 
from keras.layers import Dense, Dropout, Activation 
from keras.optimizers import SGD 

# Generate dummy data 
import numpy as np 
x_train = np.random.random((1000, 20)) 
y_train = keras.utils.to_categorical(np.random.randint(10, size=(1000, 1)), num_classes=10) 
x_test = np.random.random((100, 20)) 
y_test = keras.utils.to_categorical(np.random.randint(10, size=(100, 1)), num_classes=10) 

model = Sequential() 
# Dense(64) is a fully-connected layer with 64 hidden units. 
# in the first layer, you must specify the expected input data shape: 
# here, 20-dimensional vectors. 
model.add(Dense(64, activation='relu', input_dim=20)) 
model.add(Dropout(0.5)) 
model.add(Dense(64, activation='relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(10, activation='softmax')) 

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) 
model.compile(loss='categorical_crossentropy', 
       optimizer=sgd, 
       metrics=['accuracy']) 

model.fit(x_train, y_train, 
      epochs=20, 
      batch_size=128) 
score = model.evaluate(x_test, y_test, batch_size=128) 

Dies ist die Fehlermeldung:

NameError         Traceback (most recent call last) 
<ipython-input-1-6d8174e3cf2a> in <module>() 
     6 import numpy as np 
     7 x_train = np.random.random((1000, 20)) 
----> 8 y_train = keras.utils.to_categorical(np.random.randint(10, size=(1000, 1)), num_classes=10) 
     9 x_test = np.random.random((100, 20)) 
    10 y_test = keras.utils.to_categorical(np.random.randint(10, size=(100, 1)), num_classes=10) 

NameError: name 'keras' is not defined 
+2

Vielleicht importieren Keras? Oder 'von keras.utils in_categorical importieren? – devforfu

+0

@devforfu Beide arbeiten! Bitte post als Antwort Ich kann Bild Ich werde nicht der einzige sein, der dieses Problem hat. – xjtc55

Antwort

4
from keras.models import Sequential 
from keras.layers import Dense, Dropout, Activation 
from keras.optimizers import SGD 

Von oben, nur in keras

  • keras.models
  • keras.layers
  • folgende Submodule importiert
  • keras.optimizers

Aber dieser Import nicht automatisch das Außenmodul wie keras oder andere Submodule keras.utils

So können Sie entweder ein

import keras 
import keras.utils 
from keras import utils as np_utils 

tun, aber from keras import utils as np_utils ist die am weitesten verbreitete .

Besonders import keras keine gute Praxis, weil der höheren Modul einge nicht notwendigerweise seine Submodule importieren (obwohl es in Keras arbeitet)

Zum Beispiel

import urllib nicht unbedingt urllib.request importiert werden, weil, wenn es Da es so viele große Submodule gibt, ist es ineffizient, alle Submodule jedes Mal zu importieren.