שיעור #7 – קוד של DCGAN המלל

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

את הקישור לקוד תמצאו בתחתית העמוד. ראשית הריצו את create_bench_folders ושנו את משתנה bench_name כרצונכם להיות שם התיקיה לשמירת התוצאות. קוד זה יבנה ארבע תיקיות תחת תיקיית התוצאות הראשית.

כעת ניגש לקוד הראשי main.py.

משתמש ב tensorflow  וב matplotlib ומעבר לזה שני מודלים שכתבתי שמייד נעבור עליהם. אחד מייצר את ה database הסינתטי והשני בונה את המודלים ז”א את הרשתות CNN.

הקוד מאוד קצר ומכיל: פרמטרים, איתחולים (בניית רשת, איתחול session, איתחול ה DB), אימון, והצגת תוצאות.

נעבור על database.py שתפקידו לבנות את מאגר התמונות שלנו של מלבנים. ישנה פונקציה rest_img קיצור של restore image (סליחה על הבחירה הלא מלאה של שמות ועל מחסור בהערות – להבא אשתפר…) שתפקידה להחזיר מטריצה של ערכים בין -1 ל 1 לתמונה בתחום דינאמי של 0..255.

ויש את המחלקה Real_DB שבה הפונקציה החשובות הינה Get_Next_Batch. אם אנחנו ב DB_Type=0 הפונקציה תייצר batch של תמונות על בסיס תמונה קיימת, אחרת אם DB_Type=1 הפונקציה תייצר תמונות סינתטיות לחלוטין עם מספר אקראי של מלבנים בצבעים אקראיים במיקום וגודל אקראי.

ובקובץ קוד העיקרי שנקרא gan_model.py יש את הגדרת הרשתותgenerator, discriminator  ואת הפונקציה שמאמנת ושדוגמת. מהפונקציות G_inv, Sample_G_inv, Train_G_inv  ומכל מה שקשור באותו generator inverse אפשר להתעלם, זה ניסיון לא גמור שלי.

אסב רק את תשומת ליבכם לפרט מימושי חשוב בשורה 60: scope.reuse_variables() קריטית כאן, ומשמעותה לא ליצור משתנה טנזור Gz חדש אלא להשתמש בזה שכבר הוגדר מקודם על אף שזה היה ב scope אחר.

זה כמובן חשוב כי ב GAN כמו ב GAN מציבים בדיסקרימינטור את פלט הגנרטור D(G(z)) וזה צריך להיות אותו הגנרטור אותו מאמנים לסירוגין.

https://github.com/tamirnave/dcgan—demo-with-synthetic-db

חזור לוידאו