训练 CNN 时 For 循环中断

时间:2021-02-17 19:27:40

标签: python for-loop neural-network pytorch conv-neural-network

我构建了一个相对较深的 CNN,它接收 224x224 的图像。我有一个大约 5000 张图像的训练集,我用它来使用传统的 for 循环方法训练我的 CNN。但是,我有一个问题,循环只打印第一个 epoch 的结果,然后继续运行(即单元永远保持执行)。

我的输出代码:

#Model training

epochs = 2

for epoch in range(epochs):

    running_loss = 0

    #Train
    cnn.train()

    for images, labels in trainloader:
        if cuda:
            images, labels = images.to(device), labels.to(device)

        optimiser.zero_grad()
        outputs = cnn(images)
        loss = criterion(outputs, labels)
        running_loss += loss.item() * images.size(0)
        loss.backward()
        optimiser.step()
    
    epochs_train_loss = running_loss / len(trainloader.dataset)
    print ("Epoch {}, Training Loss: {}".format(epoch, epochs_train_loss))

输出:

Epoch 0, Training Loss: 0.3014729377767928

1 个答案:

答案 0 :(得分:0)

我认为您看不到下一个时期的输出的原因是内部训练循环:

for images, labels in trainloader:
        if cuda:
            images, labels = images.to(device), labels.to(device)

        optimiser.zero_grad()
        outputs = cnn(images)
        loss = criterion(outputs, labels)
        running_loss += loss.item() * images.size(0)
        loss.backward()
        optimiser.step()

在 epoch 0 之后卡住或停止。您可以通过在 optimiser.step() 语句之后放置一个打印语句来检查这一点。

这些事情可能会很麻烦。祝你好运!