Позвольте мне сначала объяснить цель.Допустим, у меня есть 1000 изображений, каждое из которых имеет соответствующий показатель качества [в диапазоне от 0 до 10].Сейчас я пытаюсь выполнить оценку качества изображения с использованием CNN с регрессией (в PyTorch).Я разделил изображения на пятна одинакового размера.Теперь я создал сеть CNN для выполнения линейной регрессии.
Ниже приведен код:
class MultiLabelNN(nn.Module):
def __init__(self):
super(MultiLabelNN, self).__init__()
self.conv1 = nn.Conv2d(1, 32, 5)
self.pool = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(32, 64, 5)
self.fc1 = nn.Linear(3200,1024)
self.fc2 = nn.Linear(1024, 512)
self.fc3 = nn.Linear(512, 1)
def forward(self, x):
x = self.conv1(x)
x = F.relu(x)
x = self.pool(x)
x = self.conv2(x)
x = F.relu(x)
x = x.view(-1, 3200)
x = self.fc1(x)
x = F.relu(x)
x = self.fc2(x)
x = F.relu(x)
x = self.fc3(x)
return x
При запуске этого кода сети я получаю следующую ошибку
формы ввода и цели не совпадают: input [400 x 1], target [200 x 1]
цель target [200x1], потому что я выбрал размер пакета 200. Я нашелрешение, которое, если я изменю «self.fc1 = nn.Linear (3200,1024)» и «x = x.view (-1, 3200)» здесь с 3200 на 6400, мой код выполняется без ошибок.
Точно так же он выдаст ошибку ввода, и целевые фигуры не совпадают: input [100 x 1], target [200 x 1], если я поставлю 12800 вместо 6400
Теперь я сомневаюсь, что яне в состоянии понять причину этого.Если я даю 200 изображений в качестве входных данных для моей сети, то почему меняется форма ввода при изменении параметров при переходе от сверточного слоя к полностью подключенному слою.Я надеюсь, что я ясно упомянул свое сомнение.Даже если у меня есть сомнения, спросите меня.Это будет отличная помощь.Заранее спасибо.