【问题标题】:Turn CNN model into class将 CNN 模型变成课堂
【发布时间】:2019-11-25 06:43:50
【问题描述】:

我正在尝试在 Pytorch 中构建一个用于多标签分类的 CNN(每个图像可以有多个标签)。到目前为止,我已经建立了如下模型:

model.fc = nn.Sequential(nn.Linear(2048, 512),
                                 nn.ReLU(),
                                 nn.Dropout(0.2),
                                 nn.Linear(512, 10),
                                 nn.LogSigmoid())
                                 # nn.LogSoftmax(dim=1))

criterion = nn.NLLLoss()
# criterion = nn.BCELoss()
optimizer = optim.Adam(model.fc.parameters(), lr=0.003)

但我想使用类似以下示例的类来构建它:

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 10, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(10, 20, 5)
        self.fc1 = nn.Linear(20 * 22 * 39, 100)
        self.fc2 = nn.Linear(100, 50)
        self.fc3 = nn.Linear(50, 10)
        self.fc4 = nn.Linear(10, 3)

    def forward(self, x):
        x = x.view(-1, 3, 100, 170)
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 20 * 22 * 39)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = F.relu(self.fc3(x))
        return self.fc4(x)

鉴于我正在处理多标签分类问题,实现这一目标的最佳方法是什么?任何见解我都会很感激。

【问题讨论】:

  • 你有什么特别的理由想要在课堂上使用它吗?
  • 只是出于好奇,我想知道如何构建它。谢谢!

标签: python machine-learning neural-network conv-neural-network pytorch


【解决方案1】:
  1. 您应该使用torch.nn.BCEWithLogitsLoss 进行多标签分类(和数值稳定性),不要使用LogSigmoidNLLLoss 作为输出。

  2. 您必须批量输出每个元素的N 元素,其中1 在向量中的位置N 表示图像上存在类N

  3. 你的网络很好,只要你有 3 个标签要预测(01)。您可能会考虑它的设计或使用预训练的东西,而不是它至少应该运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多