أكثر

باستخدام Python ، لن يتم إسقاط إخراج Batch Project في مجموعة بيانات الميزة؟

باستخدام Python ، لن يتم إسقاط إخراج Batch Project في مجموعة بيانات الميزة؟


عند محاولة تجميع المشروع في ArcGIS 9.3 أو 10 (باستخدام إما Arcpy أو Arcgisscripting) ، لا يمكنني الحصول على نتائج المعالجة الجغرافية الخاصة بي لإسقاطها في مجموعة بيانات الميزة التي أحددها. بدلاً من ذلك ، يتم إسقاط النتائج في جذر قاعدة البيانات الجغرافية (* .mdb).

هذه نسخة مختصرة لما لدي حتى الآن:

import arcgisscripting، os gp = arcgisscripting.create (9.3) #set date dmy = datetime.now () currentDate = str (dmy.month) + "-" + str (dmy.day) + "-" + str (dmy. year) outputfolder = gp.getparameterastext (0) # حيث سنقوم بإسقاط gdb citydata = gp.getparameterastext (1) gp.workspace = outputfolder projectedfolder = os.path.join (outputfolder، "projected") gp.CreateFolder_management (* os.path.split (projectedfolder)) gdb = "Projected_Data_" + currentDate + ".mdb" #set إحداثيات نظام الإخراجCS = gp.CreateObject ("SpatialReference") outputCS.createFromFile (os.path.join (gp.getinstallinfo) () ['InstallDir']، "أنظمة الإحداثيات  أنظمة الإحداثيات الجغرافية  أمريكا الشمالية  NAD 1983.prj")) التحول = "" gp.AddMessage ("إنشاء مجموعة بيانات ميزة المدينة") gp.CreateFeatureDataset (os. المسار. ""، تحويل)

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

(تم النشر في منتديات ESRI هنا)


سأل الكثير من الناس عن هذا. تم رفض طلب واحد على الأقل (NIM013677) بالحالة "حسب التصميم". السبب المعطى هو:

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

إخلاء المسؤولية عن الأمراض المنقولة جنسياً: أعمل في Esri ، لكن ليس في فريق المعالجة الجغرافية (الذي اتخذ هذا القرار).


تم إصلاح ذلك في ArcGIS 10.1: http://forums.arcgis.com/threads/39448-Using-Python-can-t-get-Batch-Project-outputs-to-save-in-a-feature-dataset؟p = 244841 & viewfull = 1 # post244841

لقد اختبرت ذلك في Python Window في ArcMap 10.1 ، وهو يعمل :-)


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

في إنشاء بيئة افتراضية ، ستنشئ دليلًا يحتوي على ملف python3 الثنائي وكل ما يلزم لتشغيل الكلام العميق. يمكنك استخدام أي دليل تريده. لغرض التوثيق ، سوف نعتمد على $ HOME / tmp / deepspeech-train-venv. يمكنك إنشائه باستخدام هذا الأمر:

بمجرد اكتمال هذا الأمر بنجاح ، ستكون البيئة جاهزة للتفعيل.


مقدمة

بالنسبة لأولئك الذين يبدأون في بيئة التعرف الضوئي على الأحرف (OCR) ، أجد أنه من المثير للاهتمام تقديم سياق موجز.

وفقًا لـ [1] ، تشتمل أنظمة التعرف الضوئي على الحروف على فئتين: عبر الانترنت، حيث يتم الحصول على معلومات الإدخال من خلال مستشعرات الكتابة في الوقت الفعلي و غير متصل على الانترنت، حيث يتم الحصول على معلومات الإدخال من خلال المعلومات الثابتة (الصور). في حدود غير متصل على الانترنت الفئة ، هناك التعرف على النص المكتوب والمخطوطة (الشكل 1).

لذلك ، يهدف التعرف على النص المكتوب بخط اليد (HTR) إلى نسخ النص المخطوطة إلى الوسيط الرقمي (ASCII ، Unicode) [2].

لسنوات عديدة ، استخدمت أنظمة HTR نماذج ماركوف المخفية (HMM) لمهمة النسخ [3] - [5] ، ولكن مؤخرًا ، من خلال التعلم العميق ، تم استخدام نهج الشبكات العصبية المتكررة التلافيفية (CRNN) للتغلب على بعض القيود من HMM [6] ، [7]. لتمثيل نموذج CRNN ، أحضر النموذج [8] (الشكل 2).

يمكن تقسيم سير العمل إلى 3 خطوات. الخطوة 1: يتم إدخال صورة الإدخال في طبقات CNN لاستخراج الميزات. الإخراج هو خريطة المعالم. الخطوة 2: من خلال تنفيذ الذاكرة طويلة المدى (LSTM) ، فإن RNN قادرة على نشر المعلومات عبر مسافات أطول وتوفير ميزات أكثر قوة للتدريب. الخطوه 3: باستخدام مصفوفة إخراج RNN ، يحسب التصنيف الزمني الموصل (CTC) [9] قيمة الخسارة ويفك أيضًا ترميزه في النص النهائي.

لمزيد من التفاصيل حول هذه العملية ، أوصي بالقراءة قم ببناء نظام التعرف على النص المكتوب بخط اليد باستخدام TensorFlow بقلم هارالد شيدل (2018).

أخيرا، من المهم جدًا شرح ذلك في هذا المنشور، الخطوة 3 (CTC) هي نفسها لجميع البنى المقدمة ، ثم يتم استخدام طريقة Vanilla Beam Search [10] ، لأنها لا تتطلب قاموسًا لتطبيقها ، على عكس الطرق الأخرى المعروفة مثل Token Passing [11] و بحث شعاع الكلمات [8]. لذلك ، فإن البنى المعروضة في الأقسام التالية تعمل فقط في الخطوتين 1 و 2.

بالإضافة إلى ذلك ، فإن محارف لتشفير النص هو نفسه أيضًا لجميع مجموعات البيانات. لذلك ، تتكون القائمة المستخدمة من 95 حرفًا قابلاً للطباعة من جدول ASCII (الشكل 3) افتراضيًا ولا تحتوي على أحرف معلمة.

الآن قد تتساءل عن سبب استخدام نفس CTC ومجموعة الأحرف للبنى ومجموعات البيانات. حسنًا ، بالنسبة لهذه التجربة بشكل هادف ، أردت تقديم نهج أكثر اتساقًا بين النماذج وقواعد البيانات. نظرًا لأن استخدام قواميس ومجموعات أحرف محددة يمكن أن يحقق نتائج أفضل في بعض السيناريوهات ، ولكن ليس كثيرًا في سيناريوهات أخرى. على سبيل المثال ، مجموعة أحرف مكونة من 60 حرفًا فقط هي "أسهل في النقر" (1/60) من مجموعة أحرف أخرى بها 125 (1/125). في الواقع ، يصبح الأسلوب هنا أكثر صعوبة للتعرف على النص بواسطة النماذج.


تحديد وظيفة النتيجة الشاذة

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

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

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

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

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


