このコードの構造といくつかの基本部分は、完全なスタックディープラーニング(FSDL)から適合しています。
このプロジェクトは、付随するデモと投稿で動作しているか、このノートブックでコードを実行できます。
/cloudフォルダーは、クラウドにデータの保存を模倣します。実際の設定では、データセットはAmazon S3などのクラウドストレージサービスに保存されます。実際のコードは/codebaseフォルダーにあります。トレーニングコード( /codebase/training )と、モデル、ネットワーク、データセット、その他のユーティリティ( /codebase/font_classifier )を含む他のすべてのものとの間には明確な分離があります。この分離により、システムの展開が容易でクリーンになります。
FSDLコースで提示されているように、バージョンデータを制御するには、GITの実際の画像を確認しません。代わりに、データインスタンスごとに1つのエントリを含むJSONファイルが作成されます。各エントリは、関連する場合は、データインスタンスURL(クラウドストレージ)、ラベル、およびその他のメタデータで構成されています。このJSONファイルはGITによって追跡されるものであるため、対応するGITコミットをチェックすることで、必要なバージョンでデータを取得できます。データセットが大きくなると、JSONファイルのサイズが大きくなります。その場合、Git-LFを使用できます。データの取り扱い方法の利点:
再現性: GITで追跡されているため、1週間前または1年前に使用した正確なデータを取得できます。
拡張可能性:データセットを拡張して新しいデータを組み込むことができ、トレーニングインスタンスとして以前のテストセットインスタンスを使用しないようにし、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 ' http://0.0.0.0:8000/の/cloudフォルダーでシンプルなサーバーをスピンします。
$ 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"}} ' 'train_args'の'mode'構成は、 'val'または'test'の2つの値のいずれかを取得します。
'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]