Files
temperature-based-fertility…/code/configs/combined.py
T
Alex Blank d8b9ccfe99 code update
2025-05-20 23:39:23 +02:00

134 lines
4.4 KiB
Python

from typing import Callable
import configs
from configs.feature_config import feature_config
from configs.cnn_run_config import get_cnn_run_config
from configs.transformer_run_config import get_transformer_run_config
take_every_nth = int(288 / 12)
shift_in_hours = 12
input_window_length = (288 // take_every_nth) * 80
# output_window_length = (288 // take_every_nth) * 1
output_window_length = 1
output_window_offset = input_window_length + (288 // take_every_nth) * 0
window_shift = int((288 // take_every_nth) / 24 * shift_in_hours)
min_input_length_fraction_for_padding = ((288 // take_every_nth) * 4) / input_window_length
def config_generator(config_gen_fn: Callable,
fixed_params: dict,
variable_param_configs: list,
) -> list:
configs = list()
for variable_config in variable_param_configs:
config = fixed_params.copy()
for param_name, param_value in variable_config.items():
# update the config with the variable parameter, values can be None, if default should be used
if param_value is not None:
config[param_name] = param_value
configs.append(config_gen_fn(**config))
return configs
run_configuration = {
"name": "ovulation_regression",
"runs": config_generator(
get_cnn_run_config,
fixed_params={
"run_name": "cnn_ovulation_regression",
"run_description": "CNN model for ovulation regression",
"input_window_length": input_window_length,
"output_window_length": output_window_length,
"take_every_nth": take_every_nth,
"shift_in_hours": shift_in_hours,
"output_window_offset": output_window_offset,
"batch_size": 128,
"max_lr": 1e-5,
"num_epochs": 10,
"patience": 3,
"feature_config": feature_config,
},
variable_param_configs=[
{
"model_parameters": {
"cnn_channels": 32,
"kernel_size": 3,
"embed_dim": 32,
"num_enc_layers": 2,
"num_heads": 2,
},
},
{
"batch_size": 64,
"model_parameters": {
"cnn_channels": 64,
"kernel_size": 3,
"embed_dim": 64,
"num_enc_layers": 2,
"num_heads": 2,
},
},
{
"batch_size": 64,
"model_parameters": {
"cnn_channels": 128,
"kernel_size": 5,
"embed_dim": 128,
"num_enc_layers": 4,
"num_heads": 4,
},
},
]
) + config_generator(
get_transformer_run_config,
fixed_params={
"run_name": "transformer_ovulation_regression",
"run_description": "Transformer model for ovulation regression",
"input_window_length": input_window_length,
"output_window_length": output_window_length,
"take_every_nth": take_every_nth,
"shift_in_hours": shift_in_hours,
"output_window_offset": output_window_offset,
"batch_size": 128,
"max_lr": 1e-5,
"num_epochs": 10,
"patience": 3,
"feature_config": feature_config,
},
variable_param_configs=[
{
"model_parameters": {
"embed_dim": 64,
"num_enc_layers": 2,
"num_heads": 2,
},
},
{
"batch_size": 64,
"model_parameters": {
"embed_dim": 128,
"num_enc_layers": 4,
"num_heads": 4,
},
},
{
"batch_size": 64,
"model_parameters": {
"embed_dim": 256,
"num_enc_layers": 4,
"num_heads": 4,
},
},
{
"batch_size": 32,
"model_parameters": {
"embed_dim": 512,
"num_enc_layers": 4,
"num_heads": 4,
},
},
]
)
}