আমি বিভিন্ন মেশিন লার্নিংয়ের সমস্যাগুলি সমাধান করতে নিউরাল নেটওয়ার্কগুলি ব্যবহার করছি। আমি পাইথন এবং পাইব্রাইন ব্যবহার করছি তবে এই গ্রন্থাগারটি প্রায় বন্ধ রয়েছে। পাইথনে আরও ভাল বিকল্প আছে?
আমি বিভিন্ন মেশিন লার্নিংয়ের সমস্যাগুলি সমাধান করতে নিউরাল নেটওয়ার্কগুলি ব্যবহার করছি। আমি পাইথন এবং পাইব্রাইন ব্যবহার করছি তবে এই গ্রন্থাগারটি প্রায় বন্ধ রয়েছে। পাইথনে আরও ভাল বিকল্প আছে?
উত্তর:
আপডেট: ল্যান্ডস্কেপটি বেশ খানিকটা পরিবর্তিত হয়েছে যেহেতু আমি জুলাই'১৪ এ এই প্রশ্নের উত্তর দিয়েছি এবং কিছু নতুন খেলোয়াড় স্থানটিতে প্রবেশ করেছে। বিশেষত, আমি চেক আউট করার সুপারিশ করব:
তাদের প্রত্যেকের তাদের শক্তি এবং দুর্বলতা রয়েছে, তাই তাদের সমস্ত কিছু দেখুন এবং দেখুন যে আপনার ব্যবহারের ক্ষেত্রে সবচেয়ে উপযুক্ত। যদিও আমি এক বছর আগে পাইলিয়ার 2 ব্যবহার করার পরামর্শ দিয়েছি, সম্প্রদায়টি আর সক্রিয় নেই তাই আমি অন্য কোথাও দেখার পরামর্শ দিই। উত্তরের আমার মূল প্রতিক্রিয়াটি নীচে অন্তর্ভুক্ত করা হয়েছে তবে এই মুহুর্তে এটি মূলত অপ্রাসঙ্গিক।
পাইলার্ন ২ সাধারণত নিউরাল নেটওয়ার্ক এবং পাইথনের গভীর শিক্ষার পছন্দের গ্রন্থাগার হিসাবে বিবেচিত হয়। এটি ব্যবহারের সহজতার চেয়ে সহজ বৈজ্ঞানিক পরীক্ষার জন্য তৈরি করা হয়েছে, তাই শিখনের বক্ররেখা বরং খাড়া, তবে আপনি যদি আপনার সময় নেন এবং টিউটোরিয়ালগুলি অনুসরণ করেন তবে আমি মনে করি যে এটির কার্যকারিতাটি দিয়ে আপনি খুশি হবেন। স্ট্যান্ডার্ড মাল্টিলেয়ার পারসেপ্ট্রনস থেকে সীমাবদ্ধ বল্টজম্যান মেশিনগুলি থেকে কনভোলিউশনাল নেট থেকে অটোরকোডার্স পর্যন্ত সমস্ত কিছুই সরবরাহ করা হয়েছে। দুর্দান্ত জিপিইউ সমর্থন রয়েছে এবং সবকিছু থিয়ানো শীর্ষে নির্মিত হয়েছে, তাই পারফরম্যান্স সাধারণত বেশ ভাল। PyLearn2 জন্য উৎস পাওয়া যায় GitHub উপর ।
সচেতন থাকুন যে মুহুর্তে পাইলাইন 2 এর পাইব্রেনের বিপরীত সমস্যা রয়েছে - পরিত্যক্ত হওয়ার পরিবর্তে পাইলিয়ার 2 সক্রিয় বিকাশের অধীনে রয়েছে এবং ঘন ঘন পরিবর্তনের সাপেক্ষে।
গুগলের টেনসর ফ্লো ( ডক্স ) হ'ল স্বয়ংক্রিয় পার্থক্য another আমি আমার ব্লগে গুগল টেনসর ফ্লো সম্পর্কে কিছু দ্রুত চিন্তা লিখেছি , তাদের টিউটোরিয়ালে তারা রয়েছে এমন MNIST উদাহরণের সাথে with
আরও দেখুন: আমার টেনসরফ্লো এক্সওআর টিউটোরিয়াল
লাসাগন ( ডক্স ) খুব সুন্দর, কারণ এটি থানোও ব্যবহার করে (→ আপনি জিপিইউ ব্যবহার করতে পারেন) এবং এটি ব্যবহার সহজ করে তোলে। লাসাগনের লেখক ক্যাগল গ্যালাক্সি চ্যালেঞ্জ জিতলেন, যতদূর আমি জানি। নোলার্নের সাথে এটি দুর্দান্ত । এখানে একটি এমএনআইস্ট উদাহরণ নেটওয়ার্ক রয়েছে:
#!/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()
ক্যাফে একটি সি ++ গ্রন্থাগার, তবে পাইথন বাইন্ডিং রয়েছে। আপনি কনফিগারেশন ফাইল (প্রোটোটেক্সট) দ্বারা বেশিরভাগ স্টাফ করতে পারেন। এতে প্রচুর অপশন রয়েছে এবং এটি জিপিইউ ব্যবহার করতে পারে।
পাইলার্ন থিওনের উপর নির্ভর করে এবং লাইব্রেরিটি ব্যবহারের অন্যান্য উত্তরে যেমন উল্লেখ করা হয়েছে ততক্ষণ পর্যন্ত আপনি এটি ধরে না রাখেন বেশ জটিল is
এর মধ্যে আমি থ্যানেটস ব্যবহার করার পরামর্শ দেব । এটি থিয়ানো শীর্ষেও নির্মিত, তবে এটির সাথে কাজ করা আরও সহজ। এটি সত্য হতে পারে, এটিতে পাইনার্নের সমস্ত বৈশিষ্ট্য নেই তবে প্রাথমিক কাজের জন্য এটি যথেষ্ট।
এছাড়াও এটি ওপেন সোর্স, যাতে সাহস করে আপনি ফ্লাইতে কাস্টম নেটওয়ার্ক যুক্ত করতে পারেন। :)
সম্পাদনা: ডিসেম্বর 2015. সম্প্রতি আমি কেরাস ব্যবহার শুরু করেছি । এটি থিয়েটসের চেয়ে কিছুটা নিচু স্তর, তবে আরও শক্তিশালী। প্রাথমিক পরীক্ষার জন্য থিয়েটস উপযুক্ত। তবে আপনি যদি এএনএন কেরাসের ক্ষেত্রে কিছু গবেষণা করতে চান তবে অনেক বেশি নমনীয়। প্লাস কেরারা ব্যাকএন্ড হিসাবে টেনসরফ্লো ব্যবহার করতে পারে ।
টেনসরফ্লো (গুগল দ্বারা প্রকাশিত , ২০১১-১১-০৯ এ প্রকাশিত ) আশাব্যঞ্জক দেখাচ্ছে।
অবগতির জন্য:
পাইলেয়ারন 2 টি পছন্দসই লাইব্রেরি বলে মনে হচ্ছে, তবে আমি তাদের ওয়াইএএমএল কনফিগারেশন ফাইলগুলি অফ-পপিংয়ের মধ্যে খুঁজে পাই।
পাইথন নিজেই প্রোটোটাইপিংয়ের জন্য একটি সহজ ভাষা হিসাবে ডিজাইন করা হয়েছিল, আপনি নিজের নেটওয়ার্ক বৈশিষ্ট্যগুলি সংজ্ঞায়িত করতে এটি ব্যবহার করবেন না কেন ? আমাদের স্বতঃপূরণ সহ দুর্দান্ত সম্পাদক রয়েছে যা আপনার জীবনকে আরও সহজ করে তুলবে এবং পাইথন সি ++ এর মতো নয় যেখানে আপনার কোড চালানোর আগে আপনাকে দীর্ঘ বিল্ডগুলি শেষ করতে অপেক্ষা করতে হবে।
অন্যদিকে YAML ফাইলগুলি আপনাকে কোনও প্রকার সহায়তা ছাড়াই একটি স্ট্যান্ডার্ড পাঠ্য সম্পাদক ব্যবহার করে সম্পাদনা করতে হবে এবং এটি শেখার বক্ররেখাকে আরও খাড়া করে তোলে।
আমি বড় ছবিটি অনুপস্থিত হতে পারি তবে তারা এখনও কী চিন্তা করছিল তা আমি এখনও বুঝতে পারি না, আমি মনে করি না কোডে প্রোটোটাইপিং আরও ধীর হবে। যে কারণে আমি থিয়েটস বিবেচনা করছি বা সরাসরি থিয়ানো ব্যবহার করছি।
আমি ব্লকগুলি পছন্দ করি যা থিয়ানো শীর্ষেও নির্মিত। পাইLearn2 এর চেয়ে আরও বেশি অ্যাক্সেসযোগ্য উপায় এবং লাসাগনের চেয়ে সমৃদ্ধ বৈশিষ্ট্য। খুব সুন্দরভাবে লেখা।
জানুয়ারী ২০১ 2016 আপডেট হয়েছে:
লেখার সময় কেরাসের মধ্যে সবচেয়ে গতি ছিল। এটি অত্যন্ত মডুলার এবং এটি থানো এবং টেনসরফ্লো উভয় ক্ষেত্রেই চলতে পারে, এটি দুর্দান্ত সুযোগ দেয়।
আমি যা শুনেছি তা থেকে পাইলার্ন 2 সম্ভবত বেশিরভাগ মানুষের পছন্দের লাইব্রেরি হতে পারে। এটি আমাকে কয়েক মাস আগে সাম্প্রতিক একটি ব্লগ পোস্টের স্মরণ করিয়ে দেয় যা সংক্ষিপ্ত ব্যাখ্যার সাথে বিভিন্ন মেশিন লার্নিংয়ের লাইব্রেরি তালিকাবদ্ধ করে
https://www.cbinsights.com/blog/python-tools-machine-learning
আপনি যে বিভাগটি এখানে আগ্রহী তা হতে পারে "ডিপ লার্নিং"। পাইয়ার্ন 2 সম্পর্কে তিনি লিখেছেন
PyLearn2
থিয়ানো-র উপরে আরও একটি লাইব্রেরি নির্মিত হয়েছে, যার নাম পাইলিয়ার ২, যা থিয়ানোতে মডিউলারিটি এবং কনফিগারেশনে আসে যেখানে আপনি বিভিন্ন কনফিগারেশন ফাইলের মাধ্যমে আপনার নিউরাল নেটওয়ার্ক তৈরি করতে পারেন যাতে বিভিন্ন পরামিতি পরীক্ষা করা আরও সহজ হয়ে যায়। যুক্তিযুক্তভাবে, এটি কনফিগারেশন ফাইলে নিউরাল নেটওয়ার্কের পরামিতি এবং বৈশিষ্ট্যগুলি পৃথক করে আরও পরিমিততা সরবরাহ করে।
আমি আমার ব্যক্তিগত কিছু পছন্দের বিবরণে এই পোস্টটি লিখেছিলাম:
যেহেতু 30 টিরও বেশি বিভিন্ন গ্রন্থাগার উল্লেখ করা হয়েছে, আমি সেগুলি এখানে পোস্ট করব না তবে এগুলি সর্বাধিক জনপ্রিয়:
(দুঃখিত, আমার প্রতিনিধি <10 ... গিথুব রেপোসের সাথে লিঙ্ক করতে পারে না)
সম্পাদনা করুন: গিথুব ভান্ডারে লিঙ্ক যুক্ত হয়েছে।
নিয়ন :
মাইক্রোসফ্ট কগনিশন টুলকিট (পূর্বে সিএনটিকে নামে পরিচিত) এর একটি পাইথন এপিআই রয়েছে । অন্যান্য জিনিসের মধ্যে এটি মাল্টি-জিপিইউয়ের পক্ষে ভাল বলে মনে করা হচ্ছে :
উদাহরণ এবং টিউটোরিয়ালগুলি https://github.com/Mic Microsoft/CNTK/tree/master/bindings/python এ পাওয়া যাবে
ডাইনেট: ডায়নামিক নিউরাল নেটওয়ার্ক টুলকিট। {1} থেকে:
আমরা নেটওয়ার্ক কাঠামোর গতিশীল ঘোষণার ভিত্তিতে নিউরাল নেটওয়ার্ক মডেলগুলি বাস্তবায়নের জন্য একটি সরঞ্জামকিট ডাইনেট বর্ণনা করি। থানো, সিএনটিকে, এবং টেনসরফ্লো এর মতো টুলকিটগুলিতে স্ট্যাটিক ডিক্লারেশন স্ট্র্যাটেজিতে ব্যবহৃত হয়, ব্যবহারকারী প্রথমে একটি গণনা গ্রাফ (গণনার প্রতীকী উপস্থাপনা) সংজ্ঞায়িত করেন এবং তারপরে উদাহরণগুলি এমন একটি ইঞ্জিনে খাওয়ানো হয় যা এই গণনা সম্পাদন করে এবং এর ডেরিভেটিভগুলি গণনা করে । ডাইনেটের গতিশীল ঘোষণা কৌশলটিতে, গণনা গ্রাফ নির্মাণ বেশিরভাগ স্বচ্ছ, নেটওয়ার্ক আউটপুটগুলি গণনাকারী প্রসেসরিজ কোড সম্পাদন করে স্পষ্টভাবে নির্মিত হয় এবং ব্যবহারকারী প্রতিটি ইনপুট জন্য পৃথক নেটওয়ার্ক কাঠামো ব্যবহার করতে পারেন। গতিশীল ঘোষণা এইভাবে আরও জটিল নেটওয়ার্ক আর্কিটেকচারের বাস্তবায়নের সুবিধার্থে, এবং ডাইনেট বিশেষত তাদের পছন্দসই প্রোগ্রামিং ভাষার (সি ++ বা পাইথন) ভাষাগুলি এমনভাবে উপস্থাপন করতে যাতে তাদের মডেলগুলি প্রয়োগ করতে দেয় to গতিশীল ঘোষণার সাথে একটি চ্যালেঞ্জ হ'ল প্রতিটি প্রশিক্ষণের উদাহরণের জন্য প্রতীকী গণনা গ্রাফটি নতুনভাবে সংজ্ঞায়িত করা হয়েছে, সুতরাং এর নির্মাণে অবশ্যই কম ওভারহেড থাকা উচিত। এটি অর্জনের জন্য, ডাইনেটের একটি অনুকূলিত সি ++ ব্যাকএন্ড এবং লাইটওয়েট গ্রাফের উপস্থাপনা রয়েছে। পরীক্ষাগুলি দেখায় যে ডাইনেটের গতি স্ট্যাটিক ডিক্লারেশন টুলকিটগুলির তুলনায় দ্রুত এবং তুলনীয় এবং অন্য গতিশীল ডিক্লারেশন টুলকিট চাইনারের চেয়ে উল্লেখযোগ্যভাবে দ্রুত faster ডাইনেট অ্যাপাচি ২.০ লাইসেন্সের অধীনে উন্মুক্ত উত্স প্রকাশিত এবং এতে উপলব্ধ গতিশীল ঘোষণার সাথে একটি চ্যালেঞ্জ হ'ল প্রতিটি প্রশিক্ষণের উদাহরণের জন্য প্রতীকী গণনা গ্রাফটি নতুনভাবে সংজ্ঞায়িত করা হয়েছে, সুতরাং এর নির্মাণে অবশ্যই কম ওভারহেড থাকা উচিত। এটি অর্জনের জন্য, ডাইনেটের একটি অনুকূলিত সি ++ ব্যাকএন্ড এবং লাইটওয়েট গ্রাফের উপস্থাপনা রয়েছে। পরীক্ষাগুলি দেখায় যে ডাইনেটের গতি স্ট্যাটিক ডিক্লারেশন টুলকিটগুলির তুলনায় দ্রুত এবং তুলনীয় এবং অন্য গতিশীল ডিক্লারেশন টুলকিট চাইনারের চেয়ে উল্লেখযোগ্যভাবে দ্রুত faster ডাইনেট অ্যাপাচি ২.০ লাইসেন্সের অধীনে উন্মুক্ত উত্স প্রকাশিত এবং এতে উপলব্ধ গতিশীল ঘোষণার সাথে একটি চ্যালেঞ্জ হ'ল প্রতিটি প্রশিক্ষণের উদাহরণের জন্য প্রতীকী গণনা গ্রাফটি নতুনভাবে সংজ্ঞায়িত করা হয়েছে, সুতরাং এর নির্মাণে অবশ্যই কম ওভারহেড থাকা উচিত। এটি অর্জনের জন্য, ডাইনেটের একটি অনুকূলিত সি ++ ব্যাকএন্ড এবং লাইটওয়েট গ্রাফের উপস্থাপনা রয়েছে। পরীক্ষাগুলি দেখায় যে ডাইনেটের গতি স্ট্যাটিক ডিক্লারেশন টুলকিটগুলির তুলনায় দ্রুত এবং তুলনীয় এবং অন্য গতিশীল ডিক্লারেশন টুলকিট চাইনারের চেয়ে উল্লেখযোগ্যভাবে দ্রুত faster ডাইনেট অ্যাপাচি ২.০ লাইসেন্সের অধীনে উন্মুক্ত উত্স প্রকাশিত এবং এতে উপলব্ধএই HTTP ইউআরএল
এটি পূর্বে সিএনএন (যার পাইথন বাইন্ডিংয়ের নাম পাইকন) নামে পরিচিত ছিল।
তথ্যসূত্র:
আমি আপনাকে টেনসরফ্লো ব্যবহার করার পরামর্শ দিচ্ছি যা শক্তিশালী বিকাশের অধীনে রয়েছে এবং গভীর শিক্ষাকে সমর্থন করে। আপনি উচ্চ-স্তরের নিউরাল নেটওয়ার্কগুলি এপিআই কেরাস ব্যবহার করতে পারেন যা টেনসরফ্লোতে শীর্ষে চলে এবং ব্যবহার করার জন্য খুব সহজ, কেবল একটি টিউটোরিয়াল চেষ্টা করে দেখুন এবং আপনি এটি পছন্দ করতে চলেছেন।
এটি ব্যবহারের সহজলভ্যতা এবং বেসিক পাইথনের সাথে মিলের কারণে এটি প্রচুর সমর্থন পাচ্ছে।
এটি সাধারণ পাইথনের মতোই "লাইন বাই লাইন" চালায় (ডায়নামিক গ্রাফগুলির মাধ্যমে) এবং সহজেই ডিবাগ করা যায় - এমনকি স্ট্যান্ডার্ড মুদ্রণ বিবৃতি ব্যবহার করে। এটি সুমকিট লার্নের মতো নম্পপি এবং অন্যান্য সুপরিচিত পাইথন ল্যাব্র্যাব্রিজগুলির সাথে খুব ভালভাবে সংহত করে।
যেহেতু এটি মডেলিংকে সহজ করে তোলে, সাধারণভাবে নতুন ধারণাগুলি প্রোটোটাইপিং এবং অন্বেষণের জন্য এটি দুর্দান্ত।
এটি একাধিক জিপিইউ সমর্থন করে এবং এটি সত্যিই সহজ উপায়ে করে।
পরীক্ষা করে দেখুন এখানে আরও বৈশিষ্ট্য ।
যদিও উপরের অনেকগুলি সুবিধা পাইটর্চকে অন্যান্য সাধারণ ব্যবহৃত লাইব্রেরিগুলির তুলনায় আরও ভাল ব্যবহার করে তোলে, তবে এটি উল্লেখ করার মতো যে টেনসরফ্লোয়ের আসন্ন বড় প্রকাশটি ডিফল্টরূপে গতিশীল গ্রাফ তৈরি (ওরফে উত্সাহী মোড )ও ব্যবহার করবে। এটি এটি ব্যবহারে পাইটর্চের সাথে তুলনীয় করে তুলবে।
আপনার কর্মক্ষমতা তুলনা আগ্রহী, Soumith Chintala convnet benchmarks ইতিমধ্যে উল্লিখিত পাইথন অবকাঠামো (বেশ কয়েক আবরণ একটি সেট বজায় রাখে TensorFlow , chainer , নিয়ন , Theano ):