2015-04-17 3 views
5

Я работаю над задачами классификации изображений и решил использовать Lasagne + Nolearn для прототипа нейронных сетей. Все стандартные примеры, такие как классификация номеров MNIST, работают хорошо, но проблемы возникают, когда я пытаюсь работать с собственными изображениями.Входной сигнал нейронной сети Theano/Lasagne/Nolearn

Я хочу использовать трехканальные изображения, а не оттенки серого. И есть код, где я пытаюсь получить массив из изображений:

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) 

Вот код NN и его фитинг:

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) 

Я получаю исключение, как это:

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 

Итак, в каком формате вы «кормите» свои сети данными об изображении? Спасибо за ответы или любые советы!

ответ

5

Если вы делаете классификацию вам нужно изменить пару вещей:

  1. В вашем коде вы установили regression = True. Чтобы сделать классификацию, удалите эту строку.
  2. Убедитесь, что вход форма совпадает с формой X, если хочет, чтобы ввести 3 различных каналы
  3. Потому что вы делаете классификацию, вам нужен выход использовать SoftMax нелинейности (на данный момент у вас есть личность, которая не поможет вы с классификацией)

    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, 
    

    )