سؤال

من تجربتك، ما هي الطريقة الأكثر فعالية لتنفيذ نماذج النماذج الشبكية العصبية الاصطناعية؟ إنه الكثير من الضجيج رديئة (مجاني، لكنني لم أعمل معها) أو MATLAB (غير مجاني)، خيار آخر ممكن هو استخدام لغة مثل C ++ / Java / C #. يستهدف السؤال بشكل رئيسي الأشخاص الذين حاولوا اختبار بعض بنيات الشبكات العصبية أو خوارزميات التعلم.

إذا كان اختيارك هو استخدام لغة برمجة مختلفة عن الثلاثة المذكورة أعلاه، فهل يمكنك أن تخبرني بأسمائها وبعض التفسيرات المتعلقة باختيارك (باستثناء: هذه هي اللغة الوحيدة / الأكثر استخداما مني).

شكرا.

هل كانت مفيدة؟

المحلول

نظرا لأن الشبكات العصبية تستخدم الكثير من العلماء، وليس الكثير من المبرمجين، فاختر لغة برمجة تستهدف العلماء وتوفر مكتبات جيدة للشبكات العصبية.

بيثون هو اختيار معقول لأنه يستخدم على نطاق واسع من قبل العلماء. توزيعتان للبدء

http://www.pythonxy.com/

http://code.enthought.com/

تتضمن توزيعات Python هذه الكثير من الوحدات الوظيفة الإضافية التي ليست موجودة في مكتبة Python القياسية، ولكنها مفيدة للغاية لنوع البرمجة التي يقوم بها العلماء. البحث في مؤشر حزمة بيثون يأتي مع عدد قليل من حزم الشبكة العصبية قد تكون على ما يرام إذا كنت تعلم فقط عن الشبكات العصبية.

http://pypi.python.org/pypi؟:action=search&term=neural&submit=search.

ومع ذلك، إذا كنت تقوم بعمل جاد مع الشبكات العصبية، فأنت تريد شيئا مثل مكتبة الشبكات العصبية السريعة. يأتي هذا مع ارتباطات Python بحيث يمكنك القيام برمجةك في Python، استخدم مجموعة واسعة من وحدات Python للرسوم البيانية والتصور والمعالجة البيانات وما إلى ذلك. ولكن، ستتم تشغيل شبكاتك العصبية باستخدام التعليمات البرمجية المترجمة أحادية المترجمة من مكتبة FANN. أفضل ما في العالمين.

بمعنى آخر، لتشغيل رمز الشبكة العصبية الفعلية، تحتاج إلى ج، وليس جافا. نظرا لأن المكتبات C لا تدمج جيدا مع Java، فاختر لغة تدمج بسلاسة مع مكتبات C. Python يفعل ذلك وهو أيضا أكثر إنتاجية من Java نظرا لأن هناك خطوط أقل بكثير من الكود المطلوب لشرح خوارزمياتك. وجد بعض الأشخاص زيادة 10 مرات في الإنتاجية على جافا.

لقد ذكرت R، ربما لأن لديها وظائف إحصائية تحتاج إلى استخدامها، أو ربما يكون لديك أشخاص متاحين الذين يمكنهم كتابة الرمز R. مرة أخرى، فإن اختيار Python مقابل R ليس أي قرار. يمكنك استخدام كليهما.

تتيح مكتبة Ry برامج Python الوصول إلى المكتبات والرمز. باستخدام هذا ستكتب برامجك الرئيسية في Python وعلاج R كأداة لتزويد المكتبات، بنفس الطريقة التي تقوم فيها باستخدام مكتبة FANN التي كتبت في C.

http://rpy.sourceforge.net/

هناك وحدة نمطية أخرى تسمى RSPYTHON التي تعمل كلا الاتجاهين، بحيث يمكن لبرامج R الوصول إلى المكتبات المكتوبة في Python. سيكون هذا مفيدا إذا كان لديك مبرمج ص خبير يساعدك.

http://www.omegahat.org/rspython/

وهذا ليس كل شيء. يمكنك الاستفادة من Python لتبسيط برمجة Java. إذا كان لديك محرك شبكة عصبي Java، فلا يزال بإمكانك كتابة معظم برنامجك في Python باستخدام إصدار Jython الذي يعمل على Java VM ويسمح لك باستخدام أي مكتبات ودروس Java في التعليمات البرمجية. ولا يزال بإمكانك استخدام مكتبة Fann FANN أيضا نظرا لأنها توفر ارتباطات لبرامج Java.

