🧠Best Practices
"Shift Left" - Move Complexity to your Configs
from hypster import HP, instantiate
def model_config(hp: HP):
# Complex logic in configuration
model_type = hp.select(["lstm", "transformer"], name="model_type", default="lstm")
if model_type == "lstm":
hidden_size = hp.int(128, name="hidden_size", min=64, max=512)
num_layers = hp.int(2, name="num_layers", min=1, max=4)
bidirectional = hp.bool(True, name="bidirectional")
model = LSTMModel(
hidden_size=hidden_size,
num_layers=num_layers,
bidirectional=bidirectional
)
else: # transformer
num_heads = hp.int(8, name="num_heads", min=4, max=16)
num_layers = hp.int(6, name="num_layers", min=2, max=12)
dropout = hp.float(0.1, name="dropout", min=0, max=0.5)
model = TransformerModel(
num_heads=num_heads,
num_layers=num_layers,
dropout=dropout
)
# Common training parameters
optimizer = hp.select(["adam", "sgd"], name="optimizer", default="adam")
learning_rate = hp.float(0.001, name="learning_rate", min=1e-5, max=0.1)
return {
"model": model,
"optimizer": optimizer,
"learning_rate": learning_rate
}
# Simple execution code (outside config)
config = instantiate(model_config, values={"model_type": "transformer"})
model = config["model"]
model.fit(X_train, y_train) # All complexity handled in configPerformance Guidelines
Pythonic Configuration
Use Native Python Features
Utilize Hypster's built-in Type Safety
Use Built-in Type Checking
Value Validation
Required Naming Convention
Configuration Function Structure
Last updated
Was this helpful?