Struktur dan beberapa bagian mendasar dari kode ini diadaptasi dari Full Stack Deep Learning (FSDL).
Anda dapat melihat proyek ini beraksi dalam demo dan posting yang disertai, atau menjalankan kode di buku catatan ini.
Folder /cloud meniru menyimpan data di cloud. Dalam pengaturan dunia nyata, dataset akan disimpan pada layanan penyimpanan cloud seperti Amazon S3. Kode aktual tinggal di folder /codebase . Ada pemisahan yang jelas antara kode pelatihan (di bawah /codebase/training ) dan segala sesuatu termasuk model, jaringan, set data, dan utilitas lainnya (di bawah /codebase/font_classifier ). Pemisahan ini membuat penyebaran sistem lebih mudah dan lebih bersih.
Seperti yang disajikan dalam kursus FSDL, untuk mengontrol versi data, kami tidak memeriksa gambar aktual di git. Sebaliknya, file JSON dibuat yang berisi satu entri per instance data. Setiap entri terdiri dari URL instance data (penyimpanan cloud), label, dan metadata lainnya jika relevan. File JSON inilah yang dilacak oleh GIT dan oleh karena itu kami bisa mendapatkan data pada versi yang diperlukan dengan memeriksa komit git yang sesuai. Saat dataset semakin besar, ukuran file JSON semakin besar, dalam hal ini GIT-LF dapat digunakan. Manfaat dari cara menangani data ini:
Reproduksibilitas: Karena dilacak oleh Git, kami bisa mendapatkan data yang tepat yang kami gunakan seminggu yang lalu atau setahun yang lalu.
Perluasan: Dataset dapat diperluas untuk menggabungkan data baru sambil memastikan untuk tidak pernah menggunakan instance tes sebelumnya sebagai instance pelatihan dan vise versa.
Portabilitas: Mengurangi ruang disk yang diperlukan untuk proyek, yang membuatnya portabel di atas git atau cara lain.
Untuk menjalankan kode secara lokal:
Instal Persyaratan:
$ pip install -r requirements.txtAmbil dan ekstrak data dari rilis ke /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 ' Putar server sederhana di folder /cloud di http://0.0.0.0:8000/:
$ cd /cloud && python -m http.serverJalankan eksperimen:
$ 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"}} ' Konfigurasi 'mode' di 'train_args' mengambil salah satu dari dua nilai: 'val' atau 'test' .
Dalam mode 'val' : Model dilatih dan divalidasi hanya pada data sintetis. Jika 'validate_mismatch' diatur ke True, validasi ketidakcocokan data lebih lanjut dilakukan pada subset dari data nyata.
Dalam mode 'test' : Model dilatih pada seluruh data sintetis + bagian dari data nyata yang digunakan dalam validasi ketidakcocokan data dalam mode 'val' . Setelah pelatihan, kesalahan generalisasi akhir dilaporkan pada sisa data nyata.
Perintah ini harus menghasilkan sesuatu yang mirip dengan yang berikut:
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]