{"id":17842867,"url":"https://github.com/michalwols/hp","last_synced_at":"2025-03-20T04:31:46.336Z","repository":{"id":36796807,"uuid":"230342629","full_name":"michalwols/hp","owner":"michalwols","description":"A python library for managing Hyperparameters","archived":false,"fork":false,"pushed_at":"2022-05-31T13:05:21.000Z","size":11,"stargazers_count":5,"open_issues_count":2,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2023-11-20T16:22:53.190Z","etag":null,"topics":["argparse","argument-parser","hyperparameters","machine-learning","python"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/michalwols.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-12-26T23:49:17.000Z","updated_at":"2023-08-28T22:23:09.000Z","dependencies_parsed_at":"2022-09-20T05:50:35.932Z","dependency_job_id":null,"html_url":"https://github.com/michalwols/hp","commit_stats":null,"previous_names":[],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michalwols%2Fhp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michalwols%2Fhp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michalwols%2Fhp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michalwols%2Fhp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/michalwols","download_url":"https://codeload.github.com/michalwols/hp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244552699,"owners_count":20471145,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["argparse","argument-parser","hyperparameters","machine-learning","python"],"created_at":"2024-10-27T21:18:37.977Z","updated_at":"2025-03-20T04:31:46.035Z","avatar_url":"https://github.com/michalwols.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# hp: Hyperparameter Management Library\n\nDefining, tuning and tracking hyperparameters in machine learning experiments can get messy. hp uses python classes to declaratively define your hyperparameters. \n\n## Benefits\n\n1. Type annotated container for your parameters\n2. Automatically generated command line interface \n3. Handles saving and loading of parameters\n\n\n## Install\n\nInstall with pip\n\n```\npip install hp\n```\n\n## Tour\n\n### Define Your Parameters\n\n```python\nimport hp\n\n\nclass Params(hp.HyperParams):\n  learning_rate: hp.Range(0.001, 0.1) = 0.03\n  optimizer: hp.Choice(('SGD', 'Adam')) = 'SGD'\n\n  batch_size = 32\n  seed = 1\n```\n\n### Command Line Parser\n\n```python\n# parse from command line arguments\nparams = Params.from_command()\n```\n\n### Environment Variables\n\n```python\n\nparams = Params.from_env(prefix='HP_')\n```\n\n\n### Global Constants\n\n```python\nparams = Params.from_constants()  # load all CAP_CASE variables\n```\n\n\n### YAML / JSON \n\n```python\nhp.save(params, 'params.yaml')\n\nparams = Params.load('params.yaml')\n```\n\n\n### Binding\n\n```python\n\nparams = hp.HyperParams()\n\n@params.bind\ndef train(epochs=10):\n  pass\n\n\ntrain()  # use current param value (default to function default)\n\ntrain(epochs=4)  # override params\n```\n\n\n```python\ntrainer.batch_size = params.bind('batch_size')\n```\n\n```python\nparams.bind(Optimizer, fields={'lr': 'learning_rate'})\n```\n\n### Grid / Random Search\n\n```python\n\n# grid search\nfor params in Params.grid():\n  pass\n \n# random samples without replacement\nfor params in Params.samples():\n  pass\n```\n\n\n### Change Tracking\n\n```python\n\n@params.on_change\ndef log_changes(params, key, value):\n  print(f\"changing {key} from {params[key]} to {value}\")\n  \nparams.learning_rate = 0.001\n# \u003e\u003e changing learning_rate from 0.03 to 0.001\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichalwols%2Fhp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmichalwols%2Fhp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichalwols%2Fhp/lists"}