Esempio n. 1
0
def main(target_values=None,
         epochs=8,
         v_learning_rate=0.1,
         w_learning_rate=0.01,
         v_decay_rate=1,
         w_decay_rate=1,
         randomized=False):

    _v_learning_rate = v_learning_rate
    _w_learning_rate = w_learning_rate
    images = np.load('data/images.npy')
    labels = np.load('data/vec_labels.npy')
    data = np.concatenate((images, labels), axis=1)
    np.random.shuffle(data)

    train_images = data[:round(.8 * len(data)), :len(images[0])]
    train_labels = data[:round(.8 * len(data)), len(images[0]):]
    validation_images = data[round(.8 * len(data)):, :len(images[0])]
    validation_labels = data[round(.8 * len(data)):, len(images[0]):]

    scaler = skp.StandardScaler()
    train_images = scaler.fit_transform(train_images)
    validation_images = scaler.transform(validation_images)

    # Set target values in our labels matrix(e.g. to 0.15 and 0.85).
    if target_values is not None:
        for i in range(len(train_labels[:, 0])):
            for j in range(len(train_labels[0, :])):
                if train_labels[i, j] < 0.5:
                    train_labels[i, j] = target_values[0]
                else:
                    train_labels[i, j] = target_values[1]

    print('\n============\n  SETTINGS\n============')
    print('Target Values: ', target_values)
    print('Number of Epochs: ', epochs)
    print('V Learning Rate: ', v_learning_rate)
    print('W Learning Rate: ', w_learning_rate)
    print('V Decay Rate: ', v_decay_rate)
    print('W Decay Rate: ', w_decay_rate)
    print('Randomized: ', randomized)

    NN = NeuralNet(train_images, train_labels)

    for i in range(epochs):
        if (i > 0):
            data = np.concatenate((train_images, train_labels), axis=1)
            np.random.shuffle(data)
            train_images = data[:, :len(images[0])]
            train_labels = data[:, len(images[0]):]
            NN.updateData(train_images, train_labels)
            if ((i % 5) == 0):
                _v_learning_rate = v_decay_rate * v_learning_rate
                _w_learning_rate = w_decay_rate * w_learning_rate
        NN.train(v_learning_rate=_v_learning_rate,
                 w_learning_rate=_w_learning_rate,
                 randomized=randomized)

        print('\n============\n  EPOCH:', i, '\n============')

        # TRAINING ACCURACY
        y_hat = NN.classifyAll(train_images)
        test_correct = 0
        test_size = len(NN.images)
        for j in range(test_size):
            if (y_hat[j] == np.argmax(NN.labels[j]) + 1):
                test_correct += 1
            else:
                continue
        print('\nTest Classfication Complete:')
        print('Test Set Error: ', 1 - (test_correct / test_size))

        # VALIDATION ACCURACY
        total_correct = 0
        validation_size = len(validation_images)
        z = NN.classifyAll(validation_images)
        for j in range(len(z)):
            if (z[j] == np.argmax(validation_labels[j]) + 1):
                total_correct += 1
            else:
                continue
        print('\nValidation Classification Complete:')
        print('Validation Error Rate: ', 1 - (total_correct / validation_size),
              '\n')