gpt4 book ai didi

pytorch - 1x1 卷积作为 Pytorch 中的分类层

转载 作者:行者123 更新时间:2023-12-05 07:18:21 26 4
gpt4 key购买 nike

我正在尝试使用神经网络将图像 block 分为 10 个不同的类别。我的想法(借自 this 文章是使用预训练 VGG 网络的前 5 层并将 1x1 卷积应用于此编码器。因此,给定 VGG 网络的前 5 层:

Sequential(
(0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace=True)
(2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace=True)
(4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(5): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(6): ReLU(inplace=True)
(7): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(8): ReLU(inplace=True)
(9): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(10): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(11): ReLU(inplace=True)
(12): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(13): ReLU(inplace=True)
(14): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(15): ReLU(inplace=True)
(16): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(17): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(18): ReLU(inplace=True)
(19): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(20): ReLU(inplace=True)
(21): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(22): ReLU(inplace=True)
(23): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(24): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(25): ReLU(inplace=True)
(26): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(27): ReLU(inplace=True)
(28): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(29): ReLU(inplace=True)
(30): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)

如何添加一个层来将每个激活分类为 n_classes?我正在尝试从 512(最后一层中的过滤器数量)到 n_classes 的 1x1 卷积,如下所示:

nn.Sequential(
nn.Conv2d(in_channels=512, out_channels=n_classes, kernel_size=1),
nn.Softmax(dim=1)
)

该网络提供 (batch_size, n_classes H//32, W//32) 输出。但是,对于给定的图像,每个类的所有输出都相等,我的意思是,对于给定的批处理 B 和 C 类,所有值都相同。

我曾尝试使用 CrossEntropyLoss 进行训练,甚至转换为 logits 并应用 BCELoss,但没有成功。我还在我的火车环路中尝试了其他网络,但没有发生这种情况。

有什么线索吗?

谢谢

最佳答案

终于解决了自己管理。这是最后一层权重的初始化

最佳

关于pytorch - 1x1 卷积作为 Pytorch 中的分类层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58347382/

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