Ввод изображения нейронной сети Theano / Lasagne / Nolearn

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

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

 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

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


person Rachnog    schedule 17.04.2015    source источник


Ответы (2)


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

  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,
    

    )

person angela    schedule 18.06.2015

Я также спросил об этом на форуме пользователей лазаньи, и Оливер Дюрр мне очень помог с образцом кода: https://groups.google.com/forum/#!topic/lasagne-users/8ZA7hr2wKfM

person Rachnog    schedule 19.04.2015