{ "info": { "author": "Michael Petrochuk", "author_email": "petrochukm@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: Science/Research", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Scientific/Engineering :: Mathematics", "Topic :: Software Development", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "

\n\n

Extensible and Fault-Tolerant Hyperparameter Management

\n\nHParams is a thoughtful approach to configuration management for machine learning projects. It\nenables you to externalize your hyperparameters into a configuration file. In doing so, you can\nreproduce experiments, iterate quickly, and reduce errors.\n\n**Features:**\n\n- Approachable and easy-to-use API\n- Battle-tested over three years\n- Fast with little to no runtime overhead (< 3e-05 seconds) per configured function\n- Robust to most use cases with 100% test coverage and 75 tests\n- Lightweight with only one dependency\n\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/hparams.svg?style=flat-square)\n[![Codecov](https://img.shields.io/codecov/c/github/PetrochukM/HParams/master.svg?style=flat-square)](https://codecov.io/gh/PetrochukM/HParams)\n[![Downloads](http://pepy.tech/badge/hparams)](http://pepy.tech/project/hparams)\n[![Build Status](https://img.shields.io/travis/PetrochukM/HParams/master.svg?style=flat-square)](https://travis-ci.org/PetrochukM/HParams)\n[![License: MIT](https://img.shields.io/badge/License-MIT-brightgreen.svg?style=flat-square)](https://opensource.org/licenses/MIT)\n[![Twitter: PetrochukM](https://img.shields.io/twitter/follow/MPetrochuk.svg?style=social)](https://twitter.com/MPetrochuk)\n\n_Logo by [Chloe Yeo](http://www.yeochloe.com/), Corporate Sponsorship by [WellSaid Labs](https://wellsaidlabs.com/)_\n\n## Installation\n\nMake sure you have Python 3. You can then install `hparams` using `pip`:\n\n```bash\npip install hparams\n```\n\nInstall the latest code via:\n\n```bash\npip install git+https://github.com/PetrochukM/HParams.git\n```\n\n## Oops \ud83d\udc1b\n\nWith HParams, you will avoid common but needless hyperparameter mistakes. It will throw a warning\nor error if:\n\n- A hyperparameter is overwritten.\n- A hyperparameter is declared but not set.\n- A hyperparameter is set but not declared.\n- A hyperparameter type is incorrect.\n\nFinally, HParams is built with developer experience in mind. HParams includes 13 errors and 6 warnings\nto help catch and resolve issues quickly.\n\n## Examples\n\nAdd HParams to your project by following one of these common use cases:\n\n### Configure Training \ud83e\udd17\n\nConfigure your training run, like so:\n\n```python\n# main.py\nfrom hparams import configurable, add_config, HParams, HParam\nfrom typing import Union\n\n@configurable\ndef train(batch_size: Union[int, HParam]=HParam(int)):\n pass\n\nclass Model():\n\n @configurable\n def __init__(self, hidden_size=HParam(int), dropout=HParam(float)):\n pass\n\nadd_config({ 'main': {\n 'train': HParams(batch_size=32),\n 'Model.__init__': HParams(hidden_size=1024, dropout=0.25),\n}})\n```\n\nHParams supports optional configuration typechecking to help you find bugs! \ud83d\udc1b\n\n### Set Defaults\n\nConfigure PyTorch and Tensorflow defaults to match via:\n\n```python\nfrom torch.nn import BatchNorm1d\nfrom hparams import configurable, add_config, HParams\n\n# NOTE: `momentum=0.01` to match Tensorflow defaults\nBatchNorm1d.__init__ = configurable(BatchNorm1d.__init__)\nadd_config({ 'torch.nn.BatchNorm1d.__init__': HParams(momentum=0.01) })\n```\n\nConfigure your random seed globally, like so:\n\n```python\n# config.py\nimport random\nfrom hparams import configurable, add_config, HParams\n\nrandom.seed = configurable(random.seed)\nadd_config({'random.seed': HParams(a=123)})\n```\n\n```python\n# main.py\nimport config\nimport random\n\nrandom.seed()\n```\n\n### CLI\n\nExperiment with hyperparameters through your command line, for example:\n\n```console\nfoo@bar:~$ file.py --torch.optim.adam.Adam.__init__ 'HParams(lr=0.1,betas=(0.999,0.99))'\n```\n\n```python\nimport sys\nfrom torch.optim import Adam\nfrom hparams import configurable, add_config, parse_hparam_args\n\nAdam.__init__ = configurable(Adam.__init__)\nparsed = parse_hparam_args(sys.argv[1:]) # Parse command line arguments\nadd_config(parsed)\n```\n\n### Hyperparameter optimization\n\nHyperparameter optimization is easy to-do, check this out:\n\n```python\nimport itertools\nfrom torch.optim import Adam\nfrom hparams import configurable, add_config, HParams\n\nAdam.__init__ = configurable(Adam.__init__)\n\ndef train(): # Train the model and return the loss.\n pass\n\nfor betas in itertools.product([0.999, 0.99, 0.9], [0.999, 0.99, 0.9]):\n add_config({Adam.__init__: HParams(betas=betas)}) # Grid search over the `betas`\n train()\n```\n\n### Track Hyperparameters\n\nEasily track your hyperparameters using tools like [Comet](comet.ml).\n\n```python\nfrom comet_ml import Experiment\nfrom hparams import get_config\n\nexperiment = Experiment()\nexperiment.log_parameters(get_config())\n```\n\n### Multiprocessing: Partial Support\n\nExport a Python `functools.partial` to use in another process, like so:\n\n```python\nfrom hparams import configurable, HParam\n\n@configurable\ndef func(hparam=HParam()):\n pass\n\npartial = func.get_configured_partial()\n```\n\nWith this approach, you don't have to transfer the global state to the new process. To transfer the\nglobal state, you'll want to use `get_config` and `add_config`.\n\n## Docs \ud83d\udcd6\n\nThe complete documentation for HParams is available [here](./DOCS.md).\n\n## Contributing\n\nWe've released HParams because a lack of hyperparameter management solutions. We hope that\nother people can benefit from the project. We are thankful for any contributions from the\ncommunity.\n\n### Contributing Guide\n\nRead our [contributing guide](https://github.com/PetrochukM/HParams/blob/master/CONTRIBUTING.md) to\nlearn about our development process, how to propose bugfixes and improvements, and how to build and\ntest your changes to HParams.\n\n## Authors\n\n- [Michael Petrochuk](https://github.com/PetrochukM/) \u2014 Developer\n- [Chloe Yeo](http://www.yeochloe.com/) \u2014 Logo Design\n\n## Citing\n\nIf you find HParams useful for an academic publication, then please use the following BibTeX to\ncite it:\n\n```latex\n@misc{hparams,\nauthor = {Petrochuk, Michael},\ntitle = {HParams: Hyperparameter management solution},\nyear = {2019},\npublisher = {GitHub},\njournal = {GitHub repository},\nhowpublished = {\\url{https://github.com/PetrochukM/HParams}},\n}\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "hyperparameters hparams configurable", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "hparams", "package_url": "https://pypi.org/project/hparams/", "platform": "", "project_url": "https://pypi.org/project/hparams/", "project_urls": null, "release_url": "https://pypi.org/project/hparams/0.3.0/", "requires_dist": [ "typeguard" ], "requires_python": ">=3.5", "summary": "", "version": "0.3.0", "yanked": false, "yanked_reason": null }, "last_serial": 6072991, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "3d416ac9d61e4e9983b2fab97fccbe81", "sha256": "e69600ee6441c610bb41c6d750bf913f80796d1f155393441d71b9aa4d2cf149" }, "downloads": -1, "filename": "hparams-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3d416ac9d61e4e9983b2fab97fccbe81", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 10908, "upload_time": "2019-09-25T04:37:33", "upload_time_iso_8601": "2019-09-25T04:37:33.222784Z", "url": "https://files.pythonhosted.org/packages/08/8a/86217bd6df98009ba8ad9fd3c2f932aa755eac526112513ca104dd30ac8c/hparams-0.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "c768cf28bdd64392f61a7df70fc92404", "sha256": "dc2da186fb41c6e54e064b815c31ab52b0abb982a6e2edb8677d1c597ea049a5" }, "downloads": -1, "filename": "hparams-0.1.0.tar.gz", "has_sig": false, "md5_digest": "c768cf28bdd64392f61a7df70fc92404", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 11229, "upload_time": "2019-09-25T04:37:36", "upload_time_iso_8601": "2019-09-25T04:37:36.129091Z", "url": "https://files.pythonhosted.org/packages/28/cb/b313b5cfce656e86bcbea03f50870b743b9bcf51ed318bbb16a242a7afa1/hparams-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "e6c5e04f0ab9f731946281154360a798", "sha256": "846efc02520ed204a094572471b5feff09379b1064bb68389f530268d7ab3835" }, "downloads": -1, "filename": "hparams-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "e6c5e04f0ab9f731946281154360a798", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 10617, "upload_time": "2019-09-26T05:27:23", "upload_time_iso_8601": "2019-09-26T05:27:23.302961Z", "url": "https://files.pythonhosted.org/packages/ba/95/be8e7819bdaba289c298cbd251e3edfcbb53248ad55cc1235b494bbe5862/hparams-0.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a5b9dfbe642ff2a96f41a6d549137a31", "sha256": "5d746f95359d6f78ce2e9c451ac854458acc0f77bc018358028508d9ce587d88" }, "downloads": -1, "filename": "hparams-0.1.1.tar.gz", "has_sig": false, "md5_digest": "a5b9dfbe642ff2a96f41a6d549137a31", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 10855, "upload_time": "2019-09-26T05:27:24", "upload_time_iso_8601": "2019-09-26T05:27:24.810886Z", "url": "https://files.pythonhosted.org/packages/bd/7f/d23431211aa386c77270a1257749c78c871140ad218bee205f741714564b/hparams-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "17d9e38d7b07a2114dde770fa2c3a377", "sha256": "44b0227efb3106e1a8a5e6e6ecccaf942c9416d44847e59803f32e3929fa8ca4" }, "downloads": -1, "filename": "hparams-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "17d9e38d7b07a2114dde770fa2c3a377", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 10389, "upload_time": "2019-09-29T18:25:58", "upload_time_iso_8601": "2019-09-29T18:25:58.374784Z", "url": "https://files.pythonhosted.org/packages/94/f0/81c69557ebea666ad85b2373d9de50343dd494eec228a022d0c79429336a/hparams-0.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "afb7fd4bfb45535e88dc15bb0a435218", "sha256": "808f7e0b9618da4657a54d9b3219043107a32eed6d02db5ee12b49a1a8e54291" }, "downloads": -1, "filename": "hparams-0.2.0.tar.gz", "has_sig": false, "md5_digest": "afb7fd4bfb45535e88dc15bb0a435218", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 10732, "upload_time": "2019-09-29T18:26:01", "upload_time_iso_8601": "2019-09-29T18:26:01.558570Z", "url": "https://files.pythonhosted.org/packages/81/11/630a9e322c4095685b148f7e981401ae9f2d89da42e78ee7ebee353fe0c8/hparams-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "9de91a1dae77f0de6a2b16e27c492861", "sha256": "9459bccc9993acfb1054c72fc2b205ba4000fd0979781144007197ba2cf96dce" }, "downloads": -1, "filename": "hparams-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "9de91a1dae77f0de6a2b16e27c492861", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 10666, "upload_time": "2019-10-23T02:12:42", "upload_time_iso_8601": "2019-10-23T02:12:42.881451Z", "url": "https://files.pythonhosted.org/packages/94/a9/8caca7b9e44307d9d552997491e9cf462057dd418ca8ad654115d7efb977/hparams-0.2.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "c2a69e98cb91dd401c9bdec3b6d2a253", "sha256": "e24be3f719bd5936f46b41a42fee456747679231ac9871e946a6052341b80e7b" }, "downloads": -1, "filename": "hparams-0.2.1.tar.gz", "has_sig": false, "md5_digest": "c2a69e98cb91dd401c9bdec3b6d2a253", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 11200, "upload_time": "2019-10-23T02:12:44", "upload_time_iso_8601": "2019-10-23T02:12:44.240842Z", "url": "https://files.pythonhosted.org/packages/ef/67/3ac2ed9f2adc674c50f1e635dde6ef7cf6a5bcd62b88220253543a6d52d5/hparams-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "0cf83a10d06d22a05c03dea07ab4ed6a", "sha256": "e3be8927a57b2aeb8801b9e045a62393343765aaab308b6dda015d65ebbc2160" }, "downloads": -1, "filename": "hparams-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0cf83a10d06d22a05c03dea07ab4ed6a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 11266, "upload_time": "2019-11-04T03:40:12", "upload_time_iso_8601": "2019-11-04T03:40:12.036816Z", "url": "https://files.pythonhosted.org/packages/2f/ec/bcc7011ec23390ac0ccafd031ad9f850430390b4ed3a8b1550788b7fe586/hparams-0.3.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "86d0e3e92866752e4ee6ca635d16bdad", "sha256": "a3b4eec68b8f2795a0d3dd8ef1348ecf447866f2ef33eddfa1a23ad5879953fc" }, "downloads": -1, "filename": "hparams-0.3.0.tar.gz", "has_sig": false, "md5_digest": "86d0e3e92866752e4ee6ca635d16bdad", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 12664, "upload_time": "2019-11-04T03:40:13", "upload_time_iso_8601": "2019-11-04T03:40:13.736334Z", "url": "https://files.pythonhosted.org/packages/39/0f/9831f1e406183f7a241ac02551afa7e31900ee846cdc58f595919b6f15f3/hparams-0.3.0.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0cf83a10d06d22a05c03dea07ab4ed6a", "sha256": "e3be8927a57b2aeb8801b9e045a62393343765aaab308b6dda015d65ebbc2160" }, "downloads": -1, "filename": "hparams-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0cf83a10d06d22a05c03dea07ab4ed6a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 11266, "upload_time": "2019-11-04T03:40:12", "upload_time_iso_8601": "2019-11-04T03:40:12.036816Z", "url": "https://files.pythonhosted.org/packages/2f/ec/bcc7011ec23390ac0ccafd031ad9f850430390b4ed3a8b1550788b7fe586/hparams-0.3.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "86d0e3e92866752e4ee6ca635d16bdad", "sha256": "a3b4eec68b8f2795a0d3dd8ef1348ecf447866f2ef33eddfa1a23ad5879953fc" }, "downloads": -1, "filename": "hparams-0.3.0.tar.gz", "has_sig": false, "md5_digest": "86d0e3e92866752e4ee6ca635d16bdad", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 12664, "upload_time": "2019-11-04T03:40:13", "upload_time_iso_8601": "2019-11-04T03:40:13.736334Z", "url": "https://files.pythonhosted.org/packages/39/0f/9831f1e406183f7a241ac02551afa7e31900ee846cdc58f595919b6f15f3/hparams-0.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }