2015-04-17 8 views
5

Ich arbeite an Aufgaben zur Bildklassifizierung und entscheide mich, Lasagne + Nolearn für neuronale Netze zu verwenden. Alle Standard-Beispiele wie die MNIST-Klassifizierung funktionieren gut, aber es treten Probleme auf, wenn ich versuche, mit meinen eigenen Bildern zu arbeiten.Theano/Lasagne/Nolearn Neuronales Netzwerk Bildeingabe

Ich möchte 3-Kanal-Bilder, nicht Graustufen verwenden. Und es ist der Code, wo ich versuche Arrays von Bildern zu erhalten:

img = Image.open(item) 
img = ImageOps.fit(img, (256, 256), Image.ANTIALIAS) 
img = np.asarray(img, dtype = 'float64')/255. 
img = img.transpose(2,0,1).reshape(3, 256, 256) 
X.append(img) 

Hier ist der Code von NN und seiner Armatur:

X, y = simple_load("new") 

X = np.array(X) 
y = np.array(y) 


net1 = NeuralNet(
    layers=[ # three layers: one hidden layer 
     ('input', layers.InputLayer), 
     ('hidden', layers.DenseLayer), 
     ('output', layers.DenseLayer), 
     ], 
    # layer parameters: 
    input_shape=(None, 65536), # 96x96 input pixels per batch 
    hidden_num_units=100, # number of units in hidden layer 
    output_nonlinearity=None, # output layer uses identity function 
    output_num_units=len(y), # 30 target values 

    # optimization method: 
    update=nesterov_momentum, 
    update_learning_rate=0.01, 
    update_momentum=0.9, 

    regression=True, # flag to indicate we're dealing with regression problem 


     max_epochs=400, # we want to train this many epochs 
     verbose=1, 
     ) 

    net1.fit(X, y) 

I Ausnahmen wie diese empfangen:

Also, in welchem ​​Format "füttern" Sie Ihre Netzwerke mit Bilddaten? Danke für Antworten oder Tipps!

Antwort

5

Wenn Sie Klassifizierung tun müssen Sie ein paar Dinge ändern:

  1. In Ihrem Code haben Sie regression = True gesetzt. Um die Klassifizierung vorzunehmen, entfernen Sie diese Zeile.
  2. Stellen Sie sicher, dass Ihre Eingabe Form die Form X passt wollen, wenn die Eingabe 3 verschiedene Kanäle
  3. Weil Sie Klassifizierung Sie die Ausgabe benötigen dabei sind ein softmax Nicht-Linearität zu verwenden (im Moment Sie die Identität haben, die nicht helfen Sie mit Klassifizierung)

    X, y = simple_load("new") 
    
    X = np.array(X) 
    y = np.array(y) 
    
    net1 = NeuralNet(
        layers=[ # three layers: one hidden layer 
         ('input', layers.InputLayer), 
         ('hidden', layers.DenseLayer), 
         ('output', layers.DenseLayer), 
         ], 
        # layer parameters: 
        input_shape=(None, 3, 256, 256), # TODO: change this 
        hidden_num_units=100, # number of units in hidden layer 
        output_nonlinearity=lasagne.nonlinearities.softmax, # TODO: change this 
        output_num_units=len(y), # 30 target values 
    
        # optimization method: 
        update=nesterov_momentum, 
        update_learning_rate=0.01, 
        update_momentum=0.9, 
    
        max_epochs=400, # we want to train this many epochs 
        verbose=1, 
    

    )

Verwandte Themen