Thư viện python tốt nhất cho các mạng thần kinh


130

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?



5
Và bây giờ có một ứng cử viên mới - Scikit Neuralnetwork : Có ai có kinh nghiệm với điều này chưa? Làm thế nào để nó so sánh với Pylearn2 hoặc Theano?
Rafael_Espericueta 7/07/2015

1
@Emre: Khả năng mở rộng khác với hiệu suất cao. Nó thường có nghĩa là bạn có thể giải quyết các vấn đề lớn hơn bằng cách thêm nhiều tài nguyên cùng loại mà bạn đã có. Khả năng mở rộng vẫn chiến thắng, khi bạn có sẵn 100 máy, ngay cả khi phần mềm của bạn chậm hơn 20 lần trên mỗi máy. . . (mặc dù tôi muốn trả giá cho 5 máy và có lợi ích của cả GPU và quy mô nhiều máy).
Neil Slater

2
Vì vậy, sử dụng nhiều GPU ... không ai sử dụng CPU cho công việc nghiêm túc trong các mạng thần kinh. Nếu bạn có thể đạt được hiệu suất cấp Google từ một hoặc hai GPU tốt, bạn sẽ làm gì với một nghìn CPU?
Emre

4
Tôi đang bỏ phiếu để đóng câu hỏi này dưới dạng ngoài chủ đề vì trở thành một ví dụ về lý do tại sao các đề xuất và câu hỏi "tốt nhất" không hoạt động ở định dạng. Câu trả lời được chấp nhận trên thực tế là không chính xác sau 12 tháng (PyLearn2 trong thời gian đó đã chuyển từ "phát triển tích cực" sang "chấp nhận các bản vá")
Neil Slater

Câu trả lời:


116

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.


Lưu ý rằng nolearn là một trình bao bọc giúp các thư viện khác dễ sử dụng hơn và tương thích với sklearn. Bản thân nó không phải là một thư viện mạng thần kinh, nhưng dù sao cũng được khuyến nghị. Tại thời điểm viết bài, chủ yếu là cho Lasagne nhưng có một số mã Caffe và có thể cả mã khác.
Đánh dấu

Không chắc nó có giống như nhận xét của Marks về nolearn hay không, nhưng github.com/aigamedev/scikit-neuralnetwork cũng là một dạng bao bọc cho một loạt các công cụ này.
onaclov2000


Wow, điều này khá lỗi thời sau chưa đầy hai năm
Martin Thoma

1
Tại sao lại bỏ PyTorch?
Francesco Pegoraro

37

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.


22

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ợ.


19

TensorFlow (của Google, phát hành vào ngày 2015-11-09) có vẻ đầy hứa hẹn.

  • mã nguồn mở (Giấy phép Apache 2.0) ( GitHub )
  • Python (phụ trợ trong C ++)
  • CPU / GPU
  • Tự động phân biệt
  • Portable (thậm chí hoạt động trên thiết bị di động)

nhập mô tả hình ảnh ở đây

Tài chính


3
Aargh! Bạn đánh bại tôi với nó :) Thật vậy, TensorFlow là siêu tốt. Có thời gian biên dịch tốt hơn các khẩu súng lớn ngoài kia như Theano, Torch, v.v.
Dawny33

@ Dawny33 Bạn có ý nghĩa gì với "thời gian biên dịch"? Theano, Torch và hầu hết thời gian cũng là TensorFlow được sử dụng theo cách hiểu.
Martin Thoma

@moose Trong Theano ít nhất, một số mã được biên dịch bằng C ++ hoặc CUDA.
Franck Dernoncourt

@FranckDernoncourt Ok, nhưng thời gian đó có thực sự quan trọng không? Khi bạn có khóa đào tạo trong khoảng 20 phút, không phải chỉ mất vài giây để tạo mã CUDA? (Làm thế nào tôi có thể đo lường điều đó?)
Martin Thoma

