RuntimeError: Given groups=1, weight of size [32, 1, 5, 5], expected input[256, 3, 256, 256] to have 1 channels, but got 3 channels instead

RuntimeError: Given groups=1, weight of size [32, 1, 5, 5], expected input[256, 3, 256, 256] to have 1 channels, but got 3 channels instead

我正在尝试 运行 以下代码,但出现错误:

import torch.nn as nn
import torch.nn.functional as F


class EmbeddingNet(nn.Module):
    def __init__(self):
        super(EmbeddingNet, self).__init__()
        self.convnet = nn.Sequential(nn.Conv2d(1, 32, 5), nn.PReLU(),
                                     nn.MaxPool2d(2, stride=2),
                                     nn.Conv2d(32, 64, 5), nn.PReLU(),
                                     nn.MaxPool2d(2, stride=2))

        self.fc = nn.Sequential(nn.Linear(64 * 4 * 4, 256),
                                nn.PReLU(),
                                nn.Linear(256, 256),
                                nn.PReLU(),
                                nn.Linear(256, 2)
                                )

    def forward(self, x):
        output = self.convnet(x)
        output = output.view(output.size()[0], -1)
        output = self.fc(output)
        return output

    def get_embedding(self, x):
        return self.forward(x)


class EmbeddingNetL2(EmbeddingNet):
    def __init__(self):
        super(EmbeddingNetL2, self).__init__()

    def forward(self, x):
        output = super(EmbeddingNetL2, self).forward(x)
        output /= output.pow(2).sum(1, keepdim=True).sqrt()
        return output
   
    def get_embedding(self, x):
        return self.forward(x)'''enter code here

错误很简单。它说你给了 3 个通道图像而不是 1 个通道。

一个更改将在此块中

class EmbeddingNet(nn.Module):
  def __init__(self):
    super(EmbeddingNet, self).__init__()
    self.convnet = nn.Sequential(nn.Conv2d(3, 32, 5),  #instead of 1 i have made it 3
                                 nn.PReLU(),
                                 nn.MaxPool2d(2, stride=2),
                                 nn.Conv2d(32, 64, 5), nn.PReLU(),
                                 nn.MaxPool2d(2, stride=2))

    self.fc = nn.Sequential(nn.Linear(64 * 4 * 4, 256),
                            nn.PReLU(),
                            nn.Linear(256, 256),
                            nn.PReLU(),
                            nn.Linear(256, 2)
                            )

编辑下一个错误:
改成这个

self.fc = nn.Sequential(nn.Linear(64 * 61 * 61, 256), #here is the change
                    nn.PReLU(),
                    nn.Linear(256, 256),
                    nn.PReLU(),
                    nn.Linear(256, 2)
                    )