Sweep Example

This example demonstrates a wandb hyperparameter sweep driven from Fortran. It trains an athena network to approximate sin(x), logs intermediate MSE during training, and reports final_mse so the sweep controller can rank runs.

Source: example/sweep/src/main.f90

Hyperparameters searched

  • learning_rate (log-uniform in [1e-3, 1.0])

  • num_hidden (values: 4, 8, 16, 32)

  • activation (values: "tanh", "relu", "sigmoid")

Metrics logged

  • mse (every 500 iterations)

  • final_mse

Running

source tools/setup_env.sh
fpm run --example sweep

Key code

use athena
use wf

type(wandb_sweep_config_type) :: sweep_config
character(len=256) :: sweep_id

! Configure and register a Bayesian sweep
call sweep_config%set_method("bayes")
call sweep_config%set_metric("final_mse", "minimize")
call sweep_config%add_param_range("learning_rate", &
     min_val=1.0e-3_real32, max_val=1.0_real32, &
     distribution="log_uniform_values")
call sweep_config%add_param_values("num_hidden", [4, 8, 16, 32])
call sweep_config%add_param_values("activation", &
     ["tanh   ", "relu   ", "sigmoid"])

call wandb_sweep(config=sweep_config, project="athena-sweep", sweep_id=sweep_id)
call wandb_sweep_start_agent(sweep_id=trim(sweep_id), project="athena-sweep", count=5)

! Per-run loop
call wandb_sweep_next_params(params_json)
call wandb_config_get("learning_rate", lr, default_value=0.01_real32)
call wandb_config_get("num_hidden", num_hidden, default_value=8)
call wandb_config_get("activation", activation, default_value="tanh")

! ... train model ...
call wandb_log("mse", mse, step=n)
call wandb_log("final_mse", mse)
call wandb_sweep_run_done()

call wandb_shutdown()

fpm dependency

The sweep example pulls in athena automatically via fpm:

[[example]]
name = "sweep"
source-dir = "example/sweep/src"
main = "main.f90"
[example.dependencies]
athena = { git = "https://github.com/nedtaylor/athena", tag = "v2.0.0" }