我构建了一个相对较深的 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
答案 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()
语句之后放置一个打印语句来检查这一点。
这些事情可能会很麻烦。祝你好运!