السبب الرئيسي الذي أوصي به ثعبان عملك هو أنه يستخدم من قبل الكثير من العلماء من العلماء وهذا هو السبب في أن هناك توزيعتان للعلوم المتاحة. السبب الثاني هو أن بيثون سهلة للغاية بالنسبة للمبرمجين المبتدئين البدء، وفي استكشاف الشبكات العصبية، من المحتمل أن تبدأ من المحاكاة البسيطة والعمل حتى أكثر تعقيدا مع مزيد من التلاعب في البيانات وتحليل النتائج. سيسمح لك Python ببناء مكتبة التعليمات البرمجية الخاصة بك، وتصبح مبرمج ثعبان خبير حتى تتمكن من تركيز المزيد من انتباهكم على مشاكل الشبكة العصبية. إذا كنت ترتد مع القليل من Java، وقليلا من C ++ وقل قليلا من R، فستتمكن من قضاء وقت أقل على الشبكات العصبية. قد تكون هذه الاستراتيجية جيدة بالنسبة لشخص يريد مهنة في البرمجة، ولكن ليس لشخص يريد تحقيق بعض النتائج المهمة مع الشبكات العصبية.

حتى لو تمتد عمل الشبكة العصبية الخاصة بك إلى أجهزة متخصصة، ما يسمى رقائق Neuromorphic، لا يزال بإمكانك الاستفادة من Python لأن هذه الورقة من NIH توضح:

http://www.ncbi.nlm.nih.gov/pmc/articles/pmc2701676/

نصائح أخرى

حاولت استخدام كل من لغات مستوى التجريد الأعلى (matlab، Java) وانخفاض منها (ج). كلاهما باستخدام صناديق الأدوات والمكتبات وترميزها بنفسي. الاستجابة الشاملة؟ لا هي الأداة المثالية. يرجى مراعاة ذلك:

  • قد لا يكون النموذج الأولي كافيا: غالبا ما تحتاج إلى تشغيل الشبكة على عينات كبيرة، أو عدة مرات على مجموعة فرعية من العينات (في حالة وجود الشبكات العصبية المتطورة) للحصول على نتائج لائقة. إذا كان عليك تشغيل شبكة مليون مرة، فربما قد يكون كسب أداء صغير مساعدة هائلة وموجة زمنية (أي على ماتلاب)؛

  • إذا، فمن ناحية أخرى، تحتاج إلى سهولة الترميز، قد ترغب في استخدام واحدة من العديد من المكتبات المعبأة مسبقا (Javann، إلخ)؛

  • أي نوع من الشبكة العصبية التي تستخدمها؟ الوقت المستمر في الشبكات العصبية المتكررة (CTRNN)؟ backprop؟ كيف يمكنك تدريبهم؟ كيف تحقق نتائجهم؟ هل الدقة مهمة؟ (أي تقوم بتشغيلها على جهاز صغير، مثل لوحة التحكم الروبوتية المحدودة الذاكرة، مثل Arduinos؟)

إذا كان لديك وقت لتجنيب، أود أن أقترح

  1. تعلم المفاهيم باستخدام لغة أعلى مستوى، أو حتى pseudocode أولا؛
  2. بمجرد دراية بجميع تعقيدات، خاصة إذا كنت تستخدم الشبكات العصبية المتطورة، اختر لغة مألوفة بالفعل
  3. ثم قد ترغب في البدء في البحث عن كيفية تحسين السرعة، بصمة الذاكرة، إلخ.

أتمنى أن يساعدك هذا.

لقد استخدمت صندوق أدوات شبكة MATLAB للشبكات العصبية إلى حد ما، واستمتعت به كأداة النماذج الأولية نظرا لواجهة الرسومات الخاصة بها للسماح لك بإعداد الشبكة، وتجربة أحجام التدريب بيانات إدخال اختبار VS، واختبار ما بعد التدريب بنيت فيها. يبدو أنها لطيفة وطبيعية للبدء مع ...

