def test1():
    (x, y) = DataModel.loadData("..\\train.csv")

    (x_train, x_cv, y_train, y_cv) = DataModel.splitData(x, y)

    x_sub = x_train[:500,:]
    y_sub = y_train[:500]

    s = SimpleNN.SimpleNN([784, 70, 10])

    #s = Train.trainGradientDescent(s, x_sub, y_sub, 5)
    s = Train.trainSciPy(s, x_sub, y_sub, 5)
    acc_cv = accuracy_score(y_cv, [s.predictClass(w) for w in x_cv])
    print("Accuracy on CV set: {0}", acc_cv)
from scipy.optimize import check_grad

import SimpleNN
import Train

mat = loadmat('..\\ex4weights.mat')

s = SimpleNN.SimpleNN([400, 25, 10])

s.theta = [np.transpose(mat["Theta1"]), np.transpose(mat["Theta2"])]

data = loadmat("..\\ex4data1.mat")

x = data["X"][:500,:]
y = data["y"][:500]

#check_grad(func = lambda p: s.computeCost(s.combineTheta(p), x, y, 0.5),
#                grad = lambda p: s.computeGrad(s.combineTheta(p), x, y, 0.5),
#                x0 = s.combineTheta(s.theta))

#(cost, grad) = s.computeCostGrad(s.theta, x, y, 1)

s = Train.trainSciPy(s, x, y, 0.05)

predictions = [s.predictClass(w) for w in x]

err_rate = np.mean([1 if pred != check else 0 for (pred, check) in zip(y, predictions)])

print("Error rate with pre-computed paramaters: {0}".format(err_rate))