-
Notifications
You must be signed in to change notification settings - Fork 207
Open
Labels
deep learningDeep learning relatedDeep learning relatedenhancementNew feature, improvement request or other non-bug code enhancementNew feature, improvement request or other non-bug code enhancementregressionRegression packageRegression package
Description
Describe the bug
Setting the InceptionTimeRegressor n_conv_per_layer parameter to a value greater than 6 causes an error relating to kernel_size to be raised.
Setting this parameter to a value between 1 and 6 seems to function as expected.
Steps/Code to reproduce the bug
from aeon.regression.deep_learning import InceptionTimeRegressor
from aeon.testing.data_generation import make_example_3d_numpy
X, y = make_example_3d_numpy(
n_cases=10,
n_channels=1,
n_timepoints=12,
return_y=True,
regression_target=True,
random_state=0
)
inctime = InceptionTimeRegressor(
n_epochs=1,
batch_size=4,
n_conv_per_layer=7,
verbose=1
)
inctime.fit(X, y)
Expected results
No error thrown and fitting to proceed.
Actual results
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[2], line 22
6 X, y = make_example_3d_numpy(
7 n_cases=10,
8 n_channels=1,
(...) 12 random_state=0
13 )
15 inctime = InceptionTimeRegressor(
16 n_epochs=1,
17 batch_size=4,
18 n_conv_per_layer=7,
19 verbose=1
20 )
---> 22 inctime.fit(X, y)
File .../.venv/lib/python3.11/site-packages/aeon/regression/base.py:100, in BaseRegressor.fit(self, X, y)
62 """Fit time series regressor to training data.
63
64 Parameters
(...) 96 ending in "_" and sets is_fitted flag to True.
97 """
98 X, y = self._fit_setup(X, y)
--> 100 self._fit(X, y)
102 # this should happen last
103 self.is_fitted = True
File .../.venv/lib/python3.11/site-packages/aeon/regression/deep_learning/_inception_time.py:310, in InceptionTimeRegressor._fit(self, X, y)
276 for n in range(0, self.n_regressors):
277 rgs = IndividualInceptionRegressor(
278 n_filters=self.n_filters,
279 n_conv_per_layer=self.n_conv_per_layer,
(...) 308 verbose=self.verbose,
309 )
--> 310 rgs.fit(X, y)
311 self.regressors_.append(rgs)
312 gc.collect()
File .../.venv/lib/python3.11/site-packages/aeon/regression/base.py:100, in BaseRegressor.fit(self, X, y)
62 """Fit time series regressor to training data.
63
64 Parameters
(...) 96 ending in "_" and sets is_fitted flag to True.
97 """
98 X, y = self._fit_setup(X, y)
--> 100 self._fit(X, y)
102 # this should happen last
103 self.is_fitted = True
File .../.venv/lib/python3.11/site-packages/aeon/regression/deep_learning/_inception_time.py:669, in IndividualInceptionRegressor._fit(self, X, y)
667 else:
668 mini_batch_size = self.batch_size
--> 669 self.training_model_ = self.build_model(self.input_shape_)
671 if self.save_init_model:
672 self.training_model_.save(self.file_path + self.init_file_name + ".keras")
File .../.venv/lib/python3.11/site-packages/aeon/regression/deep_learning/_inception_time.py:618, in IndividualInceptionRegressor.build_model(self, input_shape, **kwargs)
616 self.random_state_ = rng.randint(0, np.iinfo(np.int32).max)
617 tf.keras.utils.set_random_seed(self.random_state_)
--> 618 input_layer, output_layer = self._network.build_network(input_shape, **kwargs)
620 output_layer = tf.keras.layers.Dense(1, activation=self.output_activation)(
621 output_layer
622 )
624 model = tf.keras.models.Model(inputs=input_layer, outputs=output_layer)
File .../.venv/lib/python3.11/site-packages/aeon/networks/_inception.py:509, in InceptionNetwork.build_network(self, input_shape, **kwargs)
506 else:
507 _use_custom_filters = False
--> 509 x = self._inception_module(
510 x,
511 n_filters=self._nb_filters[d],
512 dilation_rate=self._dilation_rate[d],
513 kernel_size=self._kernel_size[d],
514 padding=self._padding[d],
515 strides=self._strides[d],
516 activation=self._activation[d],
517 use_bias=self._use_bias[d],
518 use_max_pooling=self._use_max_pooling[d],
519 max_pool_size=self._max_pool_size[d],
520 n_conv_per_layer=self._nb_conv_per_layer[d],
521 use_custom_filters=_use_custom_filters,
522 )
524 if self.use_residual and d % 3 == 2:
525 x = self._shortcut_layer(input_res, x, padding=self._padding[d])
File .../.venv/lib/python3.11/site-packages/aeon/networks/_inception.py:317, in InceptionNetwork._inception_module(self, input_tensor, n_filters, dilation_rate, padding, strides, activation, use_bias, kernel_size, n_conv_per_layer, use_max_pooling, max_pool_size, use_custom_filters)
313 conv_list = []
315 for i in range(len(kernel_size_s)):
316 conv_list.append(
--> 317 tf.keras.layers.Conv1D(
318 filters=n_filters,
319 kernel_size=kernel_size_s[i],
320 strides=strides,
321 dilation_rate=dilation_rate,
322 padding=padding,
323 activation="linear",
324 use_bias=use_bias,
325 )(input_inception)
326 )
328 if use_max_pooling:
329 max_pool_1 = tf.keras.layers.MaxPool1D(
330 pool_size=max_pool_size, strides=strides, padding=padding
331 )(input_tensor)
File .../.venv/lib/python3.11/site-packages/keras/src/layers/convolutional/conv1d.py:115, in Conv1D.__init__(self, filters, kernel_size, strides, padding, data_format, dilation_rate, groups, activation, use_bias, kernel_initializer, bias_initializer, kernel_regularizer, bias_regularizer, activity_regularizer, kernel_constraint, bias_constraint, **kwargs)
95 def __init__(
96 self,
97 filters,
(...) 113 **kwargs,
114 ):
--> 115 super().__init__(
116 rank=1,
117 filters=filters,
118 kernel_size=kernel_size,
119 strides=strides,
120 padding=padding,
121 data_format=data_format,
122 dilation_rate=dilation_rate,
123 groups=groups,
124 activation=activation,
125 use_bias=use_bias,
126 kernel_initializer=kernel_initializer,
127 bias_initializer=bias_initializer,
128 kernel_regularizer=kernel_regularizer,
129 bias_regularizer=bias_regularizer,
130 activity_regularizer=activity_regularizer,
131 kernel_constraint=kernel_constraint,
132 bias_constraint=bias_constraint,
133 **kwargs,
134 )
File .../.venv/lib/python3.11/site-packages/keras/src/layers/convolutional/base_conv.py:117, in BaseConv.__init__(self, rank, filters, kernel_size, strides, padding, data_format, dilation_rate, groups, activation, use_bias, kernel_initializer, bias_initializer, kernel_regularizer, bias_regularizer, activity_regularizer, kernel_constraint, bias_constraint, lora_rank, lora_alpha, **kwargs)
115 self.filters = filters
116 self.groups = groups
--> 117 self.kernel_size = standardize_tuple(kernel_size, rank, "kernel_size")
118 self.strides = standardize_tuple(strides, rank, "strides")
119 self.dilation_rate = standardize_tuple(
120 dilation_rate, rank, "dilation_rate"
121 )
File .../.venv/lib/python3.11/site-packages/keras/src/utils/argument_validation.py:51, in standardize_tuple(value, n, name, allow_zero)
46 if unqualified_values:
47 error_msg += (
48 f", including values {unqualified_values}"
49 f" that do not satisfy `value {req_msg}`"
50 )
---> 51 raise ValueError(error_msg)
53 return value_tuple
ValueError: The `kernel_size` argument must be a tuple of 1 integers. Received kernel_size=0, including values {0} that do not satisfy `value > 0`
Versions
System:
python: 3.11.11 (main, Jan 14 2025, 22:49:08) [Clang 19.1.6 ]
executable: .../.venv/bin/python
machine: Linux-5.15.146.1-microsoft-standard-WSL2-x86_64-with-glibc2.35
Python dependencies:
aeon: 1.1.0
pip: None
setuptools: 80.9.0
scikit-learn: 1.6.1
numpy: 1.26.4
numba: 0.61.2
scipy: 1.15.3
pandas: 2.2.3
Metadata
Metadata
Assignees
Labels
deep learningDeep learning relatedDeep learning relatedenhancementNew feature, improvement request or other non-bug code enhancementNew feature, improvement request or other non-bug code enhancementregressionRegression packageRegression package