لقد جربت أيضا جون (جافا وجوه موجه المحرك العصبي). يتم إعداده بشكل جيد للغاية، وفي الوقت الذي كنت فيه قليلا من الهواة ولا يزال لم يكن لدي أي مشاكل في الحصول على العديد من الشبكات وتشغيلها، مع الاختبار. إنها Java، لذلك قد لا يكون لها الأداء الذي قد ترغب فيه إذا كنت تدرب أنظمة معقدة كبيرة، لكن واجهة برمجة تطبيقاتها كانت صالحة للتنمية للغاية.

لقد رأيت أيضا بعض العمل المنجز مع فيضان في C ++. لديها مجموعة من الفصول الدراسية التي تم إعدادها مع الشبكات المناسبة لحل مجموعة من المشاكل. ومن الجدير التدقيق بها.

أود أيضا أن أوصي بثثون بشدة. بالنسبة للنموذج الأولي، فإن Python هو خيار رائع: إنه أمر أسهل وأسرع في البرنامج، وهناك عدد كبير من المكتبات المتاحة، وتستخدم على نطاق واسع في المجتمع العلمي.

أيضا، إذا كنت تستخدم Python، فيمكنك أيضا الاستفادة من الممتازة ببرين الحزمة التي تحتوي على خوارزميات للشبكات العصبية، وتعزيز التعزيز، والتعلم غير المنصوص عليها، وغيرها من مهام التعلم الآلي، والتي يجب أن تساعدك في بناء نموذج أولي بسرعة.

هذا يعتمد على الإعداد الحالي الخاص بك. عندما اعتدت على العمل عليها في أيام الكلية، كان علي استخدام الوصفات الرقمية C ++ + MPI +. تم ذلك لأنني اضطررت إلى تحميل المشاركة على كتلة Beowulf الكبيرة.

إذا كانت احتياجاتك حسابك ليست كبيرة، فلا تفعل أي شيء. تتوفر المكتبات المعبأة مسبقا على جميع المنصات (R، Python (Numpy، Scipy)، C / C ++ (الوصفات العددية) إلخ). إذا كنت برمجة مريحة في أي منهم، فلا ينبغي أن تكون مشكلة كبيرة.

إذا اضطررت إلى النموذج الأولي الآن، ربما أذهب مع بيثون (لمجرد أن أجدها أسهل بكثير بالنسبة للنماذج الأولية)

SCILAB. هو بديل مفتوح المصدر إلى matlab.

قد تقوم بتجربة الشبكات العصبية باستخدام Ann Toolbox ل SCILAB.

التركيز على النظرية والتجارب. هل اخترت ميزات تمييزية لعيناتك؟ ما هي حالة تدريبك وإجراء الاختبار. لكل تجربة، دراسة مصفوفة الارتباك. هل لديك فكرة لماذا تكون عينة مؤلمة؟ هل يبدو منطقي لك؟ إذا لم يكن الأمر كذلك، ما هي الميزة التي لا تستخدمها ستساعد؟

ينفذ يأتي بعد ذلك، استخدم اللغة التي تعرفها. من المحتمل أن تكون لغة مدارة مثل Java أو C # عرضا أقل عرضة: على الأقل أنت أقل عرضة لتثبيت الأشياء بسبب الأخطاء المؤشر أو تخصيص الذاكرة. التحسين يأتي الأخير (بعد التنميط اللائق كما هو الحال دائما).

"التشييك هو إطار عمل عصبي متطور وإطار لتعلم الآلات. يحتوي على فئات على فئات لإنشاء مجموعة واسعة من الشبكات، بالإضافة إلى فئات الدعم لتطبيع البيانات ومعالجتها لهذه الشبكات العصبية. قطارات التثقيف باستخدام انتشار مرونة متعدد المرونة. يمكن أيضا الاستفادة أيضا من GPU لمزيد من وقت معالجة السرعة. كما يتم توفير عمل يعمل بنظام العمل في واجهة المستخدم الرسومية للمساعدة في نموذج وتدريب الشبكات العصبية. تم التنازل في التطوير النشط منذ عام 2008. "

يتوفر هذا التركيز ل Java، C # .NET و Silverlight.

http://www.heatonresearch.com/encog.

في دروس NN الخاصة بي في المدرسة، استخدمنا ماتلاب ثم استخدمت جافا لأطروحة.

أود أن أقترح جافا أو ماتلاب. Matlab لأنه ربما يحتوي بالفعل على الكثير مما قد تحتاجه. وجافا لأنه سريع لتنفيذ ما قد يكون مفقودا في مشاريع مفتوحة المصدر. وأعثرت على ذلك إلى جانب تنفيذ الشبكات العصبية، قد تحتاج إلى بعض الطرق لتصورها. ولذنى شخصيا أعتقد أن جافا أو ماتلاب سهل للغاية.

