예제 #1
0
        [list(map(float, line.split(","))) for line in input])
with open('TrainDigitY.csv') as input:
    train_labels = np.array(
        [list(map(float, line.split(","))) for line in input])
train_labels = train_labels.astype(int)

# load the testing data and respective labels
with open('TestDigitX.csv') as input:
    test_values = np.array(
        [list(map(float, line.split(","))) for line in input])
with open('TestDigitY.csv') as input:
    test_labels = np.array(
        [list(map(float, line.split(","))) for line in input])
test_labels = test_labels.astype(int)

# define the optimal parameters (holdout set - 3.22% error)
h_opt = 128
r_opt = 0.35
ep_opt = 8

# TestDigitX
w1, w2 = ANN.ANN_train(train_values, train_labels, h_opt, r_opt, ep_opt)
predictions = ANN.ANN_test(test_values, h_opt, w1, w2)
np.savetxt('TestDigitYClopton.csv.gz', predictions, fmt='%i')
# TestDigitX2
with open('TestDigitX2.csv') as input:
    test2_values = np.array(
        [list(map(float, line.split(","))) for line in input])
predictions = ANN.ANN_test(test2_values, h_opt, w1, w2)
np.savetxt('TestDigitY2Clopton.csv.gz', predictions, fmt='%i')
holdout_labels = np.take(train_labels,holdout_idxs,axis=0)

# define ranges for the three parameters
hidden = [32, 64, 128, 256]
rate = [0.15, 0.2, 0.25, 0.35]
epoch = [4, 6, 8]

# compute errors for various combinations of hidden nodes, learning rates, and epochs
err = np.zeros((len(hidden),len(rate),len(epoch)))
for i,h in enumerate(hidden):
        print(h)
        for j,r in enumerate(rate):
                print(r)
                for k,ep in enumerate(epoch):
			print(ep)
                        w1,w2 = ANN.ANN_train(train_subset,labels_subset,h,r,ep)
                        # test on holdout set
                        predictions = ANN.ANN_test(holdout_set,h,w1,w2)
                        err[i,j,k] = (1/float(holdout_size))*np.sum([predictions[a] != holdout_labels[a,0] for a in range(holdout_size)])

# find combination of parameters with lowest error
min_val = 1
min_hidden = 0
min_rate = 0
min_epoch = 0
for i in range(len(hidden)):
        val = np.amin(err[i,:,:])
        if val < min_val:
                min_val = val
                print(min_val)
                (j,k) = np.unravel_index(err[i,:,:].argmin(),err[i,:,:].shape)