يتم تكييف الهيكل وبعض الأجزاء الأساسية من هذا الرمز من التعلم العميق الكامل (FSDL).
يمكنك رؤية هذا المشروع في العمل في العرض التجريبي المصاحب والنشر ، أو تشغيل الرمز في هذا الكمبيوتر الدفتري.
يقلد المجلد /cloud تخزين البيانات في السحابة. في إعدادات العالم الحقيقي ، سيتم تخزين مجموعة البيانات على خدمة التخزين السحابية مثل Amazon S3. يعيش الرمز الفعلي في مجلد /codebase . هناك فصل واضح بين رمز التدريب (تحت /codebase/training ) وكل شيء آخر بما في ذلك النماذج والشبكات ومجموعات البيانات وغيرها من المرافق (تحت /codebase/font_classifier ). هذا الانفصال يجعل نشر النظام أسهل ونظافة.
كما هو موضح في دورة FSDL ، إلى الإصدار التحكم في البيانات ، لا نتحقق من الصور الفعلية في GIT. بدلاً من ذلك ، يتم إنشاء ملف JSON يحتوي على إدخال واحد لكل مثيل بيانات. يتكون كل إدخال من عنوان URL لمثيل البيانات (التخزين السحابي) ، والتسمية ، والبيانات الوصفية الأخرى إذا كانت ذات صلة. ملف JSON هذا هو ما يتم تتبعه بواسطة GIT ، وبالتالي يمكننا الحصول على البيانات في الإصدار المطلوب من خلال التحقق من الالتزام GIT المقابل. مع زيادة حجم مجموعة البيانات ، يصبح حجم ملف JSON أكبر ، وفي هذه الحالة يمكن استخدام GIT-LFS. فوائد هذه الطريقة للتعامل مع البيانات:
استنساخ: نظرًا لأنه يتم تتبعه بواسطة GIT ، يمكننا الحصول على البيانات الدقيقة التي استخدمناها قبل أسبوع أو قبل عام.
تمديد القابلية: يمكن توسيع مجموعة البيانات لدمج بيانات جديدة مع التأكد من عدم استخدام مثيلات الاختبار السابقة كحالات تدريبية والعكس بالعكس.
قابلية النقل: يقلل من مساحة القرص المطلوبة للمشروع ، مما يجعله محمولًا على GIT أو أي وسيلة أخرى.
لتشغيل الرمز محليًا:
متطلبات التثبيت:
$ pip install -r requirements.txtجلب واستخراج البيانات من الإصدارات إلى /Cloud Folder:
$ wget ' https://github.com/mhmoodlan/arabic-font-classification/releases/download/v0.1.0/rufa.tar.gz ' -O ./cloud/rufa.tar.gz
$ cd /cloud && tar -xzf ' rufa.tar.gz ' تدور خادم بسيط في المجلد /cloud على http://0.0.0.0:8000/:
$ cd /cloud && python -m http.serverقم بإجراء تجربة:
$ cd /codebase/code && export PYTHONPATH=. && python training/run_experiment.py --save
' {"dataset": "RuFaDataset", "model": "FontModel", "network": "cnn", "train_args": {"epochs": 6, "mode": "test", "validate_mismatch": "False"}} ' يأخذ تكوين 'mode' في 'train_args' واحدة من قيمتين: 'val' أو 'test' .
في وضع 'val' : يتم تدريب النموذج والتحقق من صحته على البيانات الاصطناعية فقط. إذا تم تعيين 'validate_mismatch' على TRUE ، فسيتم إجراء مزيد من التحقق من صحة عدم التطابق على مجموعة فرعية من البيانات الحقيقية.
في وضع 'test' : يتم تدريب النموذج على البيانات الاصطناعية بأكملها + جزء من البيانات الحقيقية المستخدمة في التحقق من صحة عدم تطابق البيانات في وضع 'val' . بعد التدريب ، تم الإبلاغ عن خطأ التعميم النهائي في بقية البيانات الحقيقية.
يجب أن يخرج هذا الأمر شيئًا مشابهًا لما يلي:
Epoch 1/6
1254/1254 [==============================] - 119s 95ms/step - loss: 0.3185 - accuracy: 0.8751
Epoch 2/6
1254/1254 [==============================] - 40s 32ms/step - loss: 0.0539 - accuracy: 0.9918
Epoch 3/6
1254/1254 [==============================] - 40s 32ms/step - loss: 0.0386 - accuracy: 0.9953
Epoch 4/6
1254/1254 [==============================] - 40s 32ms/step - loss: 0.0270 - accuracy: 0.9976
Epoch 5/6
1254/1254 [==============================] - 40s 32ms/step - loss: 0.0264 - accuracy: 0.9973
Epoch 6/6
1254/1254 [==============================] - 40s 32ms/step - loss: 0.0246 - accuracy: 0.9979
Training took 323.854642 s
In test mode, mismatch data isn't validated since it's used during training.
14/14 [==============================] - 0s 10ms/step - loss: 0.2316 - accuracy: 0.9712
Test score: [0.2316255271434784, 0.971222996711731]