โครงสร้างและส่วนพื้นฐานบางส่วนของรหัสนี้ได้รับการดัดแปลงจากการเรียนรู้อย่างลึกซึ้งสแต็คเต็มรูปแบบ (FSDL)
คุณสามารถเห็นโครงการนี้ดำเนินการในการสาธิตและโพสต์มาพร้อมกับหรือเรียกใช้รหัสในสมุดบันทึกนี้
โฟลเดอร์ /cloud เลียนแบบการจัดเก็บข้อมูลในคลาวด์ ในการตั้งค่าในโลกแห่งความเป็นจริงชุดข้อมูลจะถูกเก็บไว้ในบริการจัดเก็บข้อมูลบนคลาวด์เช่น Amazon S3 รหัสจริงอาศัยอยู่ในโฟลเดอร์ /codebase มีการแยกที่ชัดเจนระหว่างรหัสการฝึกอบรม (ภายใต้ /codebase/training ) และทุกอย่างอื่น ๆ รวมถึงรุ่นเครือข่ายชุดข้อมูลและยูทิลิตี้อื่น ๆ (ภายใต้ /codebase/font_classifier ) การแยกนี้ทำให้การปรับใช้ระบบง่ายขึ้นและสะอาดขึ้น
ดังที่นำเสนอในหลักสูตร FSDL เพื่อควบคุมข้อมูลเราไม่ได้ตรวจสอบภาพจริงใน Git แต่ไฟล์ JSON ถูกสร้างขึ้นที่มีหนึ่งรายการต่ออินสแตนซ์ข้อมูล แต่ละรายการประกอบด้วย URL อินสแตนซ์ข้อมูล (ที่เก็บข้อมูลคลาวด์), ฉลากและข้อมูลเมตาอื่น ๆ หากเกี่ยวข้อง ไฟล์ JSON นี้เป็นสิ่งที่ได้รับการติดตามโดย GIT และดังนั้นเราจึงสามารถรับข้อมูลได้ในเวอร์ชันที่ต้องการโดยการตรวจสอบ GIT ที่เกี่ยวข้อง เมื่อชุดข้อมูลมีขนาดใหญ่ขึ้นขนาดของไฟล์ JSON จะใหญ่ขึ้นซึ่งในกรณีนี้สามารถใช้ GIT-LFS ได้ ประโยชน์ของวิธีการจัดการข้อมูลนี้:
ความสามารถในการทำซ้ำ: เนื่องจากมีการติดตามโดย Git เราจึงสามารถรับข้อมูลที่แน่นอนที่เราใช้เมื่อสัปดาห์ที่แล้วหรือเมื่อปีที่แล้ว
ความสามารถในการขยาย: ชุดข้อมูลสามารถขยายเพื่อรวมข้อมูลใหม่ในขณะที่ตรวจสอบให้แน่ใจว่าไม่เคยใช้อินสแตนซ์ชุดทดสอบก่อนหน้านี้เป็นอินสแตนซ์การฝึกอบรมและ Vise Versa
การพกพา: ลดพื้นที่ดิสก์ที่จำเป็นสำหรับโครงการซึ่งทำให้พกพาได้มากกว่า Git หรือวิธีการอื่น ๆ
เพื่อเรียกใช้รหัสในพื้นที่:
การติดตั้งข้อกำหนด:
$ pip install -r requirements.txtดึงข้อมูลและแยกข้อมูลจากรุ่นไปยัง /คลาวด์โฟลเดอร์:
$ 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' config ใน 'train_args' ใช้หนึ่งในสองค่า: 'val' หรือ 'test'
ในโหมด 'val' : โมเดลได้รับการฝึกฝนและตรวจสอบความถูกต้องในข้อมูลสังเคราะห์เท่านั้น หาก 'validate_mismatch' ถูกตั้งค่าเป็นจริงการตรวจสอบความถูกต้องของข้อมูลเพิ่มเติมจะดำเนินการในชุดย่อยของข้อมูลจริง
ในโหมด '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]