باستخدام Python ، لن يتم إسقاط إخراج Batch Project في مجموعة بيانات الميزة؟ - نظم المعلومات الجغرافية

هندسة الخصائص الآلية وتسجيل النماذج باستخدام IBM Watson Studio Local

الهدف من نمط الكود هذا هو توضيح كيف يمكن لعلماء البيانات الاستفادة من Watson Studio Local من IBM لأتمتة:

الاستخراج الدوري للميزات (المستخدمة لتدريب نموذج التعلم الآلي) من مجموعات البيانات الموزعة.

تسجيل الدفعة للميزات المستخرجة في النموذج المنشور.

لتوضيح ذلك ، يتم استخدام مثال على سير عمل علم البيانات الذي يصنف 3 فئات نبيذ مختلفة من الخصائص الكيميائية لتلك الخمور في نمط الكود هذا.

لاستخراج الميزات ، يتم تطبيق تحليل المكون الرئيسي (PCA) على مجموعة بيانات تصنيف النبيذ ويتم استخراج مكونين رئيسيين.

بالنسبة لنموذج التصنيف ، يتم تطبيق الانحدار اللوجستي (نموذج التعلم الآلي الشهير) على المكونات المستخرجة للتنبؤ بفئات النبيذ.

ما هو PCA؟ تحليل المكون الرئيسي (PCA) هو أسلوب شائع لتقليل الأبعاد يتم استخدامه لتقليل عدد N من المتغيرات العددية إلى عدد قليل من المكونات الرئيسية التي يتم استخدامها كميزات في نموذج التعلم الآلي. تستحوذ هذه المكونات الرئيسية على نسبة مئوية كبيرة من تأثير التباين المشترك لجميع المتغيرات.

ما هو IBM Watson Studio Local؟ Watson Studio Local هو حل محلي لعلماء البيانات ومهندسي البيانات. يوفر مجموعة من أدوات علوم البيانات التي تتكامل مع تقنيات أجهزة الكمبيوتر المحمولة RStudio و Spark و Jupyter و Zeppelin.

ما هو تعلم الآلة IBM Watson؟ Watson Machine Learning هي أداة Watson Studio Local التي توفر للمستخدمين القدرة على إنشاء وتدريب نماذج التعلم الآلي. يمكن للمستخدمين أيضًا نشر نماذجهم لإتاحتها لجمهور أوسع.

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

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

الكمبيوتر الدفتري الثاني يتدرب ويبني ويحفظ نموذجًا يمكن تسجيله. يمكن بعد ذلك نشر النموذج والوصول إليه عن بعد.

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

يتم استخدام البرنامج النصي الثاني لتسجيل مجموعة الميزات المستخرجة في النموذج المنشور وحفظ النتائج مع تعيين الإصدار.

النص الثالث عبارة عن برنامج نصي مُغلف يقوم بتشغيل البرنامجين أعلاه واحدًا تلو الآخر ويستخدم لأتمتة استخراج الميزات وتسجيل النماذج في تشغيل واحد.

باستخدام ميزة Watson Machine Learning في Watson Studio ، يتم نشر البرامج النصية الثلاثة كخدمة لأتمتة استخراج الميزات وتسجيل النتائج في الإنتاج.

عند الانتهاء من نمط الرمز هذا ، سوف تفهم كيفية:

  • استخدم Watson Studio Local ولاستخراج الميزات باستخدام PCA والتقنيات الأخرى.
  • قم ببناء وتدريب وحفظ نموذج من الميزات المستخرجة باستخدام Watson Studio Local.
  • استخدم ميزة Watson Machine Learning لنشر النموذج الخاص بك والوصول إليه في وضع الدُفعات و API
  • أتمتة استخراج الميزة وتسجيل النقاط باستخدام البرامج النصية التي يتم نشرها كخدمة في وضع الدُفعات و API.

  1. يتم تحميل مجموعة بيانات تصنيف النبيذ في Watson Studio Local كأصل.
  2. يتفاعل المستخدم مع Watson Studio Local للوصول إلى الأصول مثل دفاتر Jupyter ونصوص Python ومجموعات البيانات.
  3. تستخدم أجهزة كمبيوتر Jupyter الدفترية عمليات Spark DataFrame لتنظيف مجموعة البيانات واستخدام Spark MLlib لتدريب نموذج تصنيف PCA.
  4. يتم نشر النموذج والبرامج النصية المصاحبة وتشغيلها من Watson Machine Learning.
    : حل محلي مبتكر لعلماء البيانات ومهندسي البيانات. يوفر مجموعة من أدوات علوم البيانات التي تتكامل مع تقنيات أجهزة الكمبيوتر المحمولة RStudio و Spark و Jupyter و Zeppelin. : نظام حوسبة عنقودية مفتوح المصدر وسريع وعامة الأغراض. : تطبيق ويب مفتوح المصدر يسمح لك بإنشاء ومشاركة المستندات التي تحتوي على تعليمات برمجية مباشرة ومعادلات وتصورات ونصوص توضيحية.
    : يمكن تطبيق الذكاء الاصطناعي على مساحات حل متباينة لتقديم تقنيات تخريبية. : Python هي لغة برمجة تتيح لك العمل بسرعة أكبر ودمج أنظمتك بشكل أكثر فاعلية.

قم بتثبيت Watson Studio Local

يوفر Watson Studio Local مجموعة من أدوات علوم البيانات ، مثل أجهزة الكمبيوتر المحمولة Spark و Jupyter ، اللازمة لإكمال نمط التعليمات البرمجية هذا. اقرأ دليل التثبيت لتثبيت وتكوين مثيل Watson Studio المحلي الخاص بك.

اتبع هذه الخطوات لإعداد البيئة المناسبة لتشغيل أجهزة الكمبيوتر المحمولة الخاصة بنا محليًا.

2. إنشاء مشروع في IBM Watson Studio Local

في Watson Studio Local ، نستخدم المشاريع كحاوية لجميع الأصول ذات الصلة. لإنشاء مشروع:

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

بالنسبة لمشروعنا ، نحتاج إلى إضافة دفاتر الملاحظات والبرامج النصية الخاصة بنا. لإضافة دفاتر الملاحظات الخاصة بنا:

حدد دفاتر الملاحظات في قائمة أصول المشروع ، ثم اضغط على الزر إضافة دفتر ملاحظات.

أدخل اسم دفتر ملاحظات فريدًا واستخدم الخيار From URL لتحميل دفتر الملاحظات من github repo.

حدد البيئة التي تعمل ضمن Python v3.1 أو أحدث.

ملاحظة: لتسهيل متابعة الإرشادات المتبقية ، يوصى بتعيين Name لمطابقة اسم دفتر الملاحظات في الملف الذي تم تحميله.

  • انقر فوق علامة التبويب من ملف ثم استخدم خيار السحب والإفلات لتحميل ملف البرنامج النصي من الريبو المحلي الخاص بك. سيتم ملء اسم البرنامج النصي مسبقًا باسم الملف الذي تم تحميله. حدد الإصدار 3 من Python.

