我正在使用神经网络来解决不同的机器学习问题。我正在使用 Python 和pybrain,但这个库几乎已停产。Python中还有其他好的选择吗?
用于神经网络的最佳 python 库
更新:自从我在 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。
TensorFlow(由 Google 于 2015 年 11 月 9 日发布)看起来很有希望。
- 开源(Apache 2.0 许可)(GitHub)
- Python(C++ 后端)
- CPU/GPU
- 自动微分
- 便携(甚至可以在移动设备上使用)
供参考:
- 深度学习工具包的评估
- 对所有公共开源实现的 convnets 进行简单的基准测试。
- Soheil Bahrampour、Naveen Ramakrishnan、Lukas Schott、Mohak Shah。深度学习软件框架的比较研究。arXiv:1511.06435。
- 施少怀,王强,徐鹏飞,楚晓文。对最先进的深度学习软件工具进行基准测试。arXiv:1608.07249
- 2015 年是否每 22 天发布一次新的深度学习工具包?