Skip to content

Commit

Permalink
[ENH] Make deep clustering consisting with other deep learning submod…
Browse files Browse the repository at this point in the history
…ules in terms of saving/loading (#2359)

* add init save and load test

* fix bug test

* call save last model
  • Loading branch information
hadifawaz1999 authored Nov 16, 2024
1 parent 78f025e commit 295f311
Show file tree
Hide file tree
Showing 8 changed files with 207 additions and 9 deletions.
18 changes: 17 additions & 1 deletion aeon/clustering/deep_learning/_ae_abgru.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ class AEAttentionBiGRUClusterer(BaseDeepClusterer):
Whether or not to save the last model, last
epoch trained, using the base class method
save_last_model_to_file.
save_init_model : bool, default = False
Whether to save the initialization of the model.
best_file_name : str, default = "best_model"
The name of the file of the best model, if
save_best_model is set to False, this parameter
Expand All @@ -81,6 +83,10 @@ class AEAttentionBiGRUClusterer(BaseDeepClusterer):
The name of the file of the last model, if
save_last_model is set to False, this parameter
is discarded.
init_file_name : str, default = "init_model"
The name of the file of the init model, if
save_init_model is set to False,
this parameter is discarded.
callbacks : keras.callbacks, default = None
List of keras callbacks.
Expand Down Expand Up @@ -120,8 +126,10 @@ def __init__(
file_path="./",
save_best_model=False,
save_last_model=False,
save_init_model=False,
best_file_name="best_model",
last_file_name="last_file",
last_file_name="last_model",
init_file_name="init_model",
callbacks=None,
):
self.latent_space_dim = latent_space_dim
Expand All @@ -139,7 +147,9 @@ def __init__(
self.n_epochs = n_epochs
self.save_best_model = save_best_model
self.save_last_model = save_last_model
self.save_init_model = save_init_model
self.best_file_name = best_file_name
self.init_file_name = init_file_name
self.random_state = random_state

super().__init__(
Expand Down Expand Up @@ -231,6 +241,9 @@ def _fit(self, X):
self.input_shape = X.shape[1:]
self.training_model_ = self.build_model(self.input_shape)

if self.save_init_model:
self.training_model_.save(self.file_path + self.init_file_name + ".keras")

if self.verbose:
self.training_model_.summary()

Expand Down Expand Up @@ -282,6 +295,9 @@ def _fit(self, X):

self._fit_clustering(X=X)

if self.save_last_model:
self.save_last_model_to_file(file_path=self.file_path)

gc.collect()

return self
Expand Down
18 changes: 17 additions & 1 deletion aeon/clustering/deep_learning/_ae_bgru.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ class AEBiGRUClusterer(BaseDeepClusterer):
Whether or not to save the last model, last
epoch trained, using the base class method
save_last_model_to_file.
save_init_model : bool, default = False
Whether to save the initialization of the model.
best_file_name : str, default = "best_model"
The name of the file of the best model, if
save_best_model is set to False, this parameter
Expand All @@ -79,6 +81,10 @@ class AEBiGRUClusterer(BaseDeepClusterer):
The name of the file of the last model, if
save_last_model is set to False, this parameter
is discarded.
init_file_name : str, default = "init_model"
The name of the file of the init model, if
save_init_model is set to False,
this parameter is discarded.
callbacks : keras.callbacks, default = None
List of keras callbacks.
Expand Down Expand Up @@ -119,8 +125,10 @@ def __init__(
file_path="./",
save_best_model=False,
save_last_model=False,
save_init_model=False,
best_file_name="best_model",
last_file_name="last_file",
last_file_name="last_model",
init_file_name="init_model",
callbacks=None,
):
self.latent_space_dim = latent_space_dim
Expand All @@ -138,7 +146,9 @@ def __init__(
self.n_epochs = n_epochs
self.save_best_model = save_best_model
self.save_last_model = save_last_model
self.save_init_model = save_init_model
self.best_file_name = best_file_name
self.init_file_name = init_file_name
self.random_state = random_state

super().__init__(
Expand Down Expand Up @@ -230,6 +240,9 @@ def _fit(self, X):
self.input_shape = X.shape[1:]
self.training_model_ = self.build_model(self.input_shape)

if self.save_init_model:
self.training_model_.save(self.file_path + self.init_file_name + ".keras")

if self.verbose:
self.training_model_.summary()

Expand Down Expand Up @@ -280,6 +293,9 @@ def _fit(self, X):

self._fit_clustering(X=X)

if self.save_last_model:
self.save_last_model_to_file(file_path=self.file_path)

gc.collect()

return self
Expand Down
18 changes: 17 additions & 1 deletion aeon/clustering/deep_learning/_ae_dcnn.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,8 @@ class AEDCNNClusterer(BaseDeepClusterer):
Whether or not to save the last model, last
epoch trained, using the base class method
save_last_model_to_file.
save_init_model : bool, default = False
Whether to save the initialization of the model.
best_file_name : str, default = "best_model"
The name of the file of the best model, if
save_best_model is set to False, this parameter
Expand All @@ -94,6 +96,10 @@ class AEDCNNClusterer(BaseDeepClusterer):
The name of the file of the last model, if
save_last_model is set to False, this parameter
is discarded.
init_file_name : str, default = "init_model"
The name of the file of the init model, if
save_init_model is set to False,
this parameter is discarded.
callbacks : keras.callbacks, default = None
List of keras callbacks.
Expand Down Expand Up @@ -137,8 +143,10 @@ def __init__(
file_path="./",
save_best_model=False,
save_last_model=False,
save_init_model=False,
best_file_name="best_model",
last_file_name="last_file",
last_file_name="last_model",
init_file_name="init_model",
callbacks=None,
):
self.latent_space_dim = latent_space_dim
Expand All @@ -160,7 +168,9 @@ def __init__(
self.n_epochs = n_epochs
self.save_best_model = save_best_model
self.save_last_model = save_last_model
self.save_init_model = save_init_model
self.best_file_name = best_file_name
self.init_file_name = init_file_name
self.random_state = random_state

super().__init__(
Expand Down Expand Up @@ -256,6 +266,9 @@ def _fit(self, X):
self.input_shape = X.shape[1:]
self.training_model_ = self.build_model(self.input_shape)

if self.save_init_model:
self.training_model_.save(self.file_path + self.init_file_name + ".keras")

if self.verbose:
self.training_model_.summary()

Expand Down Expand Up @@ -306,6 +319,9 @@ def _fit(self, X):

self._fit_clustering(X=X)

if self.save_last_model:
self.save_last_model_to_file(file_path=self.file_path)

gc.collect()

return self
Expand Down
18 changes: 17 additions & 1 deletion aeon/clustering/deep_learning/_ae_drnn.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ class AEDRNNClusterer(BaseDeepClusterer):
Whether or not to save the last model, last
epoch trained, using the base class method
save_last_model_to_file.
save_init_model : bool, default = False
Whether to save the initialization of the model.
best_file_name : str, default = "best_model"
The name of the file of the best model, if
save_best_model is set to False, this parameter
Expand All @@ -95,6 +97,10 @@ class AEDRNNClusterer(BaseDeepClusterer):
The name of the file of the last model, if
save_last_model is set to False, this parameter
is discarded.
init_file_name : str, default = "init_model"
The name of the file of the init model, if
save_init_model is set to False,
this parameter is discarded.
callbacks : keras.callbacks, default = None
List of keras callbacks.
Expand Down Expand Up @@ -139,8 +145,10 @@ def __init__(
file_path="./",
save_best_model=False,
save_last_model=False,
save_init_model=False,
best_file_name="best_model",
last_file_name="last_file",
last_file_name="last_model",
init_file_name="init_model",
callbacks=None,
):
self.latent_space_dim = latent_space_dim
Expand All @@ -163,7 +171,9 @@ def __init__(
self.n_epochs = n_epochs
self.save_best_model = save_best_model
self.save_last_model = save_last_model
self.save_init_model = save_init_model
self.best_file_name = best_file_name
self.init_file_name = init_file_name
self.random_state = random_state

super().__init__(
Expand Down Expand Up @@ -260,6 +270,9 @@ def _fit(self, X):
self.input_shape = X.shape[1:]
self.training_model_ = self.build_model(self.input_shape)

if self.save_init_model:
self.training_model_.save(self.file_path + self.init_file_name + ".keras")

if self.verbose:
self.training_model_.summary()

Expand Down Expand Up @@ -312,6 +325,9 @@ def _fit(self, X):

self._fit_clustering(X=X)

if self.save_last_model:
self.save_last_model_to_file(file_path=self.file_path)

gc.collect()

return self
Expand Down
18 changes: 17 additions & 1 deletion aeon/clustering/deep_learning/_ae_fcn.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,8 @@ class AEFCNClusterer(BaseDeepClusterer):
Whether or not to save the last model, last
epoch trained, using the base class method
save_last_model_to_file.
save_init_model : bool, default = False
Whether to save the initialization of the model.
best_file_name : str, default = "best_model"
The name of the file of the best model, if
save_best_model is set to False, this parameter
Expand All @@ -96,6 +98,10 @@ class AEFCNClusterer(BaseDeepClusterer):
The name of the file of the last model, if
save_last_model is set to False, this parameter
is discarded.
init_file_name : str, default = "init_model"
The name of the file of the init model, if
save_init_model is set to False,
this parameter is discarded.
callbacks : keras.callbacks, default = None
List of keras callbacks.
Expand Down Expand Up @@ -147,8 +153,10 @@ def __init__(
file_path="./",
save_best_model=False,
save_last_model=False,
save_init_model=False,
best_file_name="best_model",
last_file_name="last_file",
last_file_name="last_model",
init_file_name="init_model",
callbacks=None,
):
self.latent_space_dim = latent_space_dim
Expand All @@ -171,7 +179,9 @@ def __init__(
self.n_epochs = n_epochs
self.save_best_model = save_best_model
self.save_last_model = save_last_model
self.save_init_model = save_init_model
self.best_file_name = best_file_name
self.init_file_name = init_file_name
self.random_state = random_state

super().__init__(
Expand Down Expand Up @@ -271,6 +281,9 @@ def _fit(self, X):
self.input_shape = X.shape[1:]
self.training_model_ = self.build_model(self.input_shape)

if self.save_init_model:
self.training_model_.save(self.file_path + self.init_file_name + ".keras")

if self.verbose:
self.training_model_.summary()

Expand Down Expand Up @@ -332,6 +345,9 @@ def _fit(self, X):

self._fit_clustering(X=X)

if self.save_last_model:
self.save_last_model_to_file(file_path=self.file_path)

gc.collect()

return self
Expand Down
19 changes: 17 additions & 2 deletions aeon/clustering/deep_learning/_ae_resnet.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,12 +91,18 @@ class AEResNetClusterer(BaseDeepClusterer):
save_last_model : bool, default = False
Whether or not to save the last model, last epoch trained, using the base
class method save_last_model_to_file.
save_init_model : bool, default = False
Whether to save the initialization of the model.
best_file_name : str, default = "best_model"
The name of the file of the best model, if save_best_model is set to
False, this parameter is discarded.
last_file_name : str, default = "last_model"
The name of the file of the last model, if save_last_model is set to
False, this parameter is discarded.
init_file_name : str, default = "init_model"
The name of the file of the init model, if
save_init_model is set to False,
this parameter is discarded.
verbose : boolean, default = False
whether to output extra information
loss : string, default = "mean_squared_error"
Expand Down Expand Up @@ -155,8 +161,10 @@ def __init__(
file_path="./",
save_best_model=False,
save_last_model=False,
save_init_model=False,
best_file_name="best_model",
last_file_name="last_file",
last_file_name="last_model",
init_file_name="init_model",
optimizer="Adam",
):
self.n_residual_blocks = n_residual_blocks
Expand All @@ -179,8 +187,9 @@ def __init__(
self.file_path = file_path
self.save_best_model = save_best_model
self.save_last_model = save_last_model
self.save_init_model = save_init_model
self.best_file_name = best_file_name
self.last_file_name = last_file_name
self.init_file_name = init_file_name
self.optimizer = optimizer

self.history = None
Expand Down Expand Up @@ -284,6 +293,9 @@ def _fit(self, X):
self.input_shape = X.shape[1:]
self.training_model_ = self.build_model(self.input_shape)

if self.save_init_model:
self.training_model_.save(self.file_path + self.init_file_name + ".keras")

if self.verbose:
self.training_model_.summary()

Expand Down Expand Up @@ -347,6 +359,9 @@ def _fit(self, X):

self._fit_clustering(X=X)

if self.save_last_model:
self.save_last_model_to_file(file_path=self.file_path)

gc.collect()
return self

Expand Down
Loading

0 comments on commit 295f311

Please sign in to comment.