Skip to content
Snippets Groups Projects
Commit 56dd2c7a authored by leufen1's avatar leufen1
Browse files

FCN name is adjusted to number of layers and hidden units, model setup can now...

FCN name is adjusted to number of layers and hidden units, model setup can now report all settings of optimizer too
parent 72f271c6
No related branches found
No related tags found
7 merge requests!319add all changes of dev into release v1.4.0 branch,!318Resolve "release v1.4.0",!283Merge latest develop into falcos issue,!264Merge develop into felix_issue287_tech-wrf-datahandler-should-inherit-from-singlestationdatahandler,!259Draft: Resolve "WRF-Datahandler should inherit from SingleStationDatahandler",!258Lukas issue284 feat create fcn model class,!255Resolve "create FCN model class"
Pipeline #61091 passed with warnings
This commit is part of merge request !318. Comments created here will be created in the context of that merge request.
__author__ = "Lukas Leufen"
__date__ = '2021-02-'
from functools import reduce
from mlair.model_modules import AbstractModelClass
from mlair.helpers import select_from_dict
......@@ -59,7 +61,7 @@ class FCN_64_32_16(AbstractModelClass):
class FCN(AbstractModelClass):
"""
A customised model 4 Dense layers (64, 32, 16, window_lead_time), where the last layer is the output layer depending
A customisable fully connected network (64, 32, 16, window_lead_time), where the last layer is the output layer depending
on the window_lead_time parameter.
"""
......@@ -69,7 +71,7 @@ class FCN(AbstractModelClass):
_requirements = ["lr", "beta_1", "beta_2", "epsilon", "decay", "amsgrad", "momentum", "nesterov"]
def __init__(self, input_shape: list, output_shape: list, activation="relu", optimizer="adam",
layers=1, neurons=10, **kwargs):
n_layer=1, n_hidden=10, **kwargs):
"""
Sets model and loss depending on the given arguments.
......@@ -84,7 +86,8 @@ class FCN(AbstractModelClass):
# settings
self.activation = self._set_activation(activation)
self.optimizer = self._set_optimizer(optimizer, **kwargs)
self.layer_configuration = (layers, neurons)
self.layer_configuration = (n_layer, n_hidden)
self._update_model_name()
# apply to model
self.set_model()
......@@ -110,6 +113,12 @@ class FCN(AbstractModelClass):
except KeyError:
raise AttributeError(f"Given optimizer {optimizer} is not supported in this model class.")
def _update_model_name(self):
n_layer, n_hidden = self.layer_configuration
n_input = str(reduce(lambda x, y: x * y, self._input_shape))
n_output = str(self._output_shape)
self.model_name += "_".join([n_input, *[f"{n_hidden}" for _ in range(n_layer)], n_output])
def set_model(self):
"""
Build the model.
......
......@@ -137,7 +137,6 @@ class ModelSetup(RunEnvironment):
def build_model(self):
"""Build model using input and output shapes from data store."""
# args_list = ["input_shape", "output_shape"]
model = self.data_store.get("model_class")
args_list = model.requirements()
args = self.data_store.create_args_dict(args_list, self.scope)
......@@ -170,6 +169,7 @@ class ModelSetup(RunEnvironment):
def report_model(self):
model_settings = self.model.get_settings()
model_settings.update(self.model.compile_options)
model_settings.update(self.model.optimizer.get_config())
df = pd.DataFrame(columns=["model setting"])
for k, v in model_settings.items():
if v is None:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment