I am working on binary classification with time-series data. My approach is to, given a 30-second long signal, split it into n (overlapping) 2-second long signals, feed each one of these n 2-second long signals into the model, get n predictions as output in an array, and then compute the prediction of the whole 30-second long signal by aggregating the n predictions, before using this single prediction in the loss.
My model isn’t learning, and I suspect it is because I have not adequately set .requires_grad=true in the right places during this entire computation.
Here’s my code:
input_size = 30000
window_size = 2000
window_step = 100
for i in range(batch_size):
signal = torch.reshape(batch_x[i], (1, 1, input_size))
steps = ((input_size - window_size) / window_step) + 1
agg_pred = []
loss = 0
for j in range(steps):
signal_segment = signal[:, :, j*window_step:j*window_step + window_size]
y_pred = model(signal_segment)
agg_pred.append(int(round(y_pred)))
signal_pred = torch.tensor(np.argmax(np.bincount(np.array(agg_pred))), dtype=torch.float, device="cuda", requires_grad=True)
loss += nn.BCELoss(signal_pred, batch_y[i])
loss_values.append(loss)
optimizer.zero_grad()
loss.backward()
optimizer.step()
Any ideas as to what I could try modifying?