How can I calculate sensitivity, precision, recall and F1 score of my binary dataset. The output values are 0 and 1.
model = Net()
optimizer = optim.Adam(model.parameters(), lr=0.001)
loss_func = nn.NLLLoss()
criterion = nn.CrossEntropyLoss()
epochs = 2
loss_list = []
model.train()
for epoch in range(epochs):
total_loss = []
for i, data in enumerate(train_ldr, 0):
# get the inputs; data is a list of [inputs, labels]
X_train,Y_train = data.values()
X_train = X_train.unsqueeze(0)
X_train = X_train.unsqueeze(1)
optimizer.zero_grad()
# Forward pass
output = model(X_train)
# Calculating loss
loss = criterion(output, Y_train)
# Backward pass
loss.backward()
# Optimize the weights
optimizer.step()
total_loss.append(loss.item())
loss_list.append(sum(total_loss)/len(total_loss))
print('Training [{:.0f}%]\tLoss: {:.4f}'.format(
100. * (epoch + 1) / epochs, loss_list[-1]))
model.eval()
criterion = nn.CrossEntropyLoss()
with T.no_grad():
correct = 0
for i, data in enumerate(test_ldr, 0):
X_test,Y_test = data.values()
X_test = X_test.unsqueeze(0)
X_test = X_test.unsqueeze(1)
output = model(X_test)
pred = output.argmax(dim=1, keepdim=True)
correct += pred.eq(Y_test.view_as(pred)).sum().item()
loss = criterion(output, Y_test)
total_loss.append(loss.item())
print('Performance on test data:\n\tLoss: {:.4f}\n\tAccuracy: {:.1f}%'.format(
sum(total_loss) / len(total_loss),
correct / len(test_ldr) * 100)
)