用于神经网络的最佳 python 库

数据挖掘 机器学习 Python 神经网络
2021-09-19 19:27:49

我正在使用神经网络来解决不同的机器学习问题。我正在使用 Python 和pybrain,但这个库几乎已停产。Python中还有其他好的选择吗?

4个回答

更新:自从我在 14 年 7 月回答这个问题以来,情况发生了很大变化,一些新玩家进入了这个领域。特别是,我建议您查看:

他们每个人都有自己的长处和短处,因此请尝试一下,看看哪个最适合您的用例。虽然一年前我会推荐使用 PyLearn2,但社区不再活跃,所以我建议寻找其他地方。我对答案的原始回复包括在下面,但在这一点上基本上是无关紧要的。


PyLearn2通常被认为是 Python 中神经网络和深度学习的首选库。它是为简单的科学实验而不是易用性而设计的,因此学习曲线相当陡峭,但是如果您花时间按照教程进行操作,我认为您会对它提供的功能感到满意。提供了从标准多层感知器到受限玻尔兹曼机到卷积网络到自动编码器的一切。有很好的 GPU 支持,一切都建立在 Theano 之上,所以性能通常相当好。PyLearn2 的源代码可在 github 上找到。

请注意,PyLearn2 目前与 PyBrain 存在相反的问题——PyLearn2 并没有被放弃,而是正在积极开发中,并且经常发生变化。

Google 的Tensor Flow ( docs ) 是另一个很好的框架,它具有自动微分功能。我已经在我的博客上写下了一些关于 Google Tensor Flow 的快速想法,以及他们在教程中提供的 MNIST 示例。

另请参阅:我的Tensorflow XOR 教程

Lasagne ( docs ) 非常好,因为它使用 theano (→ 你可以使用 GPU) 并使其更易于使用。据我所知,千层面的作者赢得了 Kaggle Galaxy 挑战。nolearn很好这是一个 MNIST 示例网络:

#!/usr/bin/env python

import lasagne
from lasagne import layers
from lasagne.updates import nesterov_momentum
from nolearn.lasagne import NeuralNet

import sys
import os
import gzip
import pickle
import numpy


PY2 = sys.version_info[0] == 2

if PY2:
    from urllib import urlretrieve

    def pickle_load(f, encoding):
        return pickle.load(f)
else:
    from urllib.request import urlretrieve

    def pickle_load(f, encoding):
        return pickle.load(f, encoding=encoding)

DATA_URL = 'http://deeplearning.net/data/mnist/mnist.pkl.gz'
DATA_FILENAME = 'mnist.pkl.gz'


def _load_data(url=DATA_URL, filename=DATA_FILENAME):
    """Load data from `url` and store the result in `filename`."""
    if not os.path.exists(filename):
        print("Downloading MNIST dataset")
        urlretrieve(url, filename)

    with gzip.open(filename, 'rb') as f:
        return pickle_load(f, encoding='latin-1')


def load_data():
    """Get data with labels, split into training, validation and test set."""
    data = _load_data()
    X_train, y_train = data[0]
    X_valid, y_valid = data[1]
    X_test, y_test = data[2]
    y_train = numpy.asarray(y_train, dtype=numpy.int32)
    y_valid = numpy.asarray(y_valid, dtype=numpy.int32)
    y_test = numpy.asarray(y_test, dtype=numpy.int32)

    return dict(
        X_train=X_train,
        y_train=y_train,
        X_valid=X_valid,
        y_valid=y_valid,
        X_test=X_test,
        y_test=y_test,
        num_examples_train=X_train.shape[0],
        num_examples_valid=X_valid.shape[0],
        num_examples_test=X_test.shape[0],
        input_dim=X_train.shape[1],
        output_dim=10,
    )


def nn_example(data):
    net1 = NeuralNet(
        layers=[('input', layers.InputLayer),
                ('hidden', layers.DenseLayer),
                ('output', layers.DenseLayer),
                ],
        # layer parameters:
        input_shape=(None, 28*28),
        hidden_num_units=100,  # number of units in 'hidden' layer
        output_nonlinearity=lasagne.nonlinearities.softmax,
        output_num_units=10,  # 10 target values for the digits 0, 1, 2, ..., 9

        # optimization method:
        update=nesterov_momentum,
        update_learning_rate=0.01,
        update_momentum=0.9,

        max_epochs=10,
        verbose=1,
        )

    # Train the network
    net1.fit(data['X_train'], data['y_train'])

    # Try the network on new data
    print("Feature vector (100-110): %s" % data['X_test'][0][100:110])
    print("Label: %s" % str(data['y_test'][0]))
    print("Predicted: %s" % str(net1.predict([data['X_test'][0]])))


def main():
    data = load_data()
    print("Got %i testing datasets." % len(data['X_train']))
    nn_example(data)

if __name__ == '__main__':
    main()

Caffe是一个 C++ 库,但具有 Python 绑定。你可以通过配置文件(prototxt)来做大部分事情。它有很多选择,也可以利用 GPU。

Pylearn 依赖于 Theano,正如另一个答案中提到的那样,使用该库非常复杂,直到你掌握它。

与此同时,我建议使用Theanets它也建立在 Theano 之上,但更容易使用。可能是真的,它没有 Pylearn 的所有功能,但对于基本工作来说已经足够了。

它也是开源的,因此您可以随时添加自定义网络,如果您敢的话。:)

编辑:2015 年 12 月。最近我开始使用Keras它比 Theanets 级别低一点,但功能强大得多。对于基本测试,Theanets 是合适的。但是如果你想在 ANN 领域做一些研究,Keras 就灵活多了。另外,Keras 可以使用Tensorflow作为后端。

TensorFlow(由 Google 于 2015 年 11 月 9 日发布)看起来很有希望。

  • 开源(Apache 2.0 许可)(GitHub
  • Python(C++ 后端)
  • CPU/GPU
  • 自动微分
  • 便携(甚至可以在移动设备上使用)

在此处输入图像描述

供参考: