From 78cc10064eee9a11a00d3c424e8c2836815609e2 Mon Sep 17 00:00:00 2001 From: Felix Kleinert <f.kleinert@fz-juelich.de> Date: Mon, 12 Apr 2021 17:53:49 +0200 Subject: [PATCH] add Secor model class --- mlair/model_modules/model_class.py | 181 +++++++++++++++++++++++++++-- 1 file changed, 174 insertions(+), 7 deletions(-) diff --git a/mlair/model_modules/model_class.py b/mlair/model_modules/model_class.py index 9b2058ac..ce74a89a 100644 --- a/mlair/model_modules/model_class.py +++ b/mlair/model_modules/model_class.py @@ -486,7 +486,9 @@ class MyLSTMModel(AbstractModelClass): super().__init__(input_shape[0], output_shape[0]) # settings - self.dropout_rate = 0.25 + self.dropout_rate = 0.4 + self.stateful = False + self.initial_lr = 1e-5 # apply to model self.set_model() @@ -495,16 +497,181 @@ class MyLSTMModel(AbstractModelClass): def set_model(self): x_input = keras.layers.Input(shape=self._input_shape) - x_in = keras.layers.LSTM(16, return_sequences=True, name="First_LSTM", dropout=self.dropout_rate)(x_input) - x_in = keras.layers.LSTM(32, name="Second_LSTM", dropout=self.dropout_rate)(x_in) + x_in = keras.layers.LSTM(16, return_sequences=True, name="First_LSTM", dropout=self.dropout_rate, stateful=self.stateful)(x_input) + x_in = keras.layers.Dropout(self.dropout_rate)(x_in) + x_in = keras.layers.LSTM(16, name="Second_LSTM", dropout=self.dropout_rate, stateful=self.stateful)(x_in) out_main = keras.layers.Dense(self._output_shape, name='Output_Dense')(x_in) self.model = keras.Model(inputs=x_input, outputs=[out_main]) def set_compile_options(self): - self.initial_lr = 1e-4 +# self.initial_lr = 1e-4 + #self.optimizer = keras.optimizers.SGD(lr=self.initial_lr, momentum=0.9) + self.optimizer = keras.optimizers.Adam(lr=self.initial_lr) +# self.lr_decay = mlair.model_modules.keras_extensions.LearningRateDecay(base_lr=self.initial_lr, +# drop=.94, +# epochs_drop=10) + self.loss = keras.losses.mean_squared_error + self.compile_options = {"metrics": ["mse", "mae"]} + + + +class MyCNNModel(AbstractModelClass): + + def __init__(self, input_shape: list, output_shape: list): + + super().__init__(input_shape[0], output_shape[0]) + + # settings + self.dropout_rate = 0.4 + self.batchnormalization = keras.layers.normalization.BatchNormalization +# self.activation = keras.layers.LeakyReLU + self.activation = keras.layers.ELU +# self.regularizer = keras.regularizers.l2(0.001) + + self.initial_lr = 0.01 + + + # apply to model + self.set_model() + self.set_compile_options() + self.set_custom_objects(SymmetricPadding2D=SymmetricPadding2D) + + def set_model(self): + + first_kernel = (3, 1) + first_filters = 16 + pad_size1 = PadUtils.get_padding_for_same(first_kernel) + + pool_kernel = (3,1) + pad_size_pool = PadUtils.get_padding_for_same(pool_kernel) + + second_kernel = (3, 1) + second_filters = 32 + pad_size2 = PadUtils.get_padding_for_same(second_kernel) + + x_input = keras.layers.Input(shape=self._input_shape) + + x_in = Padding2D("SymPad2D")(padding=pad_size1, name="SymPad1")(x_input) + x_in = keras.layers.Conv2D(filters=first_filters, + kernel_size=first_kernel, +# kernel_regularizer=self.regularizer, + name="First_conv_{}x{}".format(first_kernel[0], first_kernel[1]))(x_in) + x_in = self.batchnormalization()(x_in) + x_in = self.activation()(x_in) + x_in = keras.layers.Dropout(self.dropout_rate)(x_in) + +# x_in = Padding2D("SymPad2D")(padding=pad_size_pool, name="SymPad_pool")(x_in) +# x_in = keras.layers.MaxPool2D(pool_kernel)(x_in) + + x_in = Padding2D("SymPad2D")(padding=pad_size2, name="SymPad2")(x_in) + x_in = keras.layers.Conv2D(filters=second_filters, + kernel_size=second_kernel, +# kernel_regularizer=self.regularizer, + name="Second_conv_{}x{}".format(second_kernel[0], second_kernel[1]))(x_in) + x_in = self.batchnormalization()(x_in) + x_in = self.activation()(x_in) + x_in = keras.layers.Dropout(self.dropout_rate)(x_in) + + + x_in = keras.layers.Flatten()(x_in) + + x_in = keras.layers.Dense(32)(x_in) + x_in = self.batchnormalization()(x_in) + x_in = self.activation()(x_in) + + x_in = keras.layers.Dropout(self.dropout_rate)(x_in) + + out_main = keras.layers.Dense(self._output_shape, name='Output_Dense')(x_in) + + self.model = keras.Model(inputs=x_input, outputs=[out_main]) + + def set_compile_options(self): + +# self.optimizer = keras.optimizers.Adam() self.optimizer = keras.optimizers.SGD(lr=self.initial_lr, momentum=0.9) - self.lr_decay = mlair.model_modules.keras_extensions.LearningRateDecay(base_lr=self.initial_lr, - drop=.94, - epochs_drop=10) +# self.lr_decay = mlair.model_modules.keras_extensions.LearningRateDecay(base_lr=self.initial_lr, +# drop=.94, +# epochs_drop=10) + self.loss = keras.losses.mean_squared_error + self.compile_options = {"metrics": ["mse", "mae"]} + +class MyCNNModelSect(AbstractModelClass): + + def __init__(self, input_shape: list, output_shape: list): + + super().__init__(input_shape[0], output_shape[0]) + + # settings + self.dropout_rate = 0.35 + self.batchnormalization = keras.layers.normalization.BatchNormalization +# self.activation = keras.layers.LeakyReLU + self.activation = keras.layers.ELU +# self.regularizer = keras.regularizers.l2(0.001) + + self.initial_lr = 0.01 + + + # apply to model + self.set_model() + self.set_compile_options() + self.set_custom_objects(SymmetricPadding2D=SymmetricPadding2D) + + def set_model(self): + + first_kernel = (3, 1) + first_filters = 16 + pad_size1 = PadUtils.get_padding_for_same(first_kernel) + + pool_kernel = (3,1) + pad_size_pool = PadUtils.get_padding_for_same(pool_kernel) + + second_kernel = (3, 1) + second_filters = 32 + pad_size2 = PadUtils.get_padding_for_same(second_kernel) + + x_input = keras.layers.Input(shape=self._input_shape) + + x_in = Padding2D("SymPad2D")(padding=pad_size1, name="SymPad1")(x_input) + x_in = keras.layers.Conv2D(filters=first_filters, + kernel_size=first_kernel, +# kernel_regularizer=self.regularizer, + name="First_conv_{}x{}".format(first_kernel[0], first_kernel[1]))(x_in) + x_in = self.batchnormalization()(x_in) + x_in = self.activation()(x_in) + x_in = keras.layers.Dropout(self.dropout_rate)(x_in) + +# x_in = Padding2D("SymPad2D")(padding=pad_size_pool, name="SymPad_pool")(x_in) +# x_in = keras.layers.MaxPool2D(pool_kernel)(x_in) + + x_in = Padding2D("SymPad2D")(padding=pad_size2, name="SymPad2")(x_in) + x_in = keras.layers.Conv2D(filters=second_filters, + kernel_size=second_kernel, +# kernel_regularizer=self.regularizer, + name="Second_conv_{}x{}".format(second_kernel[0], second_kernel[1]))(x_in) + x_in = self.batchnormalization()(x_in) + x_in = self.activation()(x_in) + x_in = keras.layers.Dropout(self.dropout_rate)(x_in) + + + x_in = keras.layers.Flatten()(x_in) + + x_in = keras.layers.Dense(32)(x_in) + x_in = self.batchnormalization()(x_in) + x_in = self.activation()(x_in) + + x_in = keras.layers.Dropout(self.dropout_rate)(x_in) + + out_main = keras.layers.Dense(self._output_shape, name='Output_Dense')(x_in) + + self.model = keras.Model(inputs=x_input, outputs=[out_main]) + + def set_compile_options(self): + +# self.optimizer = keras.optimizers.Adam() + self.optimizer = keras.optimizers.SGD(lr=self.initial_lr, momentum=0.9) +# self.lr_decay = mlair.model_modules.keras_extensions.LearningRateDecay(base_lr=self.initial_lr, +# drop=.94, +# epochs_drop=10) self.loss = keras.losses.mean_squared_error self.compile_options = {"metrics": ["mse", "mae"]} + -- GitLab