עבור לתוכן

Neural Network Pattern Recognition

Featured Replies

פורסם

אני מחפש ספרייה או תוכנית ב- c++ לזיהוי תבניות ברשתות נוירונים (למשל אותיות).

מצאתי רק שניים טובים ב- C# אבל התוכנית שעליה אני עובד היא ב- C++ (אני גם לא יודע c#...).

http://amazedsaint-articles.blogspot.com/2006/05/brainnet-neural-network-library-part-i_22.html#3.1

http://www.codeproject.com/csharp/HopfieldNeuralNetwork.asp

אם מישהו מכיר ספרייה או מדריך אחר זה יעזור לי מאוד... אני צריך משהו בסגנון הלינקים שהבאתי.. הנושא הזה מסובך מאוד ואני רק רוצה לדעת איך לעבוד עם ספרייה

כזאת .. אני לא צריך להבין מה באמת קורה שם בפנים.

תודה.

פורסם

מה המידע שלך?

אתה מתכוון לבנות את הרשת בעצמך? או שאתה מחפש אלגוריתם מוכן שכבר עושה משהו מסוים?

(ברשתות נוירונים בדר"כ זה שצריך לבנות את הרשת)

אולי תנסה משהו ב- support vector machines? שם צריך הרבה פחות אינטואיציה כדי לקבל תוצאות טובות (האמת שבדיוק עכשיו הגענו לחומר הזה בקורס שאני לוקח עכשיו).

יש כאן כמה ספריות בנושא, אולי תמצא משהו שמתאים לך.

פורסם
  • מחבר

מה המידע שלך?

אתה מתכוון לבנות את הרשת בעצמך? או שאתה מחפש אלגוריתם מוכן שכבר עושה משהו מסוים?

(ברשתות נוירונים בדר"כ זה שצריך לבנות את הרשת)

אולי תנסה משהו ב- support vector machines? שם צריך הרבה פחות אינטואיציה כדי לקבל תוצאות טובות (האמת שבדיוק עכשיו הגענו לחומר הזה בקורס שאני לוקח עכשיו).

יש כאן כמה ספריות בנושא, אולי תמצא משהו שמתאים לך.

אני לא מתכוון לבנות את הרשת בעצמי...רק להשתמש באחת בנויה מראש.

אני רוצה ללמד את רשת הנוירונים תבניות שונות, ואחר כך להעביר מערך דו מימדי בינארי (0 ו-1) בתבנית כלשהיא (במקרה שלי אותיות) ושהתוכנית תזהה את האות.

הקישורים שכתבתי בהודעה הראשונה נראים לי מתאימים אבל הבעיה היא שהם ב- C#.

מה זה support vector machine?

תודה.

פורסם

הבעיה עם רשתות נוירונים, היא שיש הרבה מאוד חופש איך לבנות את הרשת. אם אין לך משהו שיודע לבנות רשת למטרה מסוימת, אתה צריך לבנות את הרשת בעצמך. (אני לא מכיר את הפרטים).

support vector machines זו שיטה שמאפשרת לך classification או regression עם הרבה פחות דרישות ממך, בדר"כ נותנות תוצאות יותר טובות מאשר רשתות נוירונים.

הרעיון המרכזי שם הוא לעבור ממרחב הקלט (Input set) למרחב תכונות (feature set) שיש לו הרבה יותר מימדים, ושם למצוא מערכת של מישורי-על שמפרידים בין ה- classes השונים. זה חומר קצת כבד, אבל בעיקרון, ה- input היחיד שאתה צריך לתת לאלגוריתם (חוץ מ- training sample set) זו הטרנספורמציה ממרחב הקלט למרחב התכונות (בדר"כ אפשר לבחור אחת מבין כמה פונקציות פשוטות יחסית, בהתאם לשימוש).

פורסם

מה שאמרת נכון גם לגבי רשתות ניורונים. גם רשתות ניורונים יכולות לבצע classification ע"י hyperplanes, בתלות ברשת הניורונים ובפונקציה של ניורון בודד.

החוכמה בכל הסיפור היא לבצע feature extraction באופן נבון, כך שתקבל מספר נמוך יחסית של features אבל שמתאר טוב את הבעיה.

אם אתה רוצה לזהות אותיות (לא בהכרח באופן המצולח ביותר האפשרי) בלי לטרוח לחקור ולמצוא feature set אולי עדיף שתעבוד עם רשת ניורונים פשוטה עם שתי שכבות, עם אלגוריתם אימון מונחה בסיסי כגון back propagation. זה לא ייתן את התוצאות הטובות ביותר, אבל הם יהיו לא רעות, במיוחד כאשר אתה לא מעוניין לחקור לעומק את הנושא.

בכל מקרה http://www.generation5.org/ מכיל כל מני לינקים מעניינים ואפילו tutorials לנושאי AI שונים.

פורסם
  • מחבר

תודה רבה.

אני צריך שזה יהיה רשתות נוירונים כי על זה הפרוייקט שלי לבית ספר.

מקווה שאני אבין משהו מהמאמרים באתר שנתת לי ואני מקווה שה- back-propagation ברמה בסיסית יהיה מספיק טוב בשביל לזהות אותיות.

פורסם

אפשר לדפוק אותו די בקלות, וכלשעצמו הוא בכלל לא מתאים לתנאים של העולם האמיתי. אבל לתרגיל של בית ספר זה אמור להיות מספיק טוב.

לא ברור לי איך זה שנותנים לך תרגיל על רשתות עצביות בלי שתדע עליהם כלום. מה בדיוק מטרת התרגיל?

פורסם
  • מחבר

הנה מצאתי מימוש http://www.generation5.org/content/2001/onr.asp, הוא עובד על תמונות קטנות 5X7 אבל זה בטח לא בעיה לשנות.

הפרוייקט הוא זיהוי טקסט בתמונה.. סיימתי את רוב התוכנית.

התוכנית שלי עכשיו מקבלת קובץ bmp, סורקת אותו וקובעת מלבנים של גבולות לשורות, מילים ואותיות, לאחר מכן התוכנית עוברת אות, אות, מקטינה אותה לגודל הרצוי והופכת אותה למערך של 0 ו- 1, ושולחת לזיהוי של רשתות הנוירונים (החלק שאני צריך עכשיו).

אני לא אמור להבין רשתות נוירונים אלא רק להשתמש בהם.

ברור שזה היה הרבה יותר טוב אם הייתי מבין או אפילו בונה רשת נוירונים פשוטה, אבל זה לא מסובך ודורש ידע מתמטי שאין לי?

פורסם

תיצור שכבה ראשונה של 5*7 ניורונים (כלומר אחד לכל פיקסל בקלט) ושכבה שניה של נניח 26 ניורונים (כלומר אחד לכל אות או סימן שאתה רוצה לזהות).

כל ניורון בשכבה הראשונה מחובר לכל ניורון בשכבה השניה.

לאחר מכן תאמן את הרשת עם קלט ופלט מתאים, כך שעבור קלט שהוא האות A אז הפלט יהיה אפסים לכל הניורונים בשכבה השניה מלבד נוירון הפלט שמייצג את האות A (הערך שלו יהיה 1 בהנחה שהניורונים מנורמלים).

בזמן הקלסיפיקציה, תזין את הרשת בתמונה ובסוף פשוט תבחר את האות שהפלט עבורה הוא הכי גדול.

זו שיטה מאוד פרימיטיבית אבל היא עובדת לא רע.

פורסם
  • מחבר

תיצור שכבה ראשונה של 5*7 ניורונים (כלומר אחד לכל פיקסל בקלט) ושכבה שניה של נניח 26 ניורונים (כלומר אחד לכל אות או סימן שאתה רוצה לזהות).

כל ניורון בשכבה הראשונה מחובר לכל ניורון בשכבה השניה.

לאחר מכן תאמן את הרשת עם קלט ופלט מתאים, כך שעבור קלט שהוא האות A אז הפלט יהיה אפסים לכל הניורונים בשכבה השניה מלבד נוירון הפלט שמייצג את האות A (הערך שלו יהיה 1 בהנחה שהניורונים מנורמלים).

בזמן הקלסיפיקציה, תזין את הרשת בתמונה ובסוף פשוט תבחר את האות שהפלט עבורה הוא הכי גדול.

זו שיטה מאוד פרימיטיבית אבל היא עובדת לא רע.

אה הבנתי.. בעצם ככה לבנות מערכת נוירונים ברמה בסיסית בעצמי?

אבל אחרי שאני קורא משהו כזה אני עדיין לא יכול לבנות בעצמי נכון? אני לא צריך להבין את כל המתמטיקה/ביולוגיה מאחורי זה? כי אני מבין מה אני צריך לבנות אבל אני לא בדיוק הבנתי ממה מורכב כל נוירון, איך לחבר אותו לאחר ואיך לאמן (שזה בעצם הכל:)).

אה דרך אגב, שיניתי ב- define בתוכנית שם את RESX ו- RESY מ- 5 ו- 7 ל- 9 ו- 16 ושיניתי את הקבצים learn.dat ו- test.dat בהתאם.

לא אמורה להיות בעיה נכון?

מה שכן, הפרוייקט יהיה הרבה יותר טוב אם אני אבנה מערכת נוירונים בסיסית בעצמי.

תודה.

פורסם

בעיקרון זה הולך ככה.

אתה קולט את צבע הפיקסל(אחד/אפס - שחור/לבן) בנוירונים שבשכבה הראשונה, מכפיל כל אחד מהם בערך הסינפסה המחברת אותו לנוירון המתאים בשכבה שמעליו(כל נוירון בשכבה הקולטת מתחבר לכלל הנוירונים בשכבה העליונה):

report.multil.jpg

בכל נוירון בשכבה השנייה אתה מחבר את כלל המכפלות שהתקבלו ומעביר את הסכום דרך פונקציית סף.

מבצעים את אותה פעולה בין השכבה השנייה לשלישית ומקבלים את התוצאה.

אימון של רשת הוא בעצם שינוי משקליי הסינפסות עד אשר תתקבל תוצאה רצוייה.

כמובן שזה סוג מאוד ספציפי של רשת ויש עוד רבות אבל במקרה הזה היא ניראית הכי מתאימה.

אגב, היית ממליץ לך להשתמש ב-matlab. יש הם פונקציות אימון מוכנות לרשתות.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים