Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ENH] Add and Validate n_layers, n_units, activation & dropout_rate kwargs to MLPNetwork #2338

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

aadya940
Copy link
Contributor

Closes #2337 .

@aeon-actions-bot aeon-actions-bot bot added enhancement New feature, improvement request or other non-bug code enhancement networks Networks package labels Nov 11, 2024
@aeon-actions-bot
Copy link
Contributor

Thank you for contributing to aeon

I have added the following labels to this PR based on the title: [ $\color{#FEF1BE}{\textsf{enhancement}}$ ].
I have added the following labels to this PR based on the changes made: [ $\color{#379E11}{\textsf{networks}}$ ]. Feel free to change these if they do not properly represent the PR.

The Checks tab will show the status of our automated tests. You can click on individual test runs in the tab or "Details" in the panel below to see more information if there is a failure.

If our pre-commit code quality check fails, any trivial fixes will automatically be pushed to your PR unless it is a draft.

Don't hesitate to ask questions on the aeon Slack channel if you have any.

PR CI actions

These checkboxes will add labels to enable/disable CI functionality for this PR. This may not take effect immediately, and a new commit may be required to run the new configuration.

  • Run pre-commit checks for all files
  • Run mypy typecheck tests
  • Run all pytest tests and configurations
  • Run all notebook example tests
  • Run numba-disabled codecov tests
  • Stop automatic pre-commit fixes (always disabled for drafts)
  • Disable numba cache loading
  • Push an empty commit to re-run CI checks

@aadya940 aadya940 added the deep learning Deep learning related label Nov 11, 2024
Copy link
Member

@hadifawaz1999 hadifawaz1999 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thx for taking care of it.
In general:

  • All parameters should be defined as private in constructor before starting anything
  • the assertions and all the list checking should only be in build_network method not constructor, this will avoid causing issues on CI (check for example how fcn network is implemented)
  • Also given we are parametrizing the network, the associated classifier and regressor should be parametrized as such (also docs) and use them when calling the network
  • I left some other comments to check

):
super().__init__()

self._n_layers = n_layers

if isinstance(activation, str):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

better to declare all of them as self before defining the internal versions, so self.activation = activation and then define self._activation

assert all(
isinstance(a, str) for a in activation
), "Activation must be a list of strings."
assert (
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

asserting the len() twice

):
super().__init__()

self._n_layers = n_layers
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no need to define private for this one with underscore as it wont change

self._activation = activation

if dropout_rate is None:
self._dropout_rate = [0.2] * self._n_layers
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the default value of dropout is not 0.2 in the original implementation (check main branch), its 0.1 then 0.2 then 0.2

Number of units in each dense layer.
activation : Union[str, list[str]], optional (default='relu')
Activation function(s) for each dense layer.
dropout_rate : Union[int, float, list[Union[int, float]]], optional (default=None)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i would obligate float always for dropout_rate and say that is should be between 0 and 1

assert all(
isinstance(d, (int, float)) for d in dropout_rate
), "Dropout rates must be int or float."
assert (
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

asserting on len twice


layer_2 = keras.layers.Dropout(0.2)(layer_1)
layer_2 = keras.layers.Dense(500, activation="relu")(layer_2)
x = keras.layers.Dropout(self._dropout_rate[0])(input_layer_flattened)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

better to include this block in the loop
where each block in the loop will be one dropout layer followed by a dense layer


output_layer = keras.layers.Dropout(0.3)(layer_3)
output_layer = keras.layers.Dropout(0.3)(x)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i would define a parameter called dropout_last default to 0.3, and document it in details for that this dropout layer is applied at the end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
deep learning Deep learning related enhancement New feature, improvement request or other non-bug code enhancement networks Networks package
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[ENH] Parametrize MLP Network, classifier and regressor
2 participants