من علامة التبويب الملف المحلي ، انقر فوق الزر تحديد من نظام الملفات المحلي لتحديد الملف /data/Wine.csv من الريبو المحلي.

4. قم بتشغيل أجهزة الكمبيوتر المحمولة لإنشاء نموذجنا

لعرض دفاتر الملاحظات الخاصة بنا ، حدد دفاتر الملاحظات في قائمة أصول المشروع.

أولاً ، بعض المعلومات الأساسية حول كيفية تنفيذ جهاز كمبيوتر محمول:

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

    لتشغيل دفتر ملاحظات ، ما عليك سوى النقر فوق اسم دفتر الملاحظات من قائمة أجهزة الكمبيوتر المحمولة.

    قم بتشغيل الكمبيوتر الدفتري الخاص بميزات pca أولاً. يقرأ ويحول مجموعة بيانات النبيذ. يقوم أيضًا بإنشاء ملفات البيانات التي سيطلبها دفتر الملاحظات التالي. يمكن عرض ملفات بيانات csv هذه عن طريق تحديد مجموعات البيانات من قائمة أصول المشروع.

    قم بتشغيل دفتر نمذجة pca ، والذي يقوم بإنشاء وحفظ نموذج البيانات الخاص بنا.

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

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

    كما سترى لاحقًا ، سيتم تشغيل أول دفتر ملاحظات عن طريق تشغيل برنامج نصي في مشروعنا (scripts / feature_engineering.py). تم إنشاء هذا البرنامج النصي في البداية عن طريق تحميل دفتر ملاحظات ميزات pca في Jupyter ، ثم تصدير خلايا دفتر الملاحظات إلى نص Python النصي (استخدم خيارات القائمة File - & gt Download as - & gt Python (.py)). كان علينا فقط تعديل البرنامج النصي قليلاً لتضمين بعض التعليمات البرمجية للتعامل مع إصدارات البيانات.

    5. قم بإجراء التغييرات على مستودع Watson Studio الرئيسي المحلي

    بعد إجراء تغييرات على مشروعك ، سيتم تذكيرك من حين لآخر بالتزام ودفع التغييرات إلى Watson Studio Local Master Repoisory.

    الآن بعد أن أضفنا دفاتر الملاحظات والبرامج النصية الخاصة بنا ، وقمنا بإنشاء نموذجنا ، دعنا نمضي قدمًا ونفعل ذلك. التزم بدفع جميع أصولنا الجديدة واضبط علامة الإصدار على v1.0.

    6. إنشاء مشروع إصدار في IBM Watson Machine Learning

    يوفر IBM Watson Machine Learning آلية لنشر نموذجنا كخدمة ويب. يدير إصدارات المشروع ، التي سننشئها الآن.

    • قم بتشغيل أداة IBM Watson Machine Learning بتحديدها من القائمة المنسدلة الرئيسية في الصفحة الرئيسية لـ Watson Studio Local.

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

    7. نشر نموذجنا كخدمة ويب

    • حدد النموذج من قائمة الأصول المرتبطة بمشروعنا. من لوحة تفاصيل النموذج ، اضغط على زر خدمة الويب.

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

    8. نشر البرامج النصية لدينا كوظيفة

    • في شاشة نشر البرنامج النصي ، أدخل اسمًا للمهمة ، واضبط النوع على تشغيل البرنامج النصي ، وأضف v1 كوسيطة لسطر الأوامر ، ثم اضغط على إنشاء.

    كرر هذه الخطوات للنصين المتبقيين.

    9. جلب عمليات النشر على الإنترنت

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

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

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

    10. جمع بيانات نقاط نهاية API لاستخدامها في البرامج النصية

    ستحتاج بعض البرامج النصية الخاصة بنا إلى الوصول إلى نموذجنا المنشور ، وفي بعض الحالات ، إلى البرامج النصية الأخرى المنشورة.

    فيما يلي نظرة عامة سريعة على ما تقوم به البرامج النصية وما تتطلبه:

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

    model_scoring.py - هذا البرنامج النصي عبارة عن معالج دفعي. يقرأ ملف بيانات الميزات ويسجل كل ميزة ، واحدة تلو الأخرى ، من خلال تشغيلها من خلال نموذجنا. سيكون الإخراج ملف بيانات scoring_output. لاحظ أن ملف البيانات سيحتوي على علامة إصدار ملحقة به بحيث لا تتم كتابة محتوياته بشكل زائد في كل مرة يتم فيها تشغيل هذا البرنامج النصي. يتطلب هذا البرنامج النصي الوصول إلى نموذجنا المنشور.

    extract_and_score.py - تم إنشاء هذا البرنامج النصي للتيسير ، ويمكن استخدامه بدلاً من تشغيل البرامج النصية السابقة بشكل منفصل. يستدعي البرنامج النصي feature_engineering أولاً ، ثم عند اكتماله ، فإنه يستدعي البرنامج النصي model_scoring. يتطلب هذا البرنامج النصي الوصول إلى البرامج النصية الأخرى المنشورة.

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

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

    للحصول على نقطة النهاية للنموذج الذي تم نشره ، انقر فوق النموذج من علامة التبويب الأصول في صفحة المشروع.

    تم إدراج نقطة النهاية في أعلى الصفحة. يمكن حفظ كل من نقطة النهاية ورمز النشر في الحافظة من خلال النقر على كل منهما الرموز.

    كرر هذه الخطوة لاسترداد نقاط النهاية لكل من البرامج النصية feature_engineering و model_scoring.

    ملاحظة: ستحتاج فقط إلى الحصول على نسخة واحدة من رمز النشر. سيكون هو نفسه لجميع عمليات النشر داخل هذا المشروع.

    11. تعديل البرامج النصية في Watson Studio Local

    بمجرد أن نجمع نقاط نهاية النشر والرمز المميز للنشر ، نحتاج إلى العودة إلى وضع Watson Studio المحلي حتى نتمكن من تعديل البرامج النصية واختبارها.

    انتقل إلى قائمة الأصول الخاصة بالمشروع ، وحدد البرامج النصية. انقر فوق ملف نصي لفتحه في وضع التحرير.

    البرامج النصية التي سنقوم بتعديلها هي تلك التي تشير إلى كائنات النشر. هؤلاء هم:

    • بالنسبة إلى البرنامج النصي model_scoring ، استبدل قيمتي الرمز المميز ونقطة النهاية ، ثم احفظ الإصدار الجديد من البرنامج النصي.

    بالنسبة إلى البرنامج النصي extract_and_score ، استبدل قيمتي الرمز المميز ونقطة النهاية. قيم نقطة النهاية مخصصة للنصوص البرمجية للنشر feature_engineering و model_scoring.

    هام: ستنتهي نقاط النهاية بالسلسلة / المشغل. احذف هذا الجزء من عنوان URL حيث سيقوم البرنامج النصي بإلحاق إما / المشغل أو / الحالة بنقاط النهاية ، حسب الحاجة.

    قم بالإنهاء بحفظ الإصدار الجديد من البرنامج النصي عن طريق النقر على أيقونة حفظ الموجودة في أعلى الجانب الأيمن من الصفحة.

    12. قم بتشغيل البرامج النصية محليًا للاختبار

    لتجنب الاضطرار إلى الانتقال بين Watson Studio Local و Watson Machine Learning (والذي يتضمن إعادة النشر وإنشاء إصدارات جديدة) ، تأكد من تشغيل البرامج النصية محليًا في Watson Studio Local أولاً.

    يمكن تشغيل البرامج النصية إما من لوحة التفاصيل الخاصة بالبرنامج النصي أو من محرر البرنامج النصي.

    تشغيل كوظيفة من لوحة تفاصيل البرنامج النصي:

    ابدأ بالبرنامج النصي feature_engineering. استخدم شريط القائمة على الجانب الأيمن من صف البرنامج النصي لإنشاء وظيفة وتشغيل البرنامج النصي.

    في لوحة Create Job run ، أدخل اسمًا فريدًا وتأكد من استخدام الخيارات التالية:

    • النوع: تشغيل البرنامج النصي
    • العامل: Python 3
    • أصل المصدر: /scripts/feature_engineering.py
    • وسيطات سطر الأوامر: v1
    • مجدولة للتشغيل: عند الطلب

    بعد الضغط على زر إنشاء ، سترى لوحة التشغيل.

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

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

    ملاحظة: سيكون لملفات البيانات التي تم إنشاؤها (الهدف والميزات) علامة إصدار ملحقة بأسمائها. هذا يطابق وسيطة سطر الأوامر التي مررناها في البرنامج النصي.

    قم بالتشغيل بشكل تفاعلي من محرر البرنامج النصي

    • من صفحة المشروع ، انقر على البرامج النصية في قائمة الأصول ، ثم انقر على النص البرمجي feature_engineering في القائمة. سيؤدي هذا إلى إظهار محرر النص.

    انقر فوق الزر تشغيل التكوين في شريط الأدوات ثم قم بإضافة v1 كوسيطة لسطر الأوامر.

    اسحب رمز التحجيم الموجود على الجانب الأيمن من اللوحة لفتح سجل وحدة التحكم. ثم ابدأ البرنامج النصي بالنقر فوق الزر Run - & gt Run as job في شريط الأدوات.

    سيبدأ البرنامج النصي في تنفيذ وعرض الإخراج في سجل وحدة التحكم.

    باستخدام أي من الطريقتين ، كرر هذه العملية لتشغيل البرنامج النصي model_scoring ، ثم البرنامج النصي extract_and_score.

    ملاحظة: سيفشل البرنامج النصي extract_and_score عندما يحاول التحقق من حالة البرنامج النصي model_scoring. تذكر أنه يستدعي البرامج النصية الأخرى عن طريق استدعاء نقاط النهاية الخاصة بهم والتي يتم نشرها في Watson Machine Learning. تكمن المشكلة في أن هذه البرامج النصية التي تم نشرها لا تحتوي على معلومات نقطة النهاية المحدثة حتى الآن ، ولن يتم ذلك حتى ندفع تغييراتنا مرة أخرى إلى نموذج إصدار Watson Machine Learning (وهو ما سنفعله بعد ذلك).

    بمجرد التحقق من البرامج النصية ، التزم وادفع التغييرات إلى Watson Studio Master Repository ، كما هو موضح أعلاه في الخطوة رقم 5. تأكد من رفع رقم الإصدار.

    13. قم بإدارة النموذج الخاص بك باستخدام IBM Watson Machine Learning

    قم بتشغيل IBM Watson Machine Learning بتحديده من القائمة المنسدلة الرئيسية في الصفحة الرئيسية لـ Watson Studio Local.

    نحتاج أولاً إلى تحديث مشروع الإصدار الخاص بنا للحصول على أحدث إصدارات البرامج النصية الخاصة بنا.

    من الصفحة الرئيسية لـ Watson Machine Learning ، انقر فوق مربع المشروع الخاص بنا.

    من صف الرموز المدرجة في لافتة الصفحة ، انقر فوق أيقونة التحديث.

    من شاشة التحديث ، استخدم القائمة المنسدلة لمشروع المصدر لتحديد مشروع Watson Studio المحلي الخاص بنا. ثم حدد علامة الإصدار المرتبطة بأحدث التزام.

    الآن بعد أن تم تحديث جميع أصولنا ، يمكننا بالفعل إدارة نموذجنا من خلال تتبع استخدامه وأدائه.

    لبدء دحرجة الكرة ، لنبدأ بتشغيل البرنامج النصي extract_and_score الخاص بنا. كما أوضحنا سابقًا ، سيتم قراءة هذا في ملف النبيذ csv الحالي وتحويله ، ثم تسجيل كل نبيذ وفقًا لنموذجنا.

    • من صفحة الأصل ، حدد extract_and_score script. من صفحة التفاصيل ، انقر فوق اسم البرنامج النصي لإظهار صفحة بدء البرنامج النصي. ثم انقر فوق علامة التبويب API.

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

    لتشغيل البرنامج النصي ، انقر فوق علامة التبويب "نظرة عامة" وانتقل لأسفل إلى قسم التشغيل بالصفحة. ثم انقر فوق زر التشغيل الآن.

    من مربع حوار البدء ، أدخل اسمًا ، وقم بتعديل وسيطة سطر الأوامر إذا لزم الأمر ، ثم انقر فوق الزر تشغيل.

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

    من لوحة المعلومات الرئيسية ، يمكنك أيضًا أن ترى أن البرنامج النصي قد اكتمل بنجاح ، ولاحظ أيضًا أنه في حالة نص الاستخراج والتسجيل ، تم إطلاق ثلاث وظائف منفصلة (النص الرئيسي ، والنصان المطلوبان).

    إذا اكتمل البرنامج النصي بنجاح ، فيجب أن يكون هناك ثلاثة ملفات بيانات ذات إصدارات يجب إضافتها كأصول لمجموعات البيانات في المشروع. يحتوي ملف scoring_output-v1 على درجات تصنيف النبيذ النهائية.

    فيما يلي ارتباطات لكل من دفاتر الملاحظات مع إخراج مثال:

    • أنماط كود تحليلات البيانات: هل استمتعت بنمط الشفرة هذا؟ تحقق من أنماط كود تحليلات البيانات الأخرى
    • قائمة تشغيل نمط رمز البيانات والذكاء الاصطناعي: ضع إشارة مرجعية على قائمة التشغيل الخاصة بنا بكل مقاطع الفيديو الخاصة بنمط الشفرة
    • استوديو واتسون: إتقان فن علم البيانات باستخدام Watson Studio الخاص بشركة IBM
    • شرارة على IBM Cloud: هل تحتاج إلى كتلة سبارك؟ قم بإنشاء ما يصل إلى 30 منفذ Spark على IBM Cloud مع خدمة Spark الخاصة بنا

    تم ترخيص نمط الرمز هذا بموجب ترخيص برنامج Apache ، الإصدار 2. يتم ترخيص كائنات رمز الطرف الثالث المنفصلة التي يتم استدعاؤها ضمن نمط الرمز هذا من قِبل موفريها وفقًا لتراخيص منفصلة خاصة بهم. تخضع المساهمات لشهادة المنشأ المطور ، الإصدار 1.1 (DCO) وترخيص برنامج Apache ، الإصدار 2.


    Keras ImageDataGenerator وزيادة البيانات

    2020-06-04 تحديث: منشور المدونة هذا متوافق الآن مع TensorFlow 2+!

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

    سأغطي بعد ذلك الأنواع الثلاثة لزيادة البيانات التي ستراها عند تدريب الشبكات العصبية العميقة:

    1. إنشاء مجموعة البيانات وتوسيع البيانات عبر زيادة البيانات (أقل شيوعًا)
    2. زيادة البيانات في المكان / أثناء الطيران (الأكثر شيوعًا)
    3. الجمع بين إنشاء مجموعة البيانات والتكبير الموضعي

    من هناك سأعلمك كيفية تطبيق زيادة البيانات على مجموعات البيانات الخاصة بك (باستخدام جميع الطرق الثلاثة) باستخدام فئة ImageDataGenerator الخاصة بـ Keras.

    ما هي زيادة البيانات؟

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

    هدفنا عند تطبيق زيادة البيانات هو زيادة تعميم النموذج.

    نظرًا لأن شبكتنا تشهد باستمرار إصدارات جديدة ومعدلة قليلاً من بيانات الإدخال ، فإن الشبكة قادرة على تعلم المزيد من الميزات القوية.

    في وقت الاختبار ، لا نطبق زيادة البيانات ونقوم ببساطة بتقييم شبكتنا المدربة على بيانات الاختبار غير المعدلة & # 8212 في معظم الحالات ، سترى زيادة في دقة الاختبار ، ربما على حساب انخفاض طفيف في دقة التدريب.

    مثال بسيط على زيادة البيانات

    الشكل 2: غادر: عينة من 250 نقطة بيانات تتبع التوزيع الطبيعي بالضبط. حق: إضافة كمية صغيرة من "الارتعاش" العشوائي إلى التوزيع. هذا النوع من زيادة البيانات يزيد من قابلية تعميم شبكاتنا.

    دعونا ننظر الشكل 2 (غادر) لتوزيع عادي بمتوسط ​​صفر وتباين وحدة.

    قد يؤدي تدريب نموذج التعلم الآلي على هذه البيانات إلى نمذجة التوزيع بالضبط & # 8212 ومع ذلك ، في تطبيقات العالم الحقيقي ، نادراً ما تتبع البيانات مثل هذا التوزيع اللطيف والأنيق.

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

    مؤامرة لدينا لا تزال تتبع تقريبا التوزيع الطبيعي ، لكنه ليس ملف في احسن الاحوال التوزيع على اليسار.

    النموذج الذي تم تدريبه على هذه البيانات المعززة المعدلة من المرجح أن يتم تعميمه على أمثلة نقاط البيانات غير المدرجة في مجموعة التدريب.

    الرؤية الحاسوبية وزيادة البيانات

    الشكل 3: في رؤية الكمبيوتر ، تقوم زيادة البيانات بمعالجة عشوائية على الصور. يتم تطبيقه عادةً في ثلاثة سيناريوهات تمت مناقشتها في منشور المدونة هذا.

    في سياق رؤية الكمبيوتر ، تفسح زيادة البيانات نفسها بشكل طبيعي.

    على سبيل المثال ، يمكننا الحصول على بيانات مُعزَّزة من الصور الأصلية عن طريق تطبيق تحويلات هندسية بسيطة ، مثل عشوائي:

    1. الترجمات
    2. التناوب
    3. التغييرات في الحجم
    4. قص
    5. ينقلب الأفقي (وفي بعض الحالات عموديًا)

    سيؤدي تطبيق قدر (صغير) من التحولات على صورة إدخال إلى تغيير مظهرها قليلاً ، لكن ذلك يحدث لا قم بتغيير تسمية الفصل & # 8212 مما يجعل زيادة البيانات طريقة طبيعية وسهلة للغاية للتطبيق لمهام رؤية الكمبيوتر.

    ثلاثة أنواع من زيادة البيانات

    هناك ثلاثة أنواع من زيادة البيانات التي من المحتمل أن تواجهها عند تطبيق التعلم العميق في سياق تطبيقات رؤية الكمبيوتر.

    بالضبط ما هو تعريف زيادة البيانات "الصحيح" تعتمد كليا في سياق مشروعك / مجموعة التجارب.

    خذ الوقت الكافي لقراءة هذا القسم بحرص as I see many deep learning practitioners confuse what data augmentation does and does not do.

    Type #1: Dataset generation and expanding an existing dataset (less common)

    الشكل 4: Type #1 of data augmentation consists of dataset generation/dataset expansion. This is a less common form of data augmentation.

    The first type of data augmentation is what I call dataset generation أو dataset expansion.

    As you know machine learning models, and especially neural networks, can require quite a bit of training data — but what if you don’t have very much training data in the first place?

    Let’s examine the most trivial case where you only have one image and you want to apply data augmentation to create an entire dataset of images, all based on that one image.

    To accomplish this task, you would:

    1. Load the original input image from disk.
    2. Randomly transform the original image via a series of random translations, rotations, etc.
    3. Take the transformed image and write it back out to disk.
    4. Repeat steps 2 and 3 a total of N times.

    After performing this process you would have a directory full of randomly transformed “new” images that you could use for training, all based on that single input image.

    This is, of course, an incredibly simplified example.

    You more than likely have more than a single image — you probably have 10s or 100s of images and now your goal is to turn that smaller set into 1000s of images for training.

    In those situations, dataset expansion and dataset generation may be worth exploring.

    But there’s a problem with this approach — we haven’t exactly increased the ability of our model to generalize.

    Yes, we have increased our training data by generating additional examples, but all of these examples are based on a super small dataset.

    Keep in mind that our neural network is only as good as the data it was trained on.

    We cannot expect to train a NN on a small amount of data and then expect it to generalize to data it was never trained on and has never seen before.

    If you find yourself seriously considering dataset generation and dataset expansion, you should take a step back and instead invest your time gathering additional data or looking into methods of behavioral cloning (and then applying the type of data augmentation covered in the “Combining dataset generation and in-place augmentation” section below).

    Type #2: In-place/on-the-fly data augmentation (most common)

    Figure 5: Type #2 of data augmentation consists of on-the-fly image batch manipulations. This is the most common form of data augmentation with Keras.

    The second type of data augmentation is called in-place data augmentation أو on-the-fly data augmentation. This type of data augmentation is what Keras’ ImageDataGenerator class implements.

    Using this type of data augmentation we want to ensure that our network, when trained, sees new variations of our data at each and every epoch.

    Figure 5 demonstrates the process of applying in-place data augmentation:

    1. Step #1: An input batch of images is presented to the ImageDataGenerator .
    2. Step #2: The ImageDataGenerator transforms each image in the batch by a series of random translations, rotations, etc.
    3. Step #3: The randomly transformed batch is then returned to the calling function.

    There are two important points that I want to draw your attention to:

    1. The ImageDataGenerator is ليس returning both the original data and the transformed data — the class only returns the randomly transformed data.
    2. We call this “in-place” and “on-the-fly” data augmentation because this augmentation is done at training time (i.e., we are not generating these examples ahead of time/prior to training).

    When our model is being trained, we can think of our ImageDataGenerator class as “intercepting” the original data, randomly transforming it, and then returning it to the neural network for training, all the while the NN has no idea the data was modified!

    I’ve written previous tutorials on the PyImageSearch blog where readers think that Keras’ ImageDateGenerator class is an “additive operation”, similar to the following (incorrect) figure:

    Figure 6: How Keras data augmentation does ليس work.

    In the above illustration the ImageDataGenerator accepts an input batch of images, randomly transforms the batch, and then returns both the original batch and modified data — again, this is ليس what the Keras ImageDataGenerator does. Instead, the ImageDataGenerator class will return just the randomly transformed data.

    When I explain this concept to readers the next question is often:

    But Adrian, what about the original training data? Why is it not used? Isn’t the original training data still useful for training?

    Keep in mind that the entire point of the data augmentation technique described in this section is to ensure that the network sees “new” images that it has never “seen” before at each and every epoch.

    If we included the original training data along with the augmented data in each batch, then the network would “see” the original training data multiple times, effectively defeating the purpose. Secondly, recall that the overall goal of data augmentation is to increase the generalizability of the model.

    To accomplish this goal we “replace” the training data with randomly transformed, augmented data.

    In practice, this leads to a model that performs better on our validation/testing data but perhaps performs slightly worse on our training data (to due to the variations in data caused by the random transforms).

    You’ll learn how to use the Keras ImageDataGenerator class later in this tutorial.

    Type #3: Combining dataset generation and in-place augmentation

    The final type of data augmentation seeks to combine على حد سواء dataset generation and in-place augmentation — you may see this type of data augmentation when performing behavioral cloning.

    A great example of behavioral cloning can be seen in self-driving car applications.

    Creating self-driving car datasets can be extremely time consuming and expensive — a way around the issue is to instead use video games and car driving simulators.

    Video game graphics have become so life-like that it’s now possible to use them as training data.

    Therefore, instead of driving an actual vehicle, you can instead:

    • Play a video game
    • Write a program to play a video game
    • Use the underlying rendering engine of the video game

    …all to generate actual data that can be used for training.

    Once you have your training data you can go back and apply Type #2 data augmentation (i.e., in-place/on-the-fly data augmentation) to the data you gathered via your simulation.

    Configuring your development environment

    To configure your system for this tutorial, I first recommend following either of these tutorials:

    Either tutorial will help you configure you system with all the necessary software for this blog post in a convenient Python virtual environment.

    Project structure

    Before we dive into the code let’s first review our directory structure for the project:

    First, there are two dataset directories which are not to be confused:

    • dogs_vs_cats_small/ : A subset of the popular Kaggle Dogs vs. Cats competition dataset. In my curated subset, only 2,000 images (1,000 per class) are present (as opposed to the 25,000 images for the challenge).
    • generated_dataset/ : We’ll create this generated dataset using the cat.jpg and dog.jpg images which are in the parent directory. We’ll utilize data augmentation Type #1 to generate this dataset automatically and fill this directory with images.

    Next, we have our pyimagesearch module which contains our implementation of the ResNet CNN classifier.

    Today, we’ll review two Python scripts:

    • train.py : Used to train models for both Type #1 و Type #2 (and optionally Type #3 if the user so wishes) data augmentation techniques. We’ll perform three training experiments resulting in each of the three plot*.png files in the project folder.
    • generate_images.py : Used to generate a dataset from a single image using Type #1.

    Implementing our training script

    In the remainder of this tutorial we’ll be performing three experiments:

    1. Experiment #1: Generate a dataset via dataset expansion and train a CNN on it.
    2. Experiment #2: Use a subset of the Kaggle Dogs vs. Cats dataset and train a CNN بدون data augmentation.
    3. Experiment #3: Repeat the second experiment, but this time with data augmentation.

    All of these experiments will be accomplished using the same Python script.

    Open up the train.py script and let’s get started:

    On Lines 2-18 our necessary packages are imported. Line 10 is our ImageDataGenerator import from the Keras library — a class for data augmentation.

    Our script accepts three command line arguments via the terminal:

    • --dataset : The path to the input dataset.
    • --augment : Whether “on-the-fly” data augmentation should be used (refer to type #2 above). By default, this method is ليس performed.
    • --plot : The path to the output training history plot.

    Let’s proceed to initialize hyperparameters and load our image data:

    Training hyperparameters, including initial learning rate, batch size, and number of epochs to train for, are initialized on Lines 32-34.

    From there Lines 39-53 grab imagePaths , load images, and populate our data and labels lists. The only image preprocessing we perform at this point is to resize each image to 64吼px.

    Next, let’s finish preprocessing, encode our labels, and partition our data:

    On Line 57, we convert data to a NumPy array as well as scale all pixel intensities to the range [0, 1]. This completes our preprocessing.

    From there we perform “one-hot encoding” of our labels (Lines 61-63). This method of encoding our labels results in an array that may look like this:

    For this sample of data, there are two cats ( [1., 0.] ) and five dogs ( [0., 1] ) where the label corresponding to the image is marked as “hot”.

    From there we partition our data into training and testing splits marking 75% of our data for training and the remaining 25% for testing (Lines 67 and 68).

    Now, we are ready to initialize our data augmentation object:

    Line 71 initializes our empty data augmentation object (i.e., no augmentation will be performed). This is the default operation of this script.

    Let’s check if we’re going to override the default with the --augment command line argument:

    Line 75 checks to see if we are performing data augmentation. If so, we re-initialize the data augmentation object with random transformation parameters (Lines 77-84). As the parameters indicate, random rotations, zooms, shifts, shears, and flips will be performed during in-place/on-the-fly data augmentation.

    Let’s compile and train our model:

    2020-06-04 Update: Formerly, TensorFlow/Keras required use of a method called .fit_generator in order to accomplish data augmentation. Now, the .fit method can handle data augmentation as well, making for more-consistent code. This also applies to the migration from .predict_generator to .predict . Be sure to check out my other article fit and fit_generator after you’re done reading this tutorial.

    Lines 88-92 construct our ResNet model using Stochastic Gradient Descent optimization and learning rate decay. We use "binary_crossentropy" loss for this 2-class problem. If you have more than two classes, be sure to use "categorial_crossentropy" .

    Lines 96-100 then train our model. The aug object handles data augmentation in batches (although be sure to recall that the aug object will only perform data augmentation if the --augment command line argument was set).

    Finally, we’ll evaluate our model, print statistics, and generate a training history plot:

    2020-06-04 Update: In order for this plotting snippet to be TensorFlow 2+ compatible the H.history dictionary keys are updated to fully spell out “accuracy” sans “acc” (i.e., H.history["val_accuracy"] and H.history["accuracy"] ). It is semi-confusing that “val” is not spelled out as “validation” we have to learn to love and live with the API and always remember that it is a work in progress that many developers around the world contribute to.

    Line 104 makes predictions on the test set for evaluation purposes. A classification report is printed via Lines 105 and 106.

    From there, Lines 109-120 generate and save an accuracy/loss training plot.

    Generating a dataset/dataset expansion with data augmentation and Keras

    In our first experiment, we will perform dataset expansion via data augmentation with Keras.

    Our dataset will contain 2 classes and initially, the dataset will trivially contain only 1 image per class:

    We’ll utilize Type #1 data augmentation (see the “Type #1: Dataset generation and expanding an existing dataset” section above) to generate a new dataset with 100 images per class:

    Again, this meant to be an example — in a real-world application you would have 100s of example images, but we’re keeping it simple here so you can learn the concept.

    Generating the example dataset

    Before we can train our CNN we first need to generate an example dataset.

    From our “Project Structure” section above you know that we have two example images in our root directory: cat.jpg and dog.jpg . We will use these example images to generate 100 new training images per class (200 images in total).

    To see how we can use data augmentation to generate new examples, open up the generate_images.py file and follow along:

    Lines 2-6 import our necessary packages. Our ImageDataGenerator is imported on Line 2 and will handle our data augmentation with Keras.

    From there, we’ll parse three command line arguments:

    • --image : The path to the input image. We’ll generate additional random, mutated versions of this image.
    • --output : The path to the output directory to store the data augmentation examples.
    • --total : The number of sample images to generate.

    Let’s go ahead and load our image and initialize our data augmentation object:

    Our image is loaded and prepared for data augmentation via Lines 21-23. Image loading and processing is handled via Keras functionality (i.e. we aren’t using OpenCV).

    From there, we initialize the ImageDataGenerator object. This object will facilitate performing random rotations, zooms, shifts, shears, and flips on our input image.

    Next, we’ll construct a Python generator and put it to work until all of our images have been produced:

    We will use the imageGen to randomly transform the input image (Lines 39 and 40). This generator saves images as .jpg files to the specified output directory contained within args["output"] .

    Finally, we’ll loop over examples from our image data generator and count them until we’ve reached the required total number of images.

    To run the generate_examples.py script make sure you have used the “Downloads” section of the tutorial to download the source code and example images.

    From there open up a terminal and execute the following command:

    Check the output of the generated_dataset/cats directory you will now see 100 images:

    Let’s do the same now for the “dogs” class:

    And now check for the dog images:

    A visualization of the dataset generation via data augmentation can be seen in Figure 6 at the top of this section — notice how we have accepted a single input image (of me — not of a dog or cat) and then created 100 new training examples (48 of which are visualized) from that single image.

    Experiment #1: Dataset generation results

    We are now ready to perform our first experiment:

    Figure 8: Data augmentation with Keras Experiment #1 training accuracy/loss results.

    Our results show that we were able to obtain 100% accuracy with little effort.

    Of course, this is a trivial, contrived example. In practice, you would not be taking only a single image and then building a dataset of 100s or 1000s of images via data augmentation. Instead, you would have a dataset of 100s of images and then you would apply dataset generation to that dataset — but again, the point of this section was to demonstrate on a simple example so you could understand the process.

    Training a network with in-place data augmentation

    The more popular form of (image-based) data augmentation is called in-place data augmentation (see the “Type #2: In-place/on-the-fly data augmentation” section of this post for more details).

    When performing in-place augmentation our Keras ImageDataGenerator will:

    1. Accept a batch of input images.
    2. Randomly transform the input batch.
    3. Return the transformed batch to the network for training.

    We’ll explore how data augmentation can reduce overfitting and increase the ability of our model to generalize via two experiments.

    To accomplish this task we’ll be using a subset of the Kaggle Dogs vs. Cats dataset:

    We’ll then train a variation of ResNet, from scratch, on this dataset with and without data augmentation.

    Experiment #2: Obtaining a baseline (no data augmentation)

    In our first experiment we’ll perform no data augmentation:

    Looking at the raw classification report you’ll see that we’re obtaining 64% accuracybut there’s a problem!

    Take a look at the plot associated with our training:

    Figure 9: For Experiment #2 we did not perform data augmentation. The result is a plot with strong indications of overfitting.

    There is dramatic overfitting occurring — at approximately epoch 15 we see our validation loss start to rise while training loss continues to fall. By epoch 20 the rise in validation loss is especially pronounced.

    This type of behavior is indicative of overfitting.

    The solution is to (1) reduce model capacity, and/or (2) perform regularization.

    Experiment #3: Improving our results (with data augmentation)

    Let’s now investigate how data augmentation can act as a form of regularization:

    We’re now up to 69% accuracy, an increase from our previous 64% accuracy.

    But more importantly, we are no longer overfitting:

    Figure 10: For Experiment #3, we performed data augmentation with Keras on batches of images in-place. Our training plot shows no signs of overfitting with this form of regularization.

    Note how validation and training loss are falling together with little divergence. Similarly, classification accuracy for both the training and validation splits are growing together as well.

    By using data augmentation we were able to combat overfitting!

    In nearly all situations, unless you have very good reason not to, you should be performing data augmentation when training your own neural networks.

    ماذا بعد؟ أوصي جامعة PyImageSearch.

    أعتقد بشدة أنه إذا كان لديك المعلم المناسب يمكنك ذلك رئيس رؤية الكمبيوتر والتعلم العميق.

    هل تعتقد أن تعلم رؤية الكمبيوتر والتعلم العميق يجب أن يكون مستهلكًا للوقت ومرهقًا ومعقدًا؟ أم يجب أن تتضمن رياضيات ومعادلات معقدة؟ أو يتطلب شهادة في علوم الكمبيوتر؟

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

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

    ستجد داخل جامعة PyImageSearch:

    • &التحقق من 23 دورة حول رؤية الكمبيوتر الأساسية والتعلم العميق وموضوعات OpenCV
    • & فحص 23 شهادة إتمام
    • &التحقق من 35 س 14 د فيديو عند الطلب
    • &التحقق من تم إصدار دورات تدريبية جديدة تمامًا كل شهر، مما يضمن لك مواكبة أحدث التقنيات
    • &التحقق من دفاتر Jupyter التي تم تكوينها مسبقًا في Google Colab
    • & تحقق من تشغيل جميع أمثلة التعليمات البرمجية في متصفح الويب الخاص بك - يعمل على أنظمة التشغيل Windows و macOS و Linux (لا يلزم تكوين بيئة التطوير!)
    • وتحقق من الوصول إلى مراكز إعادة شراء التعليمات البرمجية المركزية لـ الكل 400+ دروس على PyImageSearch
    • &التحقق من تنزيلات سهلة بنقرة واحدة للرموز ومجموعات البيانات والنماذج المدربة مسبقًا ، إلخ.
    • وتحقق من الوصول على الهاتف المحمول والكمبيوتر المحمول وسطح المكتب وما إلى ذلك.

    How to Use a Learned Embedding for Categorical Data

    A learned embedding, or simply an “embedding,” is a distributed representation for categorical data.

    Each category is mapped to a distinct vector, and the properties of the vector are adapted or learned while training a neural network. The vector space provides a projection of the categories, allowing those categories that are close or related to cluster together naturally.

    This provides both the benefits of an ordinal relationship by allowing any such relationships to be learned from data, and a one hot encoding in providing a vector representation for each category. Unlike one hot encoding, the input vectors are not sparse (do not have lots of zeros). The downside is that it requires learning as part of the model and the creation of many more input variables (columns).

    The technique was originally developed to provide a distributed representation for words, e.g. allowing similar words to have similar vector representations. As such, the technique is often referred to as a word embedding, and in the case of text data, algorithms have been developed to learn a representation independent of a neural network. For more on this topic, see the post:

    An additional benefit of using an embedding is that the learned vectors that each category is mapped to can be fit in a model that has modest skill, but the vectors can be extracted and used generally as input for the category on a range of different models and applications. That is, they can be learned and reused.

    Embeddings can be used in Keras via the Embedding layer.

    For an example of learning word embeddings for text data in Keras, see the post:

    One embedding layer is required for each categorical variable, and the embedding expects the categories to be ordinal encoded, although no relationship between the categories is assumed.

    Each embedding also requires the number of dimensions to use for the distributed representation (vector space). It is common in natural language applications to use 50, 100, or 300 dimensions. For our small example, we will fix the number of dimensions at 10, but this is arbitrary you should experimenter with other values.

    First, we can prepare the input data using an ordinal encoding.

    The model we will develop will have one separate embedding for each input variable. Therefore, the model will take nine different input datasets. As such, we will split the input variables and ordinal encode (integer encoding) each separately using the LabelEncoder and return a list of separate prepared train and test input datasets.

    ال prepare_inputs() function below implements this, enumerating over each input variable, integer encoding each correctly using best practices, and returning lists of encoded train and test variables (or one-variable datasets) that can be used as input for our model later.

    Now we can construct the model.

    We must construct the model differently in this case because we will have nine input layers, with nine embeddings the outputs of which (the nine different 10-element vectors) need to be concatenated into one long vector before being passed as input to the dense layers.

    We can achieve this using the functional Keras API. If you are new to the Keras functional API, see the post:

    First, we can enumerate each variable and construct an input layer and connect it to an embedding layer, and store both layers in lists. We need a reference to all of the input layers when defining the model, and we need a reference to each embedding layer to concentrate them with a merge layer.

    We can then merge all of the embedding layers, define the hidden layer and output layer, then define the model.

    When using a model with multiple inputs, we will need to specify a list that has one dataset for each input, e.g. a list of nine arrays each with one column in the case of our dataset. Thankfully, this is the format we returned from our prepare_inputs() function.

    Therefore, fitting and evaluating the model looks like it does in the previous section.

    Additionally, we will plot the model by calling the plot_model() function and save it to file. This requires that pygraphviz and pydot are installed, which can be a pain on some systems. If you have trouble, just comment out the import statement and call to plot_model().

    Tying this all together, the complete example of using a separate embedding for each categorical input variable in a multi-input layer model is listed below.

    Running the example prepares the data as described above, fits the model, and reports the performance.

    Note: Your results may vary given the stochastic nature of the algorithm or evaluation procedure, or differences in numerical precision. Consider running the example a few times and compare the average outcome.

    In this case, the model performs reasonably well, matching what we saw for the one hot encoding in the previous section.

    As the learned vectors were trained in a skilled model, it is possible to save them and use them as a general representation for these variables in other models that operate on the same data. A useful and compelling reason to explore this encoding.

    To confirm our understanding of the model, a plot is created and saved to the file embeddings.png in the current working directory.

    The plot shows the nine inputs each mapped to a 10 element vector, meaning that the actual input to the model is a 90 element vector.

    Note: Click to the image to see the large version.

    Plot of the Model Architecture With Separate Inputs and Embeddings for each Categorical Variable
    Click to Enlarge.


    X_train, y_train = train_generator.next() X_test, y_test = validation_generator.next()

    X_train, y_train = next(train_generator) X_test, y_test = next(validation_generator)

    As per the above answer, the below code just gives 1 batch of data.

    To extract full data from the train_generator use below code -

    y_train, y_test values will be based on the category folders you have in train_data_dir. Not values will be like 0,1,2,3. mapping to class names in Alphabetical Order.

    Otherwise, use below code to get indices map

    Make sure they both are the same.

    More of an indirect answer, but maybe helpful to some: Here is a script I use to sort test and train images into the respective (sub) folders to work with Keras and the data generator function (MS Windows).


    ملخص

    In this tutorial, you learned how to use the Keras deep learning library for regression.

    Specifically, we used Keras and regression to predict the price of houses based on four numerical and categorical attributes:

    • Number of bedrooms
    • Number of bathrooms
    • Area (i.e., square footage)
    • Zip code

    Overall our neural network obtained a mean absolute percentage error of 22.71%, implying that, on average, our house price predictions will be off by 22.71%.

    That raises the questions:

    • How can we better our house price prediction accuracy?
    • What if we leveraged images for each house? Would that improve accuracy?
    • Is there some way to combine both our categorical/numerical attributes with our image data?

    To answer these questions you’ll need to stay tuned for the remaining to tutorials in this Keras regression series.

    To download the source code to this post (and be notified when the next tutorial is published here on PyImageSearch), just enter your email address in the form below.

    Download the Source Code and FREE 17-page Resource Guide

    Enter your email address below to get a .zip of the code and a FREE 17-page Resource Guide on Computer Vision, OpenCV, and Deep Learning. Inside you'll find my hand-picked tutorials, books, courses, and libraries to help you master CV and DL!

    About the Author

    Hi there, I’m Adrian Rosebrock, PhD. All too often I see developers, students, and researchers wasting their time, studying the wrong things, and generally struggling to get started with Computer Vision, Deep Learning, and OpenCV. I created this website to show you what I believe is the best possible way to get your start.


    Making your model impactful

    Tada! We’ve now made our lead scoring model impactful by sending results directly into Intercom. To get a sense of how this might show up for a sales team member, here you can see each example lead now has a custom attribute listing whether or not they are likely to convert:

    With these labels easily available for each potential lead, a sales team member can start to prioritize their time and pick who they will reach out to first. This will hopefully lead to better efficiency, and more sales for your business! There are many ways to measure the success of these outcomes, but we’ll visit that at another time!


    شاهد الفيديو: Python. Output