意外的关键字千层面

2024-05-13 19:36:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Python学习机器学习,并希望运行lasagne/nolearn包。我已经安装了所有的包-并使用下面的脚本per(来自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

随后-pad参数出现错误:

^{pr2}$

代码

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)

Tags: pathfromtestimportdataoslayersas
1条回答
网友
1楼 · 发布于 2024-05-13 19:36:57

你似乎在用一个不兼容的宽面条版本作为你的nolearn版本。在

pad功能于2015年7月和8月添加到千层面的Conv2DLayer类中(参见herehere)。您的nolearn版本显然希望使用该版本或更高版本。在

有两种可能性:

  1. 您的系统中有两个版本的宽面条(可能是偶然的),但它是Python首先发现的一个旧版本。如果这是真的,请删除旧版本和/或确保Python(首先)找到较新的版本。

  2. 你只是有一个过时的宽面条。解决方案:更新!如何做到这一点可能取决于你如何安装它首先。最终你需要从Github获得最新版本。

相关问题 更多 >