gpt4 book ai didi

python - 将 CNN 模型转化为类

转载 作者:行者123 更新时间:2023-11-30 09:40:29 24 4
gpt4 key购买 nike

我正在尝试在 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)
鉴于我正在处理多标签分类问题,实现此目的的最佳方法是什么?如果有任何见解,我将不胜感激。

最佳答案

  1. 您应该使用 torch.nn.BCEWithLogitsLoss 进行多标签分类(和数值稳定性),而不使用 LogSigmoidNLLLoss 作为输出。

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

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

关于python - 将 CNN 模型转化为类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59014699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com