def error_rate(X_val, Y_val, nn):
    error = 0
    for i in range(X_val.shape[0]):
        y = nn.predict(X_val[i, :])
        if y != Y_val[i, 0]:
            error += 1
    return error / float(X_val.shape[0])

er = []
if train == 'stochastic':
    for hdim in hdims:
        nn = NeuralNet(X_train.shape[1], hdim, 6, lam)
        for it in range(20):
            LL = 0
            for i in range(X_train.shape[0]):
                pr = nn.update_stochastic(X_train[i], Y_train[i, 0], lrate)
                LL += pr
                LL /= float(X_train.shape[0])

        er_val = error_rate(X_val, Y_val, nn)
        er_train = error_rate(X_train, Y_train, nn)
        er_test = error_rate(X_test, Y_test, nn)
        er.append(er_val)
        print "error rate on val db: hdim: {}, er rate: {}".format(hdim, er_val)
        print "error rate on train db: hdim: {}, er rate: {}".format(hdim, er_train)
        print "error rate on test db: hdim: {}, er rate: {}".format(hdim, er_test)


if train == 'batch':
    for hdim in hdims:
        nn = NeuralNet(X_train.shape[1], hdim, 6, lam)