learning_rates = [1e-7, 5e-7, 1e-6, 5e-6]
regularization_strengths = [5e4, 1e5, 5e5, 1e6, 5e6]


################################################################################
# TODO:                                                                        #
# Use the validation set to set the learning rate and regularization strength. #
# Save the best trained softmax classifer in best_softmax.                     #
################################################################################
ns = SoftmaxClassifier()
max_iters = 8000
tol = 1e-4
for bs in batch_sizes:
    for lr in learning_rates:
        for rs in regularization_strengths:
            iterations = ns.train(X_train, y_train, lr, rs, max_iters, bs, tol, verbose=True)[0]
            ta = np.mean(y_train == ns.predict(X_train))
            va = np.mean(y_val == ns.predict(X_val))
            results[bs, lr, rs] = (iterations, ta, va)
            if va > best_val:
                best_val = va
                best_bs = bs
                best_it = iterations
                best_lr = lr
                best_reg = rs
                best_softmax = ns
            print "\t---- FINISHED batch size: %e learning rate: %e reg: %e------" % (bs, lr, rs)
################################################################################
#                              END OF YOUR CODE                                #
################################################################################