मैं विभिन्न मशीन सीखने की समस्याओं को हल करने के लिए तंत्रिका नेटवर्क का उपयोग कर रहा हूं। मैं पायथन और पाइब्रेन का उपयोग कर रहा हूं लेकिन यह लाइब्रेरी लगभग बंद है। क्या पायथन में अन्य अच्छे विकल्प हैं?
मैं विभिन्न मशीन सीखने की समस्याओं को हल करने के लिए तंत्रिका नेटवर्क का उपयोग कर रहा हूं। मैं पायथन और पाइब्रेन का उपयोग कर रहा हूं लेकिन यह लाइब्रेरी लगभग बंद है। क्या पायथन में अन्य अच्छे विकल्प हैं?
जवाबों:
अद्यतन: जब से मैंने जुलाई '14 में इस प्रश्न का उत्तर दिया है, तब से परिदृश्य काफी बदल गया है, और कुछ नए खिलाड़ियों ने अंतरिक्ष में प्रवेश किया है। विशेष रूप से, मैं इसकी जाँच करने की सलाह दूंगा:
उनमें से प्रत्येक की अपनी ताकत और कमजोरियां हैं, इसलिए उन सभी को दें और देखें कि आपके उपयोग के मामले में कौन सा सबसे अच्छा है। हालांकि मैंने एक साल पहले PyLearn2 का उपयोग करने की सिफारिश की थी, समुदाय अब सक्रिय नहीं है इसलिए मैं कहीं और देखने की सलाह दूंगा। उत्तर के लिए मेरी मूल प्रतिक्रिया नीचे शामिल है लेकिन इस बिंदु पर काफी हद तक अप्रासंगिक है।
PyLearn2 को आमतौर पर तंत्रिका नेटवर्क और अजगर में गहन सीखने के लिए पसंद की लाइब्रेरी माना जाता है। यह उपयोग में आसानी के बजाय आसान वैज्ञानिक प्रयोग के लिए डिज़ाइन किया गया है, इसलिए सीखने की अवस्था में तेजी है, लेकिन यदि आप अपना समय लेते हैं और ट्यूटोरियल का पालन करते हैं तो मुझे लगता है कि आप इसे प्रदान की गई कार्यक्षमता से खुश होंगे। मानक मल्टीलेयर पर्सेप्ट्रॉन से लेकर प्रतिबंधित बोल्ट्जमैन मशीन से लेकर कॉन्ट्रैक्शनल नेट तक सभी चीजें ऑटोएन्कोडर्स को प्रदान की जाती हैं। बहुत बढ़िया GPU समर्थन है और सब कुछ थीनो के ऊपर बनाया गया है, इसलिए प्रदर्शन आम तौर पर काफी अच्छा है। PyLearn2 के लिए स्रोत जीथब पर उपलब्ध है ।
ज्ञात रहे कि PyLearn2 में फिलहाल PyBrain की विपरीत समस्या है - छोड़ दिए जाने के बजाय, PyLearn2 सक्रिय विकास के अंतर्गत है और लगातार परिवर्तनों के अधीन है।
Google द्वारा Tensor Flow ( डॉक्स ) एक और अच्छा ढांचा है जिसमें स्वचालित भेदभाव है। मैंने अपने ब्लॉग पर Google Tensor Flow के बारे में कुछ त्वरित विचार नीचे लिखे हैं , साथ में MNIST उदाहरण जो उनके ट्यूटोरियल में है।
इसे भी देखें: My Tensorflow XOR tutorial
Lasagne ( डॉक्स ) बहुत अच्छा है, क्योंकि यह थीनो (→ आप GPU का उपयोग कर सकते हैं) का उपयोग करता है और इसका उपयोग करने के लिए सरल बनाता है। लासजेन के लेखक ने कागले गैलेक्सी चुनौती जीती, जहां तक मुझे पता है। यह 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()
कैफ एक C ++ लाइब्रेरी है, लेकिन पाइथन बाइंडिंग है। आप कॉन्फ़िगरेशन फ़ाइलों (प्रोटोटेक्स्ट) द्वारा अधिकांश सामान कर सकते हैं। इसमें बहुत सारे विकल्प हैं और यह GPU का उपयोग भी कर सकता है।
Pylearn Theano पर निर्भर करता है और जैसा कि लाइब्रेरी का उपयोग करने के लिए अन्य उत्तर में उल्लेख किया गया है, जब तक आप इसे पकड़ नहीं लेते, तब तक यह काफी जटिल है।
इस बीच मैं Theanets का उपयोग करने का सुझाव दूंगा । यह थीनो के शीर्ष पर भी बनाया गया था, लेकिन इसके साथ काम करना बहुत आसान है। यह सच हो सकता है, कि इसमें Pylearn की सभी विशेषताएं नहीं हैं, लेकिन मूल काम के लिए यह पर्याप्त है।
इसके अलावा यह खुला स्रोत है, इसलिए यदि आप हिम्मत करते हैं तो आप मक्खी पर कस्टम नेटवर्क जोड़ सकते हैं। :)
संपादित करें: दिसंबर 2015। हाल ही में मैंने केर का उपयोग शुरू किया है । यह थिएनेट की तुलना में थोड़ा निचला स्तर है, लेकिन बहुत अधिक शक्तिशाली है। बुनियादी परीक्षणों के लिए Theanets उपयुक्त है। लेकिन अगर आप एएनएन केरस के क्षेत्र में कुछ शोध करना चाहते हैं तो यह अधिक लचीला है। इसके अलावा केर एक बैकेंड के रूप में टेन्सरफ्लो का उपयोग कर सकते हैं ।
TensorFlow (Google द्वारा, 2015-11-09 को जारी किया गया) आशाजनक लग रहा है।
जानकारी के लिए:
Pylearn2 को पसंद की लाइब्रेरी लगती है, हालाँकि मुझे उनकी YAML कॉन्फ़िगरेशन फ़ाइलें ऑफ़-पुट लगती हैं।
पायथन स्वयं ही प्रोटोटाइप के लिए एक आसान भाषा होने के लिए डिज़ाइन किया गया था, आप इसका उपयोग स्वयं नेटवर्क गुणों को परिभाषित करने के लिए क्यों नहीं करेंगे ? हमारे पास स्वत: पूर्णता के साथ महान संपादक हैं जो आपके जीवन को बहुत आसान बना देंगे और पायथन सी ++ की तरह नहीं है जहां आपको अपना कोड चलाने से पहले लंबे समय तक निर्माण के लिए इंतजार करना होगा।
दूसरी ओर YAML फाइलें जो आपको बिना किसी सहायता के एक मानक पाठ संपादक का उपयोग करके संपादित करना है और यह सीखने की अवस्था को और भी कठोर बनाता है।
मुझे बड़ी तस्वीर याद आ रही है, लेकिन मुझे अभी भी समझ में नहीं आ रहा है कि वे क्या सोच रहे थे, मुझे नहीं लगता कि कोड में प्रोटोटाइप बहुत धीमा होगा। इस कारण से मैं थिनसेट पर विचार कर रहा हूं या सीधे थीनो का उपयोग कर रहा हूं।
मुझे ब्लॉक पसंद हैं , जो थीनो के ऊपर भी बनाया गया है। PyLearn2 की तुलना में अधिक स्वीकार्य है, और Lasagne से अधिक समृद्ध है। खूब लिखा है, भी।
अपडेट किया गया जनवरी 2016:
लेखन के समय, केरस के पास सबसे अधिक गति है। यह अत्यधिक मॉड्यूलर है और यह थीनो और टेन्सरफ्लो दोनों पर चल सकता है, जिससे इसे शानदार अवसर मिलेंगे।
मैंने जो सुना, उससे Pylearn2 वर्तमान में ज्यादातर लोगों की पसंद का पुस्तकालय हो सकता है। यह मुझे कुछ महीने पहले के एक हालिया ब्लॉग पोस्ट की याद दिलाता है जो एक संक्षिप्त विवरण के साथ सभी विभिन्न मशीन लर्निंग लाइब्रेरी को सूचीबद्ध करता है
https://www.cbinsights.com/blog/python-tools-machine-learning
जिस अनुभाग में आपकी रुचि हो सकती है वह "डीप लर्निंग" होगा। Pylearn2 के बारे में, वह लिखते हैं
PyLearn2
थीनो के शीर्ष पर एक और पुस्तकालय बनाया गया है, जिसे PyLearn2 कहा जाता है, जो थीनो में प्रतिरूपकता और विन्यासता लाता है, जहाँ आप विभिन्न कॉन्फ़िगरेशन फ़ाइलों के माध्यम से अपना तंत्रिका नेटवर्क बना सकते हैं, ताकि विभिन्न मापदंडों का प्रयोग करना आसान हो। यकीनन, यह कॉन्फ़िगरेशन फ़ाइल में तंत्रिका नेटवर्क के मापदंडों और गुणों को अलग करके अधिक मॉड्यूलरता प्रदान करता है।
मैंने अपने व्यक्तिगत पसंदीदा में से कुछ का विस्तार करते हुए इस पोस्ट को लिखा:
पायथन में सर्वश्रेष्ठ मशीन लर्निंग लाइब्रेरी
चूंकि 30 से अधिक विभिन्न पुस्तकालयों का उल्लेख किया गया है, इसलिए मैं उन सभी को यहां पोस्ट नहीं करूंगा, लेकिन ये सबसे लोकप्रिय हैं:
(क्षमा करें, Github repos से लिंक नहीं कर सकता क्योंकि मेरा प्रतिनिधि अभी भी <10 है ...)
संपादित करें: Github repos के लिंक जोड़े गए।
नियॉन :
बस कुछ और संसाधन जोड़ने के लिए। हाल ही में तंत्रिका नेटवर्क और गहरे तंत्रिका नेटवर्क के कई पैकेजों के बीच के अंतर का अध्ययन करने वाला एक पेपर था।
यहां आप जानकारी पा सकते हैं । ऐसा लगता है कि मशाल और टेंसोरफ्लो विजेता हैं।
नोट: उनमें से सभी अजगर में नहीं हैं। हालाँकि, मैंने इसे चर्चा खोलने के लिए पोस्ट किया था।
Microsoft अनुभूति टूलकिट (पहले जिसे CNTK के रूप में जाना जाता है) में पायथन एपीआई है । अन्य बातों के अलावा, यह बहु-GPU के लिए अच्छा माना जाता है :
उदाहरण और ट्यूटोरियल https://github.com/Microsoft/CNTK/tree/master/bindings/python पर देखे जा सकते हैं
डायनेट: डायनेमिक न्यूरल नेटवर्क टूलकिट। 1 से}:
हम नेटवर्क संरचना की गतिशील घोषणा के आधार पर तंत्रिका नेटवर्क मॉडल को लागू करने के लिए टूलकिट DyNet का वर्णन करते हैं। थीनो, CNTK, और TensorFlow जैसे टूलकिट में उपयोग की जाने वाली स्थैतिक घोषणा रणनीति में, उपयोगकर्ता पहले एक गणना ग्राफ (गणना का एक प्रतीकात्मक प्रतिनिधित्व) को परिभाषित करता है, और फिर उदाहरणों को एक इंजन में खिलाया जाता है जो इस गणना को निष्पादित करता है और इसके डेरिवेटिव की गणना करता है। । डायनेट की डायनेमिक डिक्लेरेशन स्ट्रैटेजी में, कम्प्यूटेशन ग्राफ का निर्माण ज्यादातर पारदर्शी होता है, जिसका अर्थ है कि नेटवर्क आउटपुट की गणना करने वाले प्रक्रियात्मक कोड को निष्पादित करके निर्माण किया जाता है, और उपयोगकर्ता प्रत्येक इनपुट के लिए विभिन्न नेटवर्क संरचनाओं का उपयोग करने के लिए स्वतंत्र है। गतिशील घोषणा इस प्रकार अधिक जटिल नेटवर्क आर्किटेक्चर के कार्यान्वयन की सुविधा प्रदान करती है, और DyNet को विशेष रूप से उपयोगकर्ताओं को अपने पसंदीदा प्रोग्रामिंग भाषा (C ++ या पायथन) में मुहावरेदार बनाने के लिए अपने मॉडल को लागू करने की अनुमति देने के लिए डिज़ाइन किया गया है। गतिशील घोषणा के साथ एक चुनौती यह है कि क्योंकि प्रतीकात्मक गणना ग्राफ हर प्रशिक्षण उदाहरण के लिए नए सिरे से परिभाषित किया गया है, इसके निर्माण में कम ओवरहेड होना चाहिए। इसे प्राप्त करने के लिए, DyNet में एक अनुकूलित C ++ बैकएंड और हल्का ग्राफ प्रतिनिधित्व है। प्रयोगों से पता चलता है कि DyNet की गति स्थिर घोषणा टूलकिट्स की तुलना में तेज या तुलनीय है, और Chainer, एक और गतिशील घोषणा टूलकिट की तुलना में काफी तेज है। डायनेट को अपाचे 2.0 लाइसेंस के तहत खुला स्रोत जारी किया गया है और यह उपलब्ध है गतिशील घोषणा के साथ एक चुनौती यह है कि क्योंकि प्रतीकात्मक गणना ग्राफ हर प्रशिक्षण उदाहरण के लिए नए सिरे से परिभाषित किया गया है, इसके निर्माण में कम ओवरहेड होना चाहिए। इसे प्राप्त करने के लिए, DyNet में एक अनुकूलित C ++ बैकएंड और हल्का ग्राफ प्रतिनिधित्व है। प्रयोगों से पता चलता है कि DyNet की गति स्थिर घोषणा टूलकिट्स की तुलना में तेज या तुलनीय है, और Chainer, एक और गतिशील घोषणा टूलकिट की तुलना में काफी तेज है। डायनेट को अपाचे 2.0 लाइसेंस के तहत खुला स्रोत जारी किया गया है और यह उपलब्ध है गतिशील घोषणा के साथ एक चुनौती यह है कि क्योंकि प्रतीकात्मक गणना ग्राफ हर प्रशिक्षण उदाहरण के लिए नए सिरे से परिभाषित किया गया है, इसके निर्माण में कम ओवरहेड होना चाहिए। इसे प्राप्त करने के लिए, DyNet में एक अनुकूलित C ++ बैकएंड और हल्का ग्राफ प्रतिनिधित्व है। प्रयोगों से पता चलता है कि DyNet की गति स्थिर घोषणा टूलकिट्स की तुलना में तेज या तुलनीय है, और Chainer, एक और गतिशील घोषणा टूलकिट की तुलना में काफी तेज है। डायनेट को अपाचे 2.0 लाइसेंस के तहत खुला स्रोत जारी किया गया है और यह उपलब्ध हैयह http URL
इसे पहले cnn के रूप में जाना जाता था (जिसका अजगर बंधन को pycnn नाम दिया गया था)।
संदर्भ:
मैं आपको टेंसरफ़्लो का उपयोग करने की सलाह देता हूं जो कि मजबूत विकास के अंतर्गत है और गहरी शिक्षा का समर्थन करता है। आप उच्च स्तर के तंत्रिका नेटवर्क एपीआई का उपयोग कर सकते हैं Keras कि tensorflow के शीर्ष पर चलता है और बहुत बस का उपयोग करना है, बस एक कोशिश ट्यूटोरियल और आप इसे प्यार करने के लिए जा रहे हैं।
मूल पायथन के साथ इसके उपयोग में आसानी और समानता के कारण इसे बहुत समर्थन मिल रहा है।
यह "लाइन-बाय-लाइन" (गतिशील ग्राफ़ के माध्यम से) चलाता है, सामान्य पायथन की तरह और आसानी से डिबग किया जा सकता है - यहां तक कि मानक प्रिंट स्टेटमेंट का उपयोग करके। यह NumPy और अन्य प्रसिद्ध पायथन लिनब्रियों के साथ बहुत अच्छी तरह से एकीकृत होता है, जैसे Scikit Learn।
क्योंकि यह मॉडलिंग को आसान बनाता है, इसलिए यह प्रोटोटाइप बनाने और नए विचारों को सामान्य रूप से एक्सप्लोर करने के लिए बहुत अच्छा है।
यह कई GPU का समर्थन करता है और वास्तव में आसान तरीके से ऐसा करता है।
की जाँच करें यहाँ और अधिक सुविधाओं ।
यद्यपि उपरोक्त कई लाभ PyTorch को अन्य आमतौर पर उपयोग किए जाने वाले पुस्तकालयों की तुलना में उपयोग करने के लिए बहुत अच्छे बनाते हैं, यह ध्यान देने योग्य है कि Tensorflow की आगामी प्रमुख रिलीज़ डिफ़ॉल्ट रूप से, गतिशील ग्राफ़ निर्माण (उर्फ उत्सुक मोड ) का भी उपयोग करेगी । यह इसे उपयोग में PyTorch के समान बना देगा।
आप प्रदर्शन की तुलना में रुचि रखते हैं, Soumith Chintala convnet मानक है कि पहले ही उल्लेख किया अजगर चौखटे (के कई कवर का एक सेट का कहना है TensorFlow , chainer , नीयन , थेनो ):