{ "info": { "author": "Trung V. Dang", "author_email": "trungv.dang@outlook.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "[!] This code is under development and mainly for my personal use. This project is for fast prototyping of deep learning and machine learning model with minimal code. Some parts of the code may not be well-commented or lack of citation.\n\n# Features\n\n- [ ] Writing minimal code to set up a new experiment\n- [ ] Pytorch or Tensorflow 2.0 or scikit-learn as backend with similar training flow\n- [ ] Efficiently log and analyze model results\n- [ ] GUI for monitoring experiments, either local or remote sever\n\nSee [here](implementations/README.md) for list of implemented models\n\n# Set up an experiment\n\n## Step 1: Folder structure\n\n```\nExperiment/\n|-- model_configs\n|-- model_outputs\n|-- logs\n|-- saved_models\n|-- src\n| |-- datasets\n| | |-- .py\n| |-- models\n| | |-- .py\n|-- README.md\n```\n\nModel parameters and outputs are saved to `./saved_models` and `./model_outputs` unless `DLEX_SAVED_MODELS_PATH` and `DLEX_MODEL_OUTPUTS_PATH` is specified\n\n## Step 2: Define dataset\n\n- `Dataset Builder`: handle downloading and preprocessing data. `DatasetBuilder` should be framework and config independent.\n- `PytorchDataset`, `TensorflowDataset`: handle loading dataset from the storage, shuffle, sort, batchify, etc. using concepts from each framework\n\n```python\nfrom dlex.configs import AttrDict\nfrom dlex.datasets.torch import PytorchDataset\nfrom dlex.datasets.builder import DatasetBuilder\n\nclass SampleDatasetBuilder(DatasetBuilder):\n def __init__(self, params: AttrDict):\n super().__init__(params)\n \n def maybe_download_and_extract(self, force=False):\n super().maybe_download_and_extract(force)\n # Download dataset...\n # self.download_and_extract([some url], self.get_raw_data_dir())\n \n def maybe_preprocess(self, force=False):\n super().maybe_preprocess(force)\n # Preprocess data...\n \n def get_pytorch_wrapper(self, mode: str):\n return PytorchSampleDataset(self, mode)\n\nclass PytorchSampleDataset(PytorchDataset):\n def __init__(self, builder, mode):\n super().__init__(builder, mode)\n # Load data from preprocessed files...\n```\n\n## Step 3: Construct model\n\nModel supports loss calculation, training, predicting and outputting prediction to specified format.\n\n```python\nfrom dlex.torch.models.base import BaseModel\n\nclass Model(BaseModel):\n def __init__(self, params, dataset):\n super().__init__(params, dataset)\n\n def infer(self, batch):\n ...\n\n def forward(self, batch):\n ...\n\n def loss(self, batch):\n ...\n```\n\n## Step 4: Configuration\n\n#### Model\n\n#### Dataset\n\n#### Train\n\n- `batch_size`: `int` or `dict` of `{ [progress]: [batch_size] }` (`0` as key must always be included)\n\n- `num_epochs`\n\n- `optimizer`: `dict` of name and optimizer's arguments. Support `sgd`, `adam`, `adadelta`.\n\n#### Test\n\n- `batch_size`: `int`. Training batch size value is used if not specified.\n\n```yaml\nmodel:\n name: {model import path}\n ...{model configs}\ndataset:\n name: {dataset import path}\n ...{dataset configs}\ntrain:\n batch_size: 256\n num_epochs: 30\n optimizer:\n name: adam\n learning_rate: 0.01\n weight_decay: 1e-5\n```\n## Step 5: Train & evaluate\n\n```bash\ndlex train \ndlex evaluate \ndlex infer \n```\n\n## Environment Variables\n\n- `DLEX_TMP_PATH` (default: `~/tmp`)\n- `DLEX_DATASETS_PATH` (default: `~/tmp/dlex/datasets`)\n- `DLEX_SAVED_MODELS_PATH` (default: `./saved_models`)", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/trungd/dlex", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "dlex", "package_url": "https://pypi.org/project/dlex/", "platform": "", "project_url": "https://pypi.org/project/dlex/", "project_urls": { "Homepage": "https://github.com/trungd/dlex" }, "release_url": "https://pypi.org/project/dlex/0.0.1/", "requires_dist": null, "requires_python": "", "summary": "Deep learning library for research experiments", "version": "0.0.1" }, "last_serial": 5852723, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "98954166d2ee1a614ec3b1d69bb62bcc", "sha256": "d441840304ea755db63c0e4fa28e5ae292b7ccdcec72b269b0c4fec4261c0ad4" }, "downloads": -1, "filename": "dlex-0.0.1.tar.gz", "has_sig": false, "md5_digest": "98954166d2ee1a614ec3b1d69bb62bcc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41030, "upload_time": "2019-09-18T21:49:17", "url": "https://files.pythonhosted.org/packages/9b/16/be798a87c37fbd8aa7f648063c9497f2187f438b33d432e15d7cffd4e84c/dlex-0.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "98954166d2ee1a614ec3b1d69bb62bcc", "sha256": "d441840304ea755db63c0e4fa28e5ae292b7ccdcec72b269b0c4fec4261c0ad4" }, "downloads": -1, "filename": "dlex-0.0.1.tar.gz", "has_sig": false, "md5_digest": "98954166d2ee1a614ec3b1d69bb62bcc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41030, "upload_time": "2019-09-18T21:49:17", "url": "https://files.pythonhosted.org/packages/9b/16/be798a87c37fbd8aa7f648063c9497f2187f438b33d432e15d7cffd4e84c/dlex-0.0.1.tar.gz" } ] }