2015-11-05 38 views
1

我想學習Python中的機器學習 - 並且想運行lasagne/nolearn包。我已經安裝了所有軟件包 - 並且正在使用下面的腳本(來自http://semantive.com/deep-learning-examples/),它給出了以下錯誤。請讓我知道是否有人有關於如何解決此錯誤的想法。意大利千層麪 - 意外的關鍵字錯誤

腳本給出僅在烤寬麪條模塊中的一個初始錯誤:

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版本使用不兼容的千層麪版本。

功能已於2015年7月和8月在Lasagne的Conv2DLayer課程中添加(請參閱herehere)。您的nolearn版本顯然希望使用該版本或更高版本。

有兩種可能性:

  1. 你(大概是不小心)有你的系統,但它的一老一對千層麪的兩個版本是首個發現了Python。如果這是真的,請刪除舊版本和/或確保Python(第一版)找到較新版本。

  2. 您只需意大利千層麪過時的版本。解決方案:更新它!你如何做,可能取決於你如何安裝它。最終,你需要從Github獲得最新版本。

相關問題