2015-04-17 34 views
5

Sto lavorando su compiti di classificazione di immagini e ho deciso di utilizzare il prototipo di reti neurali + Lasagne + Nolearn. Tutti gli esempi standard come la classificazione dei numeri MNIST funzionano bene, ma i problemi appaiono quando provo a lavorare con le mie immagini.Ingresso immagine rete Theano/Lasagne/Nolearn Rete neurale

Desidero utilizzare le immagini a 3 canali, non in scala di grigi. E c'è il codice in cui sto cercando di ottenere matrici dalle immagini:

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) 

Ecco il codice di NN e il suo montaggio:

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) 

ricevo eccezioni come questo:

Traceback (most recent call last): 
    File "las_mnist.py", line 39, in <module> 
    net1.fit(X[i], y[i]) 
    File "/usr/local/lib/python2.7/dist-packages/nolearn/lasagne.py", line 266, in fit 
    self.train_loop(X, y) 
    File "/usr/local/lib/python2.7/dist-packages/nolearn/lasagne.py", line 273, in train_loop 
    X, y, self.eval_size) 
    File "/usr/local/lib/python2.7/dist-packages/nolearn/lasagne.py", line 377, in train_test_split 
    kf = KFold(y.shape[0], round(1./eval_size)) 
IndexError: tuple index out of range 

Quindi, in quale formato si "alimentano" le reti con i dati delle immagini? Grazie per le risposte o eventuali suggerimenti!

risposta

5

Se stai facendo la classificazione è necessario modificare un paio di cose:

  1. Nel tuo codice hai impostato regression = True. Per fare la classificazione rimuovere questa linea.
  2. Assicurarsi che la forma di ingresso corrisponda la forma di X, se desidera introdurre 3 canali distinti
  3. Perché si sta facendo la classificazione è necessario l'output di utilizzare una non linearità softmax (al momento si ha l'identità, che non aiuterà con classificazione)

    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, 
    

    )

Problemi correlati