IndexError: index -9223372036854775808 is out of bounds for dimension 1 with size 2

username: Aarya
cooked: <p>Hello,</p>
<p>I am trying to train a siamese network with Binary Cross Entropy.</p>
<p>I have the following error in train_epoch:</p>
<p><code>y_true_2[range(y_true_2.shape[0]), y_true.long()] = 1</code><br>
<code>IndexError: index -9223372036854775808 is out of bounds for dimension 1 with size 2</code></p>
<p>Following is the code snippet for reference:</p>
<pre><code class="lang-auto">def train_epoch(train_loader, model, loss_fn, optimizer, cuda, log_interval, metrics, logging):
    for metric in metrics:
        metric.reset()

    model.train()
    losses = []
    total_loss = 0

    for batch_idx, ((x0, x1), y) in enumerate(train_loader):

        x0, x1, y_true = x0.cpu(), x1.cpu(), y.cpu()
        gc.collect()
        optimizer.zero_grad()
        output1, output2 = model(x0, x1)

        '''Distance metric - PairwiseDistance'''
        p_dist = torch.nn.PairwiseDistance(keepdim=True)

        dy = p_dist(output1, output2)
        dy = torch.nan_to_num(dy)
        y_true = torch.nan_to_num(y_true)

        '''2 lines indicated the normalization of dy to 0 and 1 by dividing it with max value'''

        maximum_dy = torch.max(dy)
        maximum_dy = torch.nan_to_num(maximum_dy)
        dy = dy / maximum_dy

        maximum_y_true = torch.max(y_true)
        maximum_y_true = torch.nan_to_num(maximum_y_true)

        y_true = y_true / maximum_y_true

        dy = torch.squeeze(dy, 1)

        'Output tensor of dimension [4,2] and input tensor of dimension [4] to BCE loss function'
        input_dy = torch.empty(dy.size(0), 2)
        input_dy[:, 0] = 1 - dy
        input_dy[:, 1] = dy

        y_true_2 = torch.zeros(dy.size(0), 2)
        y_true_2[range(y_true_2.shape[0]), y_true.long()] = 1

        m = nn.Sigmoid()
        loss = loss_fn(m(input_dy), y_true_2)

        loss.backward()
        optimizer.step()

        losses.append(loss.item())
        total_loss += loss.item()

        input_dy_metric = torch.round(input_dy)


        for metric in metrics:
            metric(input_dy_metric, y_true_2)
            metric.total += y_true_2.shape[0]

        if batch_idx % log_interval == 0:
            message = 'Train: [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
                batch_idx, len(train_loader),
                100. * batch_idx / len(train_loader), np.mean(losses))
            for metric in metrics:
                message += '\t{}: {}'.format(metric.name(), metric.value())

            print(message)
            losses = []

    total_loss /= (batch_idx + 1)
    return total_loss, metrics
</code></pre>
<p>Please help me with possible solution.<br>
Thanks in advance.</p>

username: ptrblck
cooked: <p>Based on the error message it seems that the target might be uninitialized. Which PyTorch version are you using and if it’s an older one, could you update it to the latest release (<code>1.9.0</code>) or the nightly binary?</p>

username: Aarya
cooked: <p>My torch version is already 1.9.0. Do we have any other solution for this? <a class="mention" href="/u/ptrblck">@ptrblck</a></p>

username: ptrblck
cooked: <p>Thanks for the update. Could you try to create a minimal, executable code snippet to reproduce this issue so that we could try to debug further, please?</p>

username: Aarya
cooked: <p>I think the entire code is needed to debug this issue. If you need any further information please let me know <a class="mention" href="/u/ptrblck">@ptrblck</a></p>