2015-11-05 3 views
1

Я пытаюсь изучить машинное обучение в Python - и хотел бы запустить пакеты lasagne/nolearn. Я установил все пакеты - и я использую сценарий ниже (от http://semantive.com/deep-learning-examples/), который дает следующую ошибку. Пожалуйста, дайте мне знать, есть ли у кого-нибудь идея о том, как разрешить эту ошибку.lasagne - неожиданная ошибка ключевого слова

сценарий дает первоначальную ошибку в только одном из лазаньи модулей:

File "<ipython-input-89-2752ae2387c3>", line 11, in <module> 
    from nolearn.lasagne import visualize 

ImportError: cannot import name visualize 

впоследствии - есть ошибка вокруг площадки аргумента:

Traceback (most recent call last): 

    File "<ipython-input-90-7a7b6ee7a652>", line 66, in <module> 
    network = net.fit(x_train, y_train) 

    File "C:\Users\Anaconda\lib\site-packages\nolearn\lasagne.py", line 138, in fit 
    out = self._output_layer = self.initialize_layers() 

    File "C:\Users\Anaconda\lib\site-packages\nolearn\lasagne.py", line 369, in initialize_layers 
    layer = layer_factory(layer, **layer_params) 

    File "C:\Users\src\lasagne\lasagne\layers\conv.py", line 368, in __init__ 
    super(Conv2DLayer, self).__init__(incoming, **kwargs) 

TypeError: __init__() got an unexpected keyword argument 'pad' 

код

import cPickle as pickle 
    import os 
    import numpy as np 

    import matplotlib.pyplot as plt 
    import matplotlib.cm as cm 
    import lasagne 
    from lasagne import layers 
    from lasagne.updates import nesterov_momentum 
    from nolearn.lasagne import NeuralNet 
    from nolearn.lasagne import visualize 
    from sklearn.metrics import confusion_matrix, classification_report, accuracy_score 


    def load_data(path): 
     x_train = np.zeros((50000, 3, 32, 32), dtype='uint8') 
     y_train = np.zeros((50000,), dtype="uint8") 

     for i in range(1, 6): 
      data = unpickle(os.path.join(path, 'data_batch_' + str(i))) 
      images = data['data'].reshape(10000, 3, 32, 32) 
      labels = data['labels'] 
      x_train[(i - 1) * 10000:i * 10000, :, :, :] = images 
      y_train[(i - 1) * 10000:i * 10000] = labels 

     test_data = unpickle(os.path.join(path, 'test_batch')) 
     x_test = test_data['data'].reshape(10000, 3, 32, 32) 
     y_test = np.array(test_data['labels']) 

     return x_train, y_train, x_test, y_test 


    def unpickle(file): 
     f = open(file, 'rb') 
     dict = pickle.load(f) 
     f.close() 
     return dict 


    net = NeuralNet(
     layers=[('input', layers.InputLayer), 
       ('conv2d1', layers.Conv2DLayer), 
       ('maxpool1', layers.MaxPool2DLayer), 
       ('conv2d2', layers.Conv2DLayer), 
       ('maxpool2', layers.MaxPool2DLayer), 
       ('dense', layers.DenseLayer), 
       ('output', layers.DenseLayer), 
       ], 
     input_shape=(None, 3, 32, 32), 
     conv2d1_num_filters=20, 
     conv2d1_filter_size=(5, 5), 
     conv2d1_stride=(1, 1), 
     conv2d1_pad=(2, 2), 
     conv2d1_nonlinearity=lasagne.nonlinearities.rectify, 
     maxpool1_pool_size=(2, 2), 
     conv2d2_num_filters=20, 
     conv2d2_filter_size=(5, 5), 
     conv2d2_stride=(1, 1), 
     conv2d2_pad=(2, 2), 
     conv2d2_nonlinearity=lasagne.nonlinearities.rectify, 
     maxpool2_pool_size=(2, 2), 
     dense_num_units=1000, 
     dense_nonlinearity=lasagne.nonlinearities.rectify, 
     output_nonlinearity=lasagne.nonlinearities.softmax, 
     output_num_units=10, 
     update=nesterov_momentum, 
     update_momentum=0.9, 
     update_learning_rate=0.0001, 
     max_epochs=100, 
     verbose=True 
    ) 

    x_train, y_train, x_test, y_test = load_data(os.path.expanduser('~/Dropbox/Python/cifar-10-python.tar/cifar-10-python/cifar-10-batches-py/')) 

    network = net.fit(x_train, y_train) 
    predictions = network.predict(x_test) 

    print classification_report(y_test, predictions) 
    print accuracy_score(y_test, predictions) 
+0

Не могли бы вы рассказать нам, в какой строке в * вашем * коде это происходит? – Noxeus

+0

показать нам всю трассировку исключений. Ошибка касается аргумента ключевого слова «pad», но ваш скрипт не создает класс с этим аргументом. Возможно, у вас установлены несовместимые модули. Все, что вызывает conv.py, неверно. – tdelaney

+0

извинения - найти всю следу исключения, вставленную в обновленное сообщение – user1885116

ответ

0

Вы, кажется, используете несовместимую версию лазанья для своей версии nolearn.

Функция pad была добавлена ​​к Conv2DLayer класса в лазаньи в июле и августе 2015 года (см here и here). Ваша версия nolearn явно рассчитывает использовать эту версию или позже.

Есть две возможности:

  1. Вы (предположительно случайно) есть две версии лазанья на вашей системе, но ее более старый, который найден первый на Python. Если это так, удалите старую версию и/или убедитесь, что новая версия найдена (сначала) Python.

  2. У вас просто устаревшая версия лазанья. Решение: обновите его! Как вы это сделаете, это может зависеть от того, как вы его установили. В конечном итоге вам нужно будет получить последнюю версию от Github.