def _evaluate_epoch(axes, tr_loader, val_loader, model, criterion, epoch, stats): """ Evaluates the `model` on the train and validation set. """ with torch.no_grad(): y_true, y_pred = [], [] correct, total = 0, 0 running_loss = [] for X, y in tr_loader: output = model(X) predicted = predictions(output.data) y_true.append(y) y_pred.append(predicted) total += y.size(0) correct += (predicted == y).sum().item() running_loss.append(criterion(output, y).item()) train_loss = np.mean(running_loss) train_acc = correct / total with torch.no_grad(): y_true, y_pred = [], [] correct, total = 0, 0 running_loss = [] for X, y in val_loader: output = model(X) predicted = predictions(output.data) y_true.append(y) y_pred.append(predicted) total += y.size(0) correct += (predicted == y).sum().item() running_loss.append(criterion(output, y).item()) val_loss = np.mean(running_loss) val_acc = correct / total stats.append([val_acc, val_loss, train_acc, train_loss]) utils.log_cnn_training(epoch, stats) utils.update_cnn_training_plot(axes, epoch, stats)
def _evaluate_epoch(axes, tr_loader, val_loader, model, criterion, epoch, stats): """ Evaluates the `model` on the train and validation set. """ acc_per_class = [0.0, 0.0, 0.0, 0.0, 0.0] num = [0, 0, 0, 0, 0] y_true, y_pred = [], [] correct, total = 0, 0 running_loss = [] for X, y in tr_loader: with torch.no_grad(): output = model(X) predicted = predictions(output.data) y_true.append(y) y_pred.append(predicted) total += y.size(0) correct += (predicted == y).sum().item() running_loss.append(criterion(output, y).item()) train_loss = np.mean(running_loss) train_acc = correct / total y_true, y_pred = [], [] correct, total = 0, 0 running_loss = [] for X, y in val_loader: with torch.no_grad(): output = model(X) predicted = predictions(output.data) y_true.append(y) y_pred.append(predicted) total += y.size(0) correct += (predicted == y).sum().item() for ii in range(5): for jj in range(y.size(0)): if predicted[jj] == y[jj] and y[jj] == ii: acc_per_class[ii] += 1 num[ii] += (y == ii).sum().item() running_loss.append(criterion(output, y).item()) val_loss = np.mean(running_loss) for ii in range(5): acc_per_class[ii] = acc_per_class[ii] / num[ii] print(acc_per_class) val_acc = correct / total stats.append([val_acc, val_loss, train_acc, train_loss]) utils.log_cnn_training(epoch, stats) utils.update_cnn_training_plot(axes, epoch, stats)