https://github.com/michalwols/hp
A python library for managing Hyperparameters
https://github.com/michalwols/hp
argparse argument-parser hyperparameters machine-learning python
Last synced: about 1 year ago
JSON representation
A python library for managing Hyperparameters
- Host: GitHub
- URL: https://github.com/michalwols/hp
- Owner: michalwols
- Created: 2019-12-26T23:49:17.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2022-05-31T13:05:21.000Z (about 4 years ago)
- Last Synced: 2023-11-20T16:22:53.190Z (over 2 years ago)
- Topics: argparse, argument-parser, hyperparameters, machine-learning, python
- Language: Python
- Size: 10.7 KB
- Stars: 5
- Watchers: 2
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# hp: Hyperparameter Management Library
Defining, tuning and tracking hyperparameters in machine learning experiments can get messy. hp uses python classes to declaratively define your hyperparameters.
## Benefits
1. Type annotated container for your parameters
2. Automatically generated command line interface
3. Handles saving and loading of parameters
## Install
Install with pip
```
pip install hp
```
## Tour
### Define Your Parameters
```python
import hp
class Params(hp.HyperParams):
learning_rate: hp.Range(0.001, 0.1) = 0.03
optimizer: hp.Choice(('SGD', 'Adam')) = 'SGD'
batch_size = 32
seed = 1
```
### Command Line Parser
```python
# parse from command line arguments
params = Params.from_command()
```
### Environment Variables
```python
params = Params.from_env(prefix='HP_')
```
### Global Constants
```python
params = Params.from_constants() # load all CAP_CASE variables
```
### YAML / JSON
```python
hp.save(params, 'params.yaml')
params = Params.load('params.yaml')
```
### Binding
```python
params = hp.HyperParams()
@params.bind
def train(epochs=10):
pass
train() # use current param value (default to function default)
train(epochs=4) # override params
```
```python
trainer.batch_size = params.bind('batch_size')
```
```python
params.bind(Optimizer, fields={'lr': 'learning_rate'})
```
### Grid / Random Search
```python
# grid search
for params in Params.grid():
pass
# random samples without replacement
for params in Params.samples():
pass
```
### Change Tracking
```python
@params.on_change
def log_changes(params, key, value):
print(f"changing {key} from {params[key]} to {value}")
params.learning_rate = 0.001
# >> changing learning_rate from 0.03 to 0.001
```