st = time.time() best_score = 0 for epoch in range(epochs + 1): epoch_loss = 0.0 for iteration in range(total_num // batch_size): seed = np.random.choice(total_num, batch_size) x_batch = x_train[seed] y_batch = y_train[seed] loss = model.loss(x_batch, y_batch) epoch_loss += loss model.zero_grad() model.backward() model.update() epoch_loss /= batch_size pred = model.predict(x_train) target = np.argmax(y_train, axis=1) score = len(np.where(pred == target)[0]) / len(target) val_pred = model.predict(x_val) val_target = np.argmax(y_val, axis=1) val_score = len(np.where(val_pred == val_target)[0]) / len(val_target) acc_stack.append(score) val_acc_stack.append(val_score) loss_stack.append(epoch_loss)