11
I'm working in a project to perform multiclass classification. on Cusing Keras Tensorflow. I'm using the onsumer Finance FRCB dataset.In the first step I create token and embedidings using Keras Tokenizer as follows.
%%time
# prepare text data for LSTM
max_features = 20_000
MAX_SEQUENCE_LENGTH = 250
tokenizer = Tokenizer(num_words=max_features, split=' ')
tokenizer.fit_on_texts(df2["cleaned_text"])
X = tokenizer.texts_to_sequences(df2["cleaned_text"])
X = pad_sequences(X, maxlen = MAX_SEQUENCE_LENGTH)
y = pd.get_dummies(df2['category_id']).values
Next I do a train test split like this:
X_train, X_test, y_train, y_test = train_test_split(X,y,
stratify=df2["category_id"],
test_size = 0.2, random_state = 43, shuffle=True)
print(X_train.shape,y_train.shape)
print(X_test.shape,y_test.shape)
The shape of X_train, y_train, X_test, y_test are -
(7732, 250) (7732, 3) (1934, 250) (1934, 3)
Then I try to perform hyper parameter tuning using Keras Tuner like this:
#Import packages and modules for hyper parameter tuning
from tensorflow import keras
from tensorflow.keras import layers
from kerastuner.tuners import RandomSearch
def build_model(hp):
model = keras.Sequential()
model.add(Embedding(input_dim=vocab_size, # Size of the vocabulary
output_dim=50, # Length of the vector for each word
input_length = MAX_SEQUENCE_LENGTH)) # Maximum length of a sequence
model.add(SpatialDropout1D(0.5))
#model.add(layers.LSTM(units=hp.Int('units', min_value=32, max_value=512, step=32), input_shape=y_train.shape))
for i in range(hp.Int('num_layers', 2, 10)):
model.add(layers.Dense(units=hp.Int('units_' + str(i), min_value=32, max_value=512, step=32),
activation=hp.Choice('dense_activation_' + str(i), values=['relu', 'tanh', 'sigmoid'], default='relu')))
model.add(layers.Dropout(rate=hp.Float('dropout_' + str(i), min_value=0.0, max_value=0.5, default=0.25, step=0.05)))
model.add(layers.Dense(num_top_labels, activation='softmax'))
model.compile(
optimizer=keras.optimizers.Adam(
hp.Choice('learning_rate', values=[1e-2, 1e-3, 1e-4])),
loss='categorical_crossentropy',
metrics=[f1_weighted])
return model
After defining the search space, I select tuner class to run the search. I choose RandomSearch as below:
tuner = RandomSearch(
build_model,
objective='val_loss', # Set the objective to 'val_loss'
max_trials=5, # Set the maximum number of trials
executions_per_trial=3, # Set the number of executions per trial
directory='my_dir', # Set the directory where the results are stored
project_name='consumer_complaints' # Set the project name
)
# Display the search space summary
tuner.search_space_summary()
# Perform the hyperparameter search
tuner.search(
X_train, y_train,
epochs=5,
validation_data=(X_test, y_test)
)
# Display the results summary
tuner.results_summary()
When I run this above code step, I get Value Error as shown below:
Search space summary
Default search space size: 24
units (Int)
{'default': None, 'conditions': [], 'min_value': 32, 'max_value': 512, 'step': 32, 'sampling': 'linear'}
num_layers (Int)
{'default': None, 'conditions': [], 'min_value': 2, 'max_value': 10, 'step': 1, 'sampling': 'linear'}
units_0 (Int)
{'default': None, 'conditions': [], 'min_value': 32, 'max_value': 512, 'step': 32, 'sampling': 'linear'}
dense_activation_0 (Choice)
{'default': 'relu', 'conditions': [], 'values': ['relu', 'tanh', 'sigmoid'], 'ordered': False}
dropout_0 (Float)
{'default': 0.25, 'conditions': [], 'min_value': 0.0, 'max_value': 0.5, 'step': 0.05, 'sampling': 'linear'}
units_1 (Int)
{'default': None, 'conditions': [], 'min_value': 32, 'max_value': 512, 'step': 32, 'sampling': 'linear'}
dense_activation_1 (Choice)
{'default': 'relu', 'conditions': [], 'values': ['relu', 'tanh', 'sigmoid'], 'ordered': False}
dropout_1 (Float) {'default': 0.25, 'conditions': [], 'min_value': 0.0, 'max_value': 0.5, 'step': 0.05, 'sampling': 'linear'} learning_rate (Choice) {'default': 0.01, 'conditions': [], 'values': [0.01, 0.001,
0.0001], 'ordered': True}
units_2 (Int) {'default': None, 'conditions': [], 'min_value': 32, 'max_value': 512, 'step': 32, 'sampling': 'linear'} dense_activation_2 (Choice) {'default': 'relu', 'conditions': [], 'values': ['relu', 'tanh', 'sigmoid'], 'ordered': False} dropout_2 (Float) {'default': 0.25, 'conditions': [], 'min_value': 0.0, 'max_value': 0.5, 'step': 0.05, 'sampling': 'linear'} units_3 (Int) {'default': None, 'conditions': [], 'min_value': 32, 'max_value': 512, 'step': 32, 'sampling': 'linear'} dense_activation_3 (Choice) {'default': 'relu', 'conditions': [], 'values': ['relu', 'tanh', 'sigmoid'], 'ordered': False} dropout_3 (Float) {'default': 0.25, 'conditions': [], 'min_value': 0.0, 'max_value': 0.5, 'step': 0.05, 'sampling': 'linear'} units_4 (Int) {'default': None, 'conditions': [], 'min_value': 32, 'max_value': 512, 'step': 32, 'sampling': 'linear'} dense_activation_4 (Choice) {'default': 'relu', 'conditions': [], 'values': ['relu', 'tanh', 'sigmoid'], 'ordered': False} dropout_4 (Float) {'default': 0.25, 'conditions': [], 'min_value': 0.0, 'max_value': 0.5, 'step': 0.05, 'sampling': 'linear'} units_5 (Int) {'default': None, 'conditions': [], 'min_value': 32, 'max_value': 512, 'step': 32, 'sampling': 'linear'} dense_activation_5 (Choice) {'default': 'relu', 'conditions': [], 'values': ['relu', 'tanh', 'sigmoid'], 'ordered': False} dropout_5 (Float) {'default': 0.25, 'conditions': [], 'min_value': 0.0, 'max_value': 0.5, 'step': 0.05, 'sampling': 'linear'} units_6 (Int) {'default': None, 'conditions': [], 'min_value': 32, 'max_value': 512, 'step': 32, 'sampling': 'linear'} dense_activation_6 (Choice) {'default': 'relu', 'conditions': [], 'values': ['relu', 'tanh', 'sigmoid'], 'ordered': False} dropout_6 (Float) {'default': 0.25, 'conditions': [], 'min_value': 0.0, 'max_value': 0.5, 'step': 0.05, 'sampling': 'linear'} Results summary Results in my_dir/consumer_complaints Showing 10 best trials Objective(name="val_loss", direction="min")
Trial 3 summary Hyperparameters: units: 224 num_layers: 7 units_0: 416 dense_activation_0: sigmoid dropout_0: 0.05 units_1: 64 dense_activation_1: relu dropout_1: 0.35000000000000003 learning_rate: 0.001 units_2: 416 dense_activation_2: relu dropout_2: 0.15000000000000002 units_3: 32 dense_activation_3: sigmoid dropout_3: 0.45 units_4: 256 dense_activation_4: relu dropout_4: 0.05 units_5: 288 dense_activation_5: tanh dropout_5: 0.05 units_6: 224 dense_activation_6: tanh dropout_6: 0.30000000000000004 Score: 0.8185505867004395
Trial 2 summary Hyperparameters: units: 32 num_layers: 7 units_0: 128 dense_activation_0: relu dropout_0: 0.45 units_1: 320 dense_activation_1: relu dropout_1: 0.15000000000000002 learning_rate: 0.001 units_2: 192 dense_activation_2: sigmoid dropout_2: 0.35000000000000003 units_3: 96 dense_activation_3: sigmoid dropout_3: 0.15000000000000002 units_4: 128 dense_activation_4: tanh dropout_4: 0.2 units_5: 64 dense_activation_5: sigmoid dropout_5: 0.35000000000000003 units_6: 32 dense_activation_6: relu dropout_6: 0.25 Score: 0.8366087079048157
Trial 4 summary Hyperparameters: units: 416 num_layers: 4 units_0: 512 dense_activation_0: sigmoid dropout_0: 0.2 units_1: 512 dense_activation_1: relu dropout_1: 0.1 learning_rate: 0.01 units_2: 480 dense_activation_2: tanh dropout_2: 0.4 units_3: 64 dense_activation_3: sigmoid dropout_3: 0.45 units_4: 160 dense_activation_4: sigmoid dropout_4: 0.30000000000000004 units_5: 384 dense_activation_5: tanh dropout_5: 0.4 units_6: 160 dense_activation_6: relu dropout_6: 0.15000000000000002 Score: 0.8370530803998312
Trial 0 summary Hyperparameters: units: 32 num_layers: 3 units_0: 32 dense_activation_0: relu dropout_0: 0.15000000000000002 units_1: 160 dense_activation_1: relu dropout_1: 0.2 learning_rate: 0.01 units_2: 32 dense_activation_2: relu dropout_2: 0.25 Traceback (most recent call last): File "/opt/conda/lib/python3.10/site-packages/keras_tuner/engine/base_tuner.py", line 270, in _try_run_and_update_trial self._run_and_update_trial(trial, *fit_args, **fit_kwargs) File "/opt/conda/lib/python3.10/site-packages/keras_tuner/engine/base_tuner.py", line 235, in _run_and_update_trial results = self.run_trial(trial, *fit_args, **fit_kwargs) File "/opt/conda/lib/python3.10/site-packages/keras_tuner/engine/tuner.py", line 287, in run_trial obj_value = self._build_and_fit_model(trial, *args, **copied_kwargs) File "/opt/conda/lib/python3.10/site-packages/keras_tuner/engine/tuner.py", line 214, in _build_and_fit_model results = self.hypermodel.fit(hp, model, *args, **kwargs) File "/opt/conda/lib/python3.10/site-packages/keras_tuner/engine/hypermodel.py", line 144, in fit return model.fit(*args, **kwargs) File "/opt/conda/lib/python3.10/site-packages/keras/utils/traceback_utils.py", line 70, in error_handler raise e.with_traceback(filtered_tb) from None File "/tmp/__autograph_generated_filelq8oqac4.py", line 15, in tf__train_function retval_ = ag__.converted_call(ag__.ld(step_function), (ag__.ld(self), ag__.ld(iterator)), None, fscope) ValueError: in user code:
File "/opt/conda/lib/python3.10/site-packages/keras/engine/training.py", line 1284, in train_function * return step_function(self, iterator) File "/opt/conda/lib/python3.10/site-packages/keras/engine/training.py", line 1268, in step_function ** outputs = model.distribute_strategy.run(run_step, args=(data,)) File "/opt/conda/lib/python3.10/site-packages/keras/engine/training.py", line 1249, in run_step ** outputs = model.train_step(data) File "/opt/conda/lib/python3.10/site-packages/keras/engine/training.py", line 1050, in train_step y_pred = self(x, training=True) File "/opt/conda/lib/python3.10/site-packages/keras/utils/traceback_utils.py", line 70, in error_handler raise e.with_traceback(filtered_tb) from None File "/opt/conda/lib/python3.10/site-packages/keras/engine/input_spec.py", line 298, in assert_input_compatibility raise ValueError(
ValueError: Input 0 of layer "sequential" is incompatible with the layer: expected shape=(None, 7732, 3), found shape=(None, 250)
I was trying keras tuner to perform hyper parameter tuning. I was expecting best hyper parameters for my dataset on neural network but I got value error