【问题标题】:Broken For Loop when Training CNN训练 CNN 时 For Loop 中断
【发布时间】:2021-02-17 19:27:40
【问题描述】:

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

我的输出代码:

#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

【问题讨论】:

  • 你还没有发布这个问题吗?

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


【解决方案1】:

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

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() 语句之后放置打印语句来检查这一点。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    相关资源
    最近更新 更多