def dataset_test():
    """
    Test function that loads dataset
    """
    #create dataset object
    filename = "dataset/iris.data"
    dataset = NN.Dataset(filename)

    #148 exemples for training
    eq_((148, 5), np.shape(dataset.data))
示例#2
0
def with_sgd_test():
    """Stocastic gradient descent backpropagation test"""

    #create dataset object
    filename = "dataset/iris.data"
    dataset = NN.Dataset(filename)

    #training and testing datasets
    train_ratio = 0.75
    train = dataset.exemples[:int(train_ratio * dataset.total_ex), :]
    train_labels = dataset.labels[:int(train_ratio * dataset.total_ex)]

    test = dataset.exemples[int(train_ratio * dataset.total_ex):, :]
    test_labels = dataset.labels[int(train_ratio * dataset.total_ex):]

    #get number of classes
    NbClasses = dataset.NbClasses
    expected = dataset.expected
    NbArguments = dataset.NbArguments

    #create model
    model = NN.model

    #add input layer
    model.Layer("input", NbArguments)

    #add hidden layer with 4 neurons
    model.Layer("hidden", 6, model.sigmoid)

    #add hidden layer with 4 neurons
    model.Layer("hidden", 4, model.sigmoid)

    #create output layer
    NbNeurons = NbClasses
    model.Layer("output", NbNeurons, model.sigmoid)

    model.fit(train, train_labels, expected)

    return model, test, test_labels, expected
示例#3
0
def feedforward_test():
    """
    Tests feedforward
    """

    #create dataset object
    filename = "dataset/iris.data"
    dataset = NN.Dataset(filename)

    #exemple to input
    input = np.array([0, 1, 1])
    nb_arguments = len(input)

    #get number of classes
    NbClasses = 3

    #create model
    model = NN.model

    #add input layer
    model.Layer("input", nb_arguments)

    #add hidden layer with 1 neurons
    model.Layer("hidden", 2, model.sigmoid)

    # add hidden layer with 1 neurons
    model.Layer("hidden", 4, model.sigmoid)

    #add hidden layer with 1 neurons
    # model.Layer("hidden", 2, model.sigmoid)

    #create output layer
    NbNeurons = NbClasses
    model.Layer("output", NbNeurons, model.sigmoid)

    #feedforward
    output = model.feedforward(input)

    return input, output, model
示例#4
0
def layer_test():

    """
    Create and test layers
    """
    #test input layer
    #create dataset object
    filename = "dataset/iris.data"
    dataset = NN.Dataset(filename)

    #exemple to input
    input = dataset.data[0,:-1].astype(float)

    #****************************************
    #*************Test layers ***************
    #****************************************

    #create model
    model = NN.model

    #*************input layer****************
    nb_arguments = len(input)
    l_input = model.Layer("input", nb_arguments)

    #weights of the input layer are all 1
    eq_(model.layers[0].weights, [1.,1.,1.,1.])

    #output of the input layer should be equal to the input values
    arrays_equal = np.array_equal(l_input.get_output(input), input)
    eq_(arrays_equal, True)

    #**************hidden layer****************
    #create weights matrix of size  (5,2) ==> (4 args of input + 1 bias, 2 neurons )
    np.random.seed(1)
    weights = np.round(np.random.rand(5,2),3)

    #create hidden layer with 2 neurons
    l_hidden = model.Layer("hidden", 2, model.sigmoid)
    eq_(model.layers[1].weights.all(), weights.all())

    #dot product of weights (including bias) and input (expected value )
    #dot products calculated by hand
    output = model.sigmoid(np.array([2.767, 5.466]).flatten())

    #test output
    arrays_equal = np.array_equal(model.layers[-1].get_output(input), output)
    eq_(arrays_equal, True)

    #**************output layer****************
    # output of previous layer becomes input of output layer
    input = model.layers[-1].get_output(input)

    #get number of classes
    _ , counts = np.unique(dataset.data[:,-1], return_counts = True)
    NbClasses = len(counts)

    #create weights that will be created in the layer
    np.random.seed(1)
    weights = np.round(np.random.rand(model.layers[-1].NbNeurons + 1, NbClasses),3)

    #expected output final layer
    o_prev = np.array([0.941, 0.996, 1])
    sum = np.round(np.dot(o_prev,weights),3)
    expected_o_final = model.sigmoid(sum)

    #create output layer
    NbNeurons = NbClasses
    l_output = model.Layer("output",  NbNeurons, model.sigmoid)

    #get output of final layer
    real_o_final = l_output.get_output(input)

    #test output
    arrays_equal = np.array_equal(real_o_final, expected_o_final)
    eq_(arrays_equal, True)