Структура и некоторые фундаментальные части этого кода адаптированы из полного стека глубокого обучения (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Прибрать и извлечь данные из выпусков в /облачную папку:
$ 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]