2
@moose Trong Theano, việc tạo mã CUDA / C ++ mất khoảng 30 giây đến một phút cho một mô hình có kích thước hợp lý. Nó làm cho việc gỡ lỗi khá tẻ nhạt. Để đo thời gian tạo mã CUDA / C ++, bạn có thể đặt thời gian trước / sau khi chức năng Theano được biên dịch.
Franck Dernoncourt

8

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.


1
Lúc đầu, tôi cũng bị các tập tin YAML ném một chút, nhưng từ đó đã yêu thích sự tách biệt rõ ràng giữa cấu hình và mã. Bạn có thể chọn sử dụng Pylearn2 mà không cần tệp YAML, mặc dù tùy chọn này không được ghi chép tốt.
Madison ngày

Tuy nhiên, trong ngắn hạn, tôi sẽ không loại bỏ thư viện vì quyết định thiết kế đơn giản này.
Madison ngày

Như madison có thể, đã đề cập tất cả về việc tách cấu hình và mã. Sẽ ổn thôi nếu bạn đang chạy một mạng và biết tất cả các tham số, nhưng bạn thì không. bằng cách chia cấu hình và mã, bạn có thể chạy nhiều mạng - các nơ-ron ẩn khác nhau, v.v. và kiểm soát nguồn được chuyển thẳng (làm thế nào để bạn theo dõi cấu hình nào bạn đã thử nếu bạn giữ nó trong mã).
seanv507

8

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.


Vâng, hiện tại tôi sẽ đề xuất các khối ngày hôm nay qua pylearn2 nếu bạn chấp nhận dành một chút thời gian để hiểu Theano.
Madison ngày

Thư viện lớn được xây dựng bởi những người tuyệt vời.
Madison ngày

6

MXNet :

  • được viết bằng C ++ nhưng có API bằng Python (và một vài ngôn ngữ lập trình khác như R, Julia và Go)
  • Cân lên đến nhiều GPU và cài đặt phân tán với chế độ song song tự động.
  • Tự động phân biệt
  • Buổi biểu diễn của Decent:

nhập mô tả hình ảnh ở đây


5

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.


5

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.


Bạn có thể bình luận các liên kết dưới bình luận của tôi ở đây? Tôi sẽ chỉnh sửa và thêm nó vào câu trả lời của bạn
Dawny33

Bây giờ câu trả lời của tôi đã được nâng cấp, bây giờ tôi có đại diện cần thiết và có thể thêm các liên kết. Cảm ơn mặc dù!
srobinson

Bạn có chắc chắn scikit-learn là một gói DN?
SmallChess


4

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ư TorchTensorFlow 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.



2

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:

  • {1} Graham Neubig, Chris Dyer, Yoav Goldberg, Austin Matthews, Waleed Ammar, Antonios Anastasopoulos, Miguel Ballesteros, David Chiang, Daniel Clothiaux, Trevor Cohn, Kevin Duh, Manaal Faruqui, Cynthia Gan, Dan Garrette , Adhiguna Kuncoro, Gaurav Kumar, Chaitanya Malaviya, Paul Michel, Yusuke Oda, Matthew Richardson, Naomi Saphra, Swabha Swayamdipta, Bành Thành Âm. DyNet: Bộ công cụ mạng nơ-ron động. https://arxiv.org/abs/1701.03980

2

Tôi khuyên bạn nên sử dụng tenorflow đang được phát triển mạnh mẽ và hỗ trợ học tập sâu. Bạn có thể sử dụng mạng thần kinh cấp cao API Keras chạy trên đầu trang của tensorflow và rất đơn giản để sử dụng, chỉ cần thử một hướng dẫn và bạn sẽ thích nó.


2

Kim tự tháp

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.



1

NeuPy là một thư viện Python cho Mạng nơ ron nhân tạo. NeuPy hỗ trợ nhiều loại Mạng thần kinh khác nhau từ một tri giác đơn giản đến các mô hình học tập sâu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.