def ActivityNetV3(n_sensors, window_size):
#inputs = Input(shape=(n_sensors, window_size, 1))
inputs = Input(shape=(n_sensors, window_size, 1))
print("Inside the model")
print(inputs.shape)
x = Conv2D(
filters=1, kernel_size=(1, 1), weights=[np.array([[[[1.0]]]])], padding='same',
activation=None, trainable=False, use_bias=False,
)(inputs)
x = BatchNormalization(center=False, scale=True,epsilon=1e-5)(x)
x = ZeroPadding2D(padding=((0,0),(1,1)))(x) # (inputs)
x = Conv2D(
32,
kernel_size=(n_sensors, tconfig.KERNEL_SIZE),
strides=1,
padding="valid",
use_bias=False,
name="Conv00",
)(x)
x = BatchNormalization(
name="Conv00/BatchNorm"
)(x)
x = Activation(tconfig.ACTIVATION)(x)
x = PrintLayer("After initial Conv2D and BatchNorm:")(x)
x = check_numerics(x, "After initial Conv2D and BatchNorm")
x = stack_fn(x, None)
last_conv_ch = _depth(K.int_shape(x)[tconfig.CHANNEL_AXIS] * 3) # 3
x = Conv2D(
last_conv_ch,
kernel_size=1,
padding="same",
use_bias=False,
name="Conv_1",
)(x)
x = BatchNormalization(
name="Conv_1/BatchNorm"
)(x)
x = Activation(tconfig.ACTIVATION)(x)
x = PrintLayer("After stack_fn and additional Conv2D:")(x)
x = check_numerics(x, "After initial Conv2D and BatchNorm")
x = GlobalAvgPool2D(keepdims=True)(x)
x = Conv2D(
tconfig.LAST_POINT_CH,
kernel_size=1,
padding="same",
use_bias=True,
name="Conv_2",
)(x)
x = Activation(tconfig.ACTIVATION)(x)
x = Dropout(tconfig.DROPOUT_RATE)(x)
x = Conv2D(
5, kernel_size=1, padding="same", name="Logits"
)(x)
x = Flatten()(x)
outputs = x
model = Model(inputs=inputs, outputs=outputs)
return model
def get_siamese_model(n_sensors, window_size):
base_network = ActivityNetV3(n_sensors, window_size)
input_a = Input(shape=(n_sensors, window_size,1))
input_b = Input(shape=(n_sensors, window_size,1))
encoded_a = base_network(input_a)
encoded_b = base_network(input_b)
L1_layer = Lambda(lambda tensors: K.abs(tensors[0] - tensors[1]))
L1_distance = L1_layer([encoded_a, encoded_b])
prediction = Dense(1, activation='sigmoid')(L1_distance)
siamese_net = Model(inputs=[input_a, input_b], outputs=prediction)
return siamese_net
def get_generator(X_train,X_val,y_train,y_val,s):
while True:
pairs,targets=get_batch(X_train,X_val,y_train,y_val,s)
yield (pairs,targets)
def get_batch(X_train,X_val,y_train,y_val,s):
rng=np.random.default_rng()
if s == 'train':
X=X_train.copy()
categories = y_train.shape[0]
elif s == 'val':
X=X_val.copy()
categories = y_val.shape[0]
population = X.shape[0]
n_sensors, timesteps, one = X.shape[1], X.shape[2], X.shape[3]
#print(population, n_sensors, timesteps,one)
categories = rng.choice(population,size=(tconfig.BATCH_SIZE,),replace=False)
pairs=[np.zeros((tconfig.BATCH_SIZE,n_sensors,timesteps,1)) for _ in range(2)]
targets = np.zeros((tconfig.BATCH_SIZE,))
targets[tconfig.BATCH_SIZE//2:]=1
for i in range(tconfig.BATCH_SIZE):
category=categories[i]
# print(category)
idx_1=rng.integers(0,population-1)
# print(idx_1)
# print(X[category,idx_1])
#pairs[0][i,:,:,0]=X[idx_1].reshape(n_sensors,timesteps)
pairs[0][i,:,:,0]=X[idx_1,:,:,0]
idx_2=rng.integers(0,population-1)
if i>=tconfig.BATCH_SIZE//2:
category_2=category
else:
category_2 = rng.choice(np.delete(np.arange(population), category))
pairs[1][i,:,:,0]=X[category_2,:,:,0]
#pairs[1][i,:,:,0]=X[category_2]#.reshape(n_sensors,timesteps)
return pairs,targets
def train_q_model(X_train,X_val,y_train,y_val):
# general training
model = ActivityNetV3.get_siamese_model(X_train.shape[1], config.WINDOW_SIZE)
model.compile(
optimizer=Adam(learning_rate=1e-6),
loss='sparse_categorical_crossentropy',
metrics='accuracy',
)
history = model.fit(ActivityNetV3.get_generator(X_train,X_val,y_train,y_val,s="train"),
epochs=1,
class_weight=ActivityNetV3.get_sample_weights(y_train),
callbacks=ActivityNetV3.get_callback_info(),
validation_data=ActivityNetV3.get_generator(X_train,X_val,y_train,y_val,s="val")
)
return model
def check_for_nans_and_infs(data):
if np.any(np.isnan(data)) or np.any(np.isinf(data)):
raise ValueError("Data contains NaN or Inf values")
for cow_name in test_cows:
K.clear_session()
gc.collect()
print(cow_name)
cow_df = dat.loc[dat['cow_name'] == cow_name].copy()
train_df = dat.loc[dat['cow_name'] != cow_name]
test_dat = cow_df.loc[~cow_df.index.isin(dat[-num_of_aug1:].index)].reset_index(drop=True)
train_raw = train_df[train_df.index < (len(dat)-num_of_aug1)].reset_index(drop=True)
train_aug = train_df[train_df.index >= (len(dat)-num_of_aug1)].reset_index(drop=True)
num_of_aug2 = len(train_aug)
train = pd.concat([train_raw, train_aug]).reset_index(drop=True)
X_train, y_train, X_val, y_val = split_train_val(train, num_of_aug2)
X_train = X_train[:, :len(config.ACC_COLS), :, :].copy()
X_val = X_val[:, :len(config.ACC_COLS), :, :].copy()
y_train = np.array([config.LABEL_DECODER.index(y) for y in y_train]).copy()
y_val = np.array([config.LABEL_DECODER.index(y) for y in y_val]).copy()
Below is the error I am getting
————————————————————————— InvalidArgumentError Traceback (most recent call last) ~AppDataLocalTempipykernel_219721555082413.py in <module> 47 # break # Exit after the first batch to check shape 48 —> 49 model = train_q_model(X_train,X_val,y_train,y_val) 50 51 # if len(test_dat) > 0: ~AppDataLocalTempipykernel_219721555082413.py in train_q_model(X_train, X_val, y_train, y_val) 11 class_weight=ActivityNetV3.get_sample_weights(y_train), 12 callbacks=ActivityNetV3.get_callback_info(), —> 13 validation_data=ActivityNetV3.get_generator(X_train,X_val,y_train,y_val,s=”val”) 14 ) 15 return model ~anaconda3envsSaranglibsite-packageskerasutilstraceback_utils.py in error_handler(*args, **kwargs) 65 except Exception as e: # pylint: disable=broad-except 66 filtered_tb = _process_traceback_frames(e._traceback_) —> 67 raise e.with_traceback(filtered_tb) from None 68 finally: 69 del filtered_tb ~anaconda3envsSaranglibsite-packagestensorflowpythoneagerexecute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name) 53 ctx.ensure_initialized() 54 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name, —> 55 inputs, attrs, num_outputs) 56 except core._NotOkStatusException as e: 57 if name is not None: InvalidArgumentError: Graph execution error: Detected at node ‘gradient_tape/model_1/model/tf.debugging.check_numerics_1/CheckNumerics’ defined at (most recent call last): File “C:UsersSarangKulkarnianaconda3envsSaranglibrunpy.py”, line 193, in _run_module_as_main “_main_”, mod_spec) File “C:UsersSarangKulkarnianaconda3envsSaranglibrunpy.py”, line 85, in _run_code exec(code, run_globals) File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packagesipykernel_launcher.py”, line 17, in <module> app.launch_new_instance() File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packagestraitletsconfigapplication.py”, line 992, in launch_instance app.start() File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packagesipykernelkernelapp.py”, line 712, in start self.io_loop.start() File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packagestornadoplatformasyncio.py”, line 215, in start self.asyncio_loop.run_forever() File “C:UsersSarangKulkarnianaconda3envsSaranglibasynciobase_events.py”, line 528, in run_forever self._run_once() File “C:UsersSarangKulkarnianaconda3envsSaranglibasynciobase_events.py”, line 1764, in _run_once handle._run() File “C:UsersSarangKulkarnianaconda3envsSaranglibasyncioevents.py”, line 88, in _run self._context.run(self._callback, *self._args) File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packagesipykernelkernelbase.py”, line 510, in dispatch_queue await self.process_one() File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packagesipykernelkernelbase.py”, line 499, in process_one await dispatch(*args) File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packagesipykernelkernelbase.py”, line 406, in dispatch_shell await result File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packagesipykernelkernelbase.py”, line 730, in execute_request reply_content = await reply_content File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packagesipykernelipkernel.py”, line 390, in do_execute res = shell.run_cell(code, store_history=store_history, silent=silent) File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packagesipykernelzmqshell.py”, line 528, in run_cell return super().run_cell(*args, **kwargs) File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packagesIPythoncoreinteractiveshell.py”, line 2915, in run_cell raw_cell, store_history, silent, shell_futures) File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packagesIPythoncoreinteractiveshell.py”, line 2960, in _run_cell return runner(coro) File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packagesIPythoncoreasync_helpers.py”, line 78, in _pseudo_sync_runner coro.send(None) File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packagesIPythoncoreinteractiveshell.py”, line 3186, in run_cell_async interactivity=interactivity, compiler=compiler, result=result) File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packagesIPythoncoreinteractiveshell.py”, line 3377, in run_ast_nodes if (await self.run_code(code, result, async_=asy)): File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packagesIPythoncoreinteractiveshell.py”, line 3457, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File “C:UsersSarangKulkarniAppDataLocalTempipykernel_219721555082413.py”, line 49, in <module> model = train_q_model(X_train,X_val,y_train,y_val) File “C:UsersSarangKulkarniAppDataLocalTempipykernel_219721555082413.py”, line 13, in train_q_model validation_data=ActivityNetV3.get_generator(X_train,X_val,y_train,y_val,s=”val”) File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packageskerasutilstraceback_utils.py”, line 64, in error_handler return fn(*args, **kwargs) File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packageskerasenginetraining.py”, line 1409, in fit tmp_logs = self.train_function(iterator) File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packageskerasenginetraining.py”, line 1051, in train_function return step_function(self, iterator) File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packageskerasenginetraining.py”, line 1040, in step_function outputs = model.distribute_strategy.run(run_step, args=(data,)) File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packageskerasenginetraining.py”, line 1030, in run_step outputs = model.train_step(data) File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packageskerasenginetraining.py”, line 893, in train_step self.optimizer.minimize(loss, self.trainable_variables, tape=tape) File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packageskerasoptimizersoptimizer_v2optimizer_v2.py”, line 538, in minimize loss, var_list=var_list, grad_loss=grad_loss, tape=tape) File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packageskerasoptimizersoptimizer_v2optimizer_v2.py”, line 590, in _compute_gradients grads_and_vars = self._get_gradients(tape, loss, var_list, grad_loss) File “C:UsersSarangKulkarnianaconda3envsSaranglibsite-packageskerasoptimizersoptimizer_v2optimizer_v2.py”, line 471, in _get_gradients grads = tape.gradient(loss, var_list, grad_loss) Node: ‘gradient_tape/model_1/model/tf.debugging.check_numerics_1/CheckNumerics’ Not a number (NaN) or infinity (Inf) values detected in gradient. b’After initial Conv2D and BatchNorm’ : Tensor had NaN values [[{{node gradient_tape/model_1/model/tf.debugging.check_numerics_1/CheckNumerics}}]] [Op:__inference_train_function_3371]
Also I have the shape of (None, 3, 100, 1), and I am working with timeseries classification prob
I have tried checking inf values and Nan values, also I have tried changing learning rate and other model parameter related stuff, but none worked for me.
Sarang is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.