Tôi đang sử dụng Mạng thần kinh để giải quyết các vấn đề về Máy học khác nhau. Tôi đang sử dụng Python và pybrain nhưng thư viện này gần như không còn nữa. Có những lựa chọn thay thế tốt khác trong Python?
Tôi đang sử dụng Mạng thần kinh để giải quyết các vấn đề về Máy học khác nhau. Tôi đang sử dụng Python và pybrain nhưng thư viện này gần như không còn nữa. Có những lựa chọn thay thế tốt khác trong Python?
Câu trả lời:
CẬP NHẬT: phong cảnh đã thay đổi khá nhiều kể từ khi tôi trả lời câu hỏi này vào ngày 14 tháng 7 và một số người chơi mới đã vào không gian. Cụ thể, tôi khuyên bạn nên kiểm tra:
Mỗi người đều có điểm mạnh và điểm yếu, vì vậy hãy thử và xem cái nào phù hợp nhất với trường hợp sử dụng của bạn. Mặc dù tôi đã khuyến nghị sử dụng PyLearn2 một năm trước, cộng đồng không còn hoạt động nữa nên tôi khuyên bạn nên tìm nơi khác. Câu trả lời ban đầu của tôi cho câu trả lời được bao gồm bên dưới nhưng phần lớn không liên quan ở điểm này.
PyLearn2 thường được coi là thư viện lựa chọn cho các mạng thần kinh và học sâu về trăn. Nó được thiết kế để thử nghiệm khoa học dễ dàng hơn là dễ sử dụng, do đó, quá trình học tập khá dốc, nhưng nếu bạn dành thời gian và làm theo các hướng dẫn tôi nghĩ bạn sẽ hài lòng với chức năng mà nó cung cấp. Tất cả mọi thứ từ Perceptionron tiêu chuẩn đến Máy Boltzmann bị hạn chế đến Lưới kết hợp đến Autoencoder đều được cung cấp. Có hỗ trợ GPU tuyệt vời và mọi thứ đều được xây dựng trên đỉnh Theano, do đó hiệu suất thường khá tốt. Nguồn cho PyLearn2 có sẵn trên github .
Xin lưu ý rằng PyLearn2 có vấn đề ngược lại với PyBrain vào lúc này - thay vì bị bỏ rơi, PyLearn2 đang được phát triển tích cực và có thể thay đổi thường xuyên.
Tensor Flow ( docs ) của Google là một khung công tác khác có tính năng phân biệt tự động. Tôi đã viết ra một số suy nghĩ nhanh về Google Tensor Flow trên blog của mình, cùng với ví dụ MNIST mà họ có trong hướng dẫn của họ.
Xem thêm: Hướng dẫn sử dụng Tensorflow XOR của tôi
Lasagne ( docs ) rất hay, vì nó sử dụng theano (→ bạn có thể sử dụng GPU) và làm cho nó đơn giản hơn để sử dụng. Tác giả của lasagne đã chiến thắng thử thách Kaggle Galaxy, theo như tôi biết. Nó là tốt đẹp với nolearn . Đây là một mạng ví dụ 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 là một thư viện C ++, nhưng có các ràng buộc Python. Bạn có thể thực hiện hầu hết mọi thứ bằng các tệp cấu hình (prototxt). Nó có rất nhiều tùy chọn và cũng có thể sử dụng GPU.
Pylearn dựa vào Theano và như đã đề cập trong câu trả lời khác để sử dụng thư viện khá phức tạp, cho đến khi bạn nắm được nó.
Trong khi đó tôi sẽ đề nghị sử dụng Theanets . Nó cũng được xây dựng trên đỉnh Theano, nhưng dễ làm việc hơn nhiều. Có thể đúng, nó không có tất cả các tính năng của Pylearn, nhưng đối với công việc cơ bản thì đã đủ.
Ngoài ra, nó là nguồn mở, vì vậy bạn có thể thêm các mạng tùy chỉnh nhanh chóng, nếu bạn dám. :)
EDIT: Tháng 12 năm 2015. Gần đây tôi đã bắt đầu sử dụng Keras . Nó thấp hơn một chút so với Theanets, nhưng mạnh hơn nhiều. Đối với các bài kiểm tra cơ bản, Theanets là phù hợp. Nhưng nếu bạn muốn thực hiện một số nghiên cứu trong lĩnh vực ANN Keras thì linh hoạt hơn nhiều. Ngoài ra, Keras có thể sử dụng Tensorflow như một phụ trợ.
TensorFlow (của Google, phát hành vào ngày 2015-11-09) có vẻ đầy hứa hẹn.
Tài chính
Pylearn2 dường như là thư viện được lựa chọn, tuy nhiên tôi thấy các tệp cấu hình YAML của họ không phù hợp.
Bản thân Python được thiết kế để trở thành một ngôn ngữ dễ tạo mẫu, tại sao bạn lại không sử dụng nó để xác định các thuộc tính mạng? Chúng tôi có các trình soạn thảo tuyệt vời với tính năng tự động hoàn thành sẽ giúp cuộc sống của bạn dễ dàng hơn nhiều và Python không giống như C ++, nơi bạn phải chờ các bản dựng dài hoàn thành trước khi bạn có thể chạy mã của mình.
Mặt khác, các tệp YAML bạn phải chỉnh sửa bằng trình chỉnh sửa văn bản tiêu chuẩn mà không cần hỗ trợ gì và điều này làm cho đường cong học tập thậm chí còn dốc hơn.
Tôi có thể đang thiếu bức tranh lớn nhưng tôi vẫn không hiểu họ đang nghĩ gì, tôi không nghĩ việc tạo mẫu trong mã sẽ chậm hơn nhiều. Vì lý do đó, tôi đang xem xét Theanets hoặc sử dụng Theano trực tiếp.
Tôi thích khối , cũng được xây dựng trên đỉnh Theano. Cách tiếp cận nhiều hơn PyLearn2, và nhiều tính năng phong phú hơn Lasagne. Viết gọn gàng, quá.
Cập nhật tháng 1 năm 2016:
Tại thời điểm viết bài, Keras có nhiều động lực nhất. Nó có tính mô-đun cao và có thể chạy trên cả Theano và Tensorflow, mang đến cho nó những cơ hội tuyệt vời.
MXNet :
Từ những gì tôi nghe được, Pylearn2 có thể là thư viện được lựa chọn cho hầu hết mọi người. Điều này làm tôi nhớ đến một bài đăng blog gần đây vài tháng trước, liệt kê tất cả các thư viện máy học khác nhau với một lời giải thích ngắn
https://www.cbinsights.com/blog/python-tools-machine-learning
Phần bạn có thể quan tâm ở đây sẽ là "Học sâu". Về Pylearn2, anh viết
PyLearn2
Có một thư viện khác được xây dựng trên đỉnh Theano, được gọi là PyLearn2, mang lại tính mô đun và cấu hình cho Theano nơi bạn có thể tạo mạng thần kinh của mình thông qua các tệp cấu hình khác nhau để dễ dàng thử nghiệm các tham số khác nhau. Có thể cho rằng, nó cung cấp nhiều mô đun hơn bằng cách tách các tham số và thuộc tính của mạng thần kinh với tệp cấu hình.
Tôi đã viết lên bài đăng này chi tiết một số yêu thích cá nhân của tôi:
Các thư viện máy học tốt nhất trong Python
Vì hơn 30 thư viện khác nhau được đề cập, tôi sẽ không đăng tất cả chúng ở đây, nhưng đây là những thư viện phổ biến nhất:
(Xin lỗi, không thể liên kết với repos Github vì đại diện của tôi vẫn còn <10 ...)
Chỉnh sửa: Đã thêm liên kết đến repos Github.
neon :
Chỉ để thêm một số tài nguyên. Gần đây có một bài báo nghiên cứu sự khác biệt giữa một số gói mạng thần kinh và mạng lưới thần kinh sâu.
Ở đây bạn có thể tìm thấy thông tin . Có vẻ như Torch và TensorFlow là những người chiến thắng.
Lưu ý: không phải tất cả chúng đều ở trăn. Tuy nhiên, tôi đã đăng nó để mở cuộc thảo luận.
Bộ công cụ nhận thức của Microsoft (trước đây gọi là CNTK) có API Python . Trong số những thứ khác, nó được cho là tốt cho đa GPU :
Ví dụ và hướng dẫn có thể được tìm thấy trên https://github.com/Microsoft/CNTK/tree/master/bindings/python
DyNet: Bộ công cụ mạng nơ-ron động. Từ 1}:
Chúng tôi mô tả DyNet, một bộ công cụ để thực hiện các mô hình mạng thần kinh dựa trên khai báo động của cấu trúc mạng. Trong chiến lược khai báo tĩnh được sử dụng trong các bộ công cụ như Theano, CNTK và TensorFlow, trước tiên người dùng định nghĩa một biểu đồ tính toán (biểu diễn biểu tượng của tính toán), sau đó các ví dụ được đưa vào một công cụ thực hiện tính toán này và tính toán các dẫn xuất của nó . Trong chiến lược khai báo động của DyNet, việc xây dựng biểu đồ tính toán hầu hết là minh bạch, được xây dựng hoàn toàn bằng cách thực thi mã thủ tục tính toán các đầu ra mạng và người dùng có thể tự do sử dụng các cấu trúc mạng khác nhau cho mỗi đầu vào. Do đó, khai báo động tạo điều kiện cho việc thực hiện các kiến trúc mạng phức tạp hơn, và DyNet được thiết kế đặc biệt để cho phép người dùng triển khai các mô hình của họ theo cách thành ngữ trong ngôn ngữ lập trình ưa thích của họ (C ++ hoặc Python). Một thách thức với khai báo động là bởi vì biểu đồ tính toán tượng trưng được xác định một lần nữa cho mỗi ví dụ đào tạo, việc xây dựng nó phải có chi phí thấp. Để đạt được điều này, DyNet có phần phụ trợ C ++ được tối ưu hóa và biểu diễn đồ thị nhẹ. Các thử nghiệm cho thấy tốc độ của DyNet nhanh hơn hoặc so sánh với các bộ công cụ khai báo tĩnh và nhanh hơn đáng kể so với Chainer, một bộ công cụ khai báo động khác. DyNet được phát hành mã nguồn mở theo giấy phép Apache 2.0 và có sẵn tại Một thách thức với khai báo động là bởi vì biểu đồ tính toán tượng trưng được xác định một lần nữa cho mỗi ví dụ đào tạo, việc xây dựng nó phải có chi phí thấp. Để đạt được điều này, DyNet có phần phụ trợ C ++ được tối ưu hóa và biểu diễn đồ thị nhẹ. Các thử nghiệm cho thấy tốc độ của DyNet nhanh hơn hoặc so sánh với các bộ công cụ khai báo tĩnh và nhanh hơn đáng kể so với Chainer, một bộ công cụ khai báo động khác. DyNet được phát hành mã nguồn mở theo giấy phép Apache 2.0 và có sẵn tại Một thách thức với khai báo động là bởi vì biểu đồ tính toán tượng trưng được xác định một lần nữa cho mỗi ví dụ đào tạo, việc xây dựng nó phải có chi phí thấp. Để đạt được điều này, DyNet có phần phụ trợ C ++ được tối ưu hóa và biểu diễn đồ thị nhẹ. Các thử nghiệm cho thấy tốc độ của DyNet nhanh hơn hoặc so sánh với các bộ công cụ khai báo tĩnh và nhanh hơn đáng kể so với Chainer, một bộ công cụ khai báo động khác. DyNet được phát hành mã nguồn mở theo giấy phép Apache 2.0 và có sẵn tạiURL http này
Nó trước đây được gọi là cnn (có ràng buộc trăn được đặt tên là pycnn).
Người giới thiệu:
Nó đang nhận được rất nhiều sự hỗ trợ do tính dễ sử dụng và sự tương đồng với Python cơ bản.
Nó chạy "từng dòng một" (thông qua các biểu đồ động), giống như Python bình thường và có thể dễ dàng gỡ lỗi - ngay cả khi sử dụng các câu lệnh in tiêu chuẩn. Nó cũng tích hợp rất tốt với NumPy và các dòng Python nổi tiếng khác, như Scikit Learn.
Bởi vì nó làm cho việc mô hình hóa trở nên dễ dàng, nó rất tốt cho việc tạo mẫu và khám phá những ý tưởng mới nói chung.
Nó hỗ trợ nhiều GPU và làm như vậy một cách thực sự dễ dàng.
Kiểm tra nhiều tính năng hơn ở đây .
Mặc dù nhiều lợi ích ở trên giúp PyTorch dễ sử dụng hơn nhiều so với các thư viện thường sử dụng khác, nhưng điều đáng nói là bản phát hành chính của Tensorflow sắp tới cũng sẽ sử dụng tính năng tạo đồ thị động (còn gọi là chế độ háo hức ). Điều này sẽ làm cho nó có thể so sánh với PyTorch trong cách sử dụng.
Nếu bạn quan tâm đến việc so sánh hiệu suất, Soumith Chintala duy trì một tập hợp các điểm chuẩn kết nối bao gồm một số khung python đã được đề cập ( TensorFlow , chainer , neon , Theano ):