انا يعجبني فيضان. وبعد إنه مجاني وشامل ومكتوب في C ++.

التطبيقات في ماتلاب متطورة وكاملة. لقد وجدت أنه كافية لتقييم أنواع مختلفة من الشبكات. كما أنه قابل للبرمجة جدا باستخدام واجهات خارجية.

ومع ذلك، نظرا لأن تطبيقات الخوارزميات ليست مفتوحة المصدر، فمن الصعب في بعض الأحيان عندما تحتاج إلى نقل جزء معين من التعليمات البرمجية إلى تطبيق خارج Matlab، حيث أن تطبيقات ناحية مشفرة من أنواع الشبكات العصبية المختلفة التي أنتجت نتائج مختلفة.

لقد بدأت في كتابة تنفيذ NN باستخدام C ++ ووجدت أنني لم أكن أعرف ما يكفي من الرياضيات المشاركة في البداية. إن ما انتهى به الأمر هو أنه كان من الصعب للغاية إعادة تكوين التعليمات البرمجية حيث كنت تغيير نموذج الحساب.

في النهاية أعطيت في MATLAB لأنها كانت بالتأكيد رفيق أفضل لتعلم كيفية عمل الشبكات العصبية. كنت قادرا على إجراء تغييرات كبيرة على الخوارزمية باستخدام عدد قليل من السكتات الدماغية الرئيسية ورسم النتائج أيضا.

ربما كانت تجربتي أفضل إذا كنت قد استخدمت إطار حساب مصفوفة مبني بالفعل. بالنظر إلى أن هذا هو كيف يجب أن يكون هناك عدد قليل من المكتبات المحسنة حقا في معظم اللغات. هيك قد تكون كذلك في رفع مستوى Direct3D أو OpenGL لذلك، لكنني متأكد من وجود شيء أكثر ملاءمة للشبكات العصبية هناك.

أعتقد أنني لا أقدم الكثير من المعلومات حول ما يجب عليك فعله. ومع ذلك، يمكنني معرفة ما يجب ألا تفعله - وهذا يحاول كتابة شفرة التلاعب مصفوفة بنفسك.

قد ترغب في إعطاء Weka. نظرة. لديها بعض الأدوات المدمجة للأشياء مثل تصور البيانات، وكان موجودا منذ سنوات (بعض screenshots.).

في رأيي في العمل مع الشبكات العصبية، فإن المفتاح هو الحصول على مجموعة التدريب بشكل صحيح ليس كثيرا كيف تحققت الشبكة نفسها في التعليمات البرمجية. سأختار لغة بناء على نوع المشكلة التي تحاول حلها باستخدام الشبكة. بالنسبة للشبكة نفسها C ++، C #، Python و Java كلها قابلة للحياة.

هل تستخدم هذا فيما يتعلق بمشكلة تتطلب معالجة الصور؟ في هذه الحالة، ستحتاج لك ربما هناك ما يصل إلى مكتبة معالجة الصور مثل OpenCV بسهولة. أم أن هناك بعض معالجة الصوت المعنية؟

قد تحتاج إلى تصور مجموعات التدريب بسهولة حتى كم سيكون هذا سهلا مع لغة الاختيار؟ هل يمكنك العمل مع مكتبات OpenGL أو DirectX إما مباشرة أو باستخدام غلاف من نوع ما؟ ل DirectX الخيارات هي C ++ و C #. هل سيقول مستوى أعلى من التجريد باستخدام WPF؟

لقد استخدمت C # لأنني على دراية بها ويمكن أن يستفيد من تقنيات معالجة البيانات العديدة في .NET واستخدام WPF لأي مريض مطلوب.

قد ترغب أيضا في إعطاء نين جرب - إنه مجاني، سهل الاستخدام وخفيفة الوزن جدا. كذلك تفوق libsvm في مقارنة خارج الصندوق في العديد من مجموعات البيانات الشعبية والتصنيف.

