Модель не обучается
я создал CNN для бинарной классификации изображений:
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(3, 32, 5)
self.conv2 = nn.Conv2d(32, 64, 5)
self.conv3 = nn.Conv2d(64, 124, 5)
self.fc1 = nn.Linear(15004, 128)
self.fc2 = nn.Linear(128, 2)
def forward(self, x):
x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
x = F.max_pool2d(F.relu(self.conv2(x)), 2)
x = F.max_pool2d(F.relu(self.conv3(x)), 2)
x = torch.flatten(x, 1)
x = F.relu(self.fc1(x))
x = self.fc2(x)
return x
Происходит обучение :
num_epochs = 3
num_classes = 10
batch_size = 100
learning_rate = 0.01
model = Net()
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
loss_list = []
acc_list = []
total_step = len(testset)
for epoch in range(num_epochs):
for i in range(748):
# Прямой запуск
if i!=373:
outputs = model(trainset[i*100 : (i+1)*100].float())
c = target[i*100 : (i+1)*100]
loss = criterion(torch.as_tensor(outputs), torch.as_tensor(c))
loss_list.append(loss.item())
else:
outputs = model(trainset[i * 100: 37384].float())
loss = criterion(torch.as_tensor(outputs), torch.as_tensor(target[i * 100: 37384]))
loss_list.append(loss.item())
optimizer.zero_grad()
loss.backward()
optimizer.step()
if i!=373:
label = labels[i*100 : (i+1)*100]
else:
label = labels[i * 100: 37384]
# Отслеживание точности
total = label.size(0)
_, predicted = torch.max(outputs.data, 1)
correct = (predicted == label).sum().item()
acc_list.append(correct / total)
if (i + 1) % 100 == 0:
print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}, Accuracy: {:.2f}%'
.format(epoch + 1, num_epochs, i + 1, total_step, loss.item(),
(correct / total) * 100))
outputs = model(testset.float())
total = labelstest.size(0)
_, predicted = torch.max(outputs.data, 1)
correct = (predicted == labelstest).sum().item()
print(correct / total)
И во время обучения accuracy для объектов, принадлежащих первому классу составляет 100 процентов, а для объектов, принадлежащих второму классу 0 процентов. Причем в следующей эпохе ситуация не меняется. В чем может быть проблема?