Using transfer learning for a multi-label image classification task (changed the classifier layer of resnet50).
I have changed the fully connected layer of resnet50 as follows :
model = models.resnet50(pretrained=True)
n_inputs = model.fc.in_features
model.fc = nn.Sequential(
nn.Linear(n_inputs, 256),
nn.ReLU(),
nn.Dropout(0.4),
nn.Linear(256, n_classes),
nn.LogSoftmax(dim=1))
model = model.to(device)
def fit(n_epochs):
for epoch in range(n_epochs):
running_loss = 0.0
for i, (inputs,labels) in enumerate(Bar(train_loader)):
inputs, labels = inputs.to(device), labels.to(device)
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
print("Finished epoch {}; running_loss =", running_loss)
print('Finished Training' )
fit(1)
4794/4794: [===============================>] - ETA 0.1s
Finished epoch {}; running_loss = 1571.782483279705
Finished Training
fit(1)
4794/4794: [===============================>] - ETA 0.1s
Finished epoch {}; running_loss = 1571.5039553046227
Finished Training
My loss functions and optimizers are
criterion = nn.NLLLoss()
optimizer = optim.Adam(model.parameters(), lr=0.00001)
After each epoch, my model is not getting any better. Is there any mistake in my training loop