【问题标题】:Pytorch neural network (probably) does not learnPytorch 神经网络(可能)不学习
【发布时间】:2019-06-01 20:48:49
【问题描述】:

我的作业是在给定的 3000 只青蛙、猫和狗的数据集上训练一个网络。我建立的网络似乎根本没有改善。这是为什么呢?

训练数据 x_train 是一个形状为 (3000,32,32,3) 的 numpy ndarray。

class Netz(nn.Module):
    def __init__(self):
        super(Netz, self).__init__()
        self.conv1 = nn.Conv2d(3,28,5)
        self.conv2 = nn.Conv2d(28,100,5)
        self.fc1 = nn.Linear(2500,120)
        self.fc2 = nn.Linear(120,3)

    def forward(self, x):
        x = self.conv1(x)
        x = F.max_pool2d(x,2)
        x = F.relu(x)
        x = self.conv2(x)
        x = F.max_pool2d(x,2)
        x = F.relu(x)
        x = x.view(-1,2500)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return F.log_softmax(x)


model = Netz()
optimizer = optim.SGD(model.parameters(), lr=0.1, momentum=0.8)

def train(epoch):
    model.train()
    avg_loss = 0
    correct = 0
    criterion = F.nll_loss
    for i in range(len(x_train)):
        optimizer.zero_grad()
        x = torch.tensor(x_train[i])
        x = x.permute(2, 0, 1)
        x = Variable(x)
        x = x.unsqueeze(0)
        target = Variable(torch.Tensor([y_train[i]]).type(torch.LongTensor))
        out = model(x)
        loss = criterion(out, target)
        avg_loss += loss
        pred = out.argmax(dim=1, keepdim=True)
        correct += pred.eq(target.view_as(pred)).sum().item()
        loss.backward()
        optimizer.step()
        if i%64==0:
            print("epoch ", epoch, " [", i, "/", len(x_train), "] average loss: ", avg_loss.item() / 64, " correct: ", correct, "/64")
            avg_loss = 0
            correct = 0

我预计平均误差会随着时间的推移而减少,但它似乎会一直围绕相同的数字波动......

【问题讨论】:

  • 您可能希望增加构建 for 循环的方式。尝试为网络提供更大的批大小或降低学习率。

标签: neural-network pytorch


【解决方案1】:

您的损失在波动意味着您的网络不够强大,无法提取有意义的嵌入。我可以推荐尝试以下几种方法之一。

  1. 添加更多层。
  2. 使用较小的学习率。
  3. 如果您只有小数据集,请使用更大的数据集或使用预训练模型。
  4. 标准化您的数据集。
  5. 洗牌训练集。
  6. 使用超参数。

【讨论】:

    猜你喜欢
    • 2016-07-11
    • 1970-01-01
    • 2019-03-15
    • 2011-08-17
    • 2020-10-29
    • 2016-11-28
    • 2013-04-22
    • 2018-10-05
    • 1970-01-01
    相关资源
    最近更新 更多