عادة عندما كنت العبث بهذه الأنواع من الخوارزميات، وجدت أن استخدام المصدر المفتوح Weka Toolkit. كانت طريقة رائعة للنموذج الأولي واكتشف مجموعة كاملة من خوارزميات التعلم المختلفة (وليس فقط الشبكات العصبية الاصطناعية). في هذه الأيام، يبدو كما لو أن لديهم ارتباطات من مجموعة من اللغات المختلفة، لذلك لا ينبغي ربطك بجافا إذا كنت ترغب في التفاعل مع Weka على مستوى التعليمات البرمجية.

بمجرد العثور على وفهمت شيئا كان رائعا / القيام بعمل تصنيف جيد للغاية، كتبت الخوارزمية في C أو C ++ جزئيا من أجل المتعة وجزئيا للحصول على مكاسب السرعة اللازمة اللازمة للعمل مع مجموعات بيانات أكبر.

استخدم C ++ وإذا كانت شبكتك العصبية بسيطة بما فيه الكفاية لا تستخدم أطر غريبة هناك.

ربما قبل 5 سنوات، فعلت Sokoban Solver باستخدام التعلم التعزيز. في ذلك الوقت قررنا الذهاب مع جافا واستخدام بعض إطار الوكيل الذي طورته جامعة إيطالية.

أول قرار سيئ هنا هو استخدام هذا الإطار. كان لديه بخل في الأساس هنا وهناك تسبب لنا نضيع الكثير من الوقت في تصحيح رمز الإطار.

بمجرد أن وصلنا إلى النقطة التي كان فيها كل شيء مستقر، كان تدريب الشبكة العصبية قد مات ببطء. تركناها تعمل بين عشية وضحاها في آلة قوية للغاية ولا تزال حلها عدد قليل جدا من الألغاز. أساسا جافا تخصيص كائنات وجمع القمامة تم إتلاف الأداء بأكمله للنظام بشكل سيء للغاية. قلدنا التطبيق قليلا من خلال إنشاء تجمعات من الكائنات بدلا من تخصيصها طوال الوقت ولكن أداء البرنامج لا يزال أمرا بالحجم أقل من مهمة مماثلة تم تنفيذه في C ++ باستخدام مآخذ مباشرة.

أتمنى أن يساعدك هذا!

حسنا، إذا كنت ترغب في النموذج الأولي بسرعة ثم يبدو بيثون أو ماتلاب الأفضل. هناك الكثير من المكتبات المتاحة للشبكات العصبية. تم تصميم بعض المكتبات بطريقة تعطيك الحد الأدنى من النطاق الهشاري ولكن المكتبات مثل Theano سريعة للغاية حيث يتم تجميع الوظيفة داخليا في ج (أعتقد أن الأسرع حتى الآن) ويمنحك الوظائف الكاملة للداخلية التغيير والتبديل. Theano نموذجي للاستخدام في البداية ولكنه قوي للغاية. وفي وقت لاحق إذا كنت ترغب في الانتقال من العصبي إلى عميق عميق، فلا يوجد الكثير من الفرق. كما تميل Kaghlers المهنية إلى استخدام هذه المكتبة. هذه المكتبة لديها أيضا دعم GPU. من بين جميع المكتبات التي استخدمتها، وجدت ثمن Teano ليكون الأكثر فائدة وقوية. تم تطوير بعض من حالة الإطار الفني الآخر للتعلم العميق مثل الكافيه في ثورينو.

أتمنى أن يساعدك هذا.

لقد قمت بتطبيق العديد من نماذج الشبكة العصبية في Java و C / C ++. عند أمور الأداء، استخدم مع C / C ++.

أحد تطبيقاتي (غير موجود) من Perceptron Basic MultiLayer Basic يقوم بمليون تكرار تدريب (مع إعداد 2 مدخلات، 4 عقدة إخراج 4 مخفية) في أقل من دقيقة. إن تطبيقي متطابقي تقريبا في جافا يأخذ مكانة هائلة من الوقت للقيام بذلك. يمكنك أيضا استخدام مكتبة جبرية خطية مثل Eigen لإنشاء نسخة متجهة إلى تحسين سرعة المعالجة.

تخيل أنك ستستخدم لك لأي نوع من معالجة الصور (التعرف على الوجه، OCR، إلخ) مع، على سبيل المثال، صور 28x28 بكسل. سيكون لديك 784 وحدة إدخال وعلى الأقل العديد من الوحدات الخفية. يتطلب هذا وقتا كبيرا من الوقت للتدريب، لذلك فهو مفيد لإنقاذ الدقائق الثمينة والساعات أو الأيام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top