Ejemplo n.º 1
0
def taskXor():
	XTrain, YTrain, XVal, YVal, XTest, YTest = loadXor()
	# Create a NeuralNetwork object 'nn1' as follows with optimal parameters. For parameter definition#, refer to nn.py file.
	nn1 = nn.NeuralNetwork(0.01, 10, 100)
	# Add layers to neural network corresponding to inputs and outputs of given data
	nn1.addLayer(nn.FullyConnectedLayer(XTrain.shape[1], 10, activation='relu'))
	nn1.addLayer(nn.FullyConnectedLayer(10, YTrain.shape[1], activation='softmax'))
	#print(XTrain.shape[1], YTrain.shape[1])
	
	# Add layers to neural network corresponding to inputs and outputs of given data
	# Eg. nn1.addLayer(FullyConnectedLayer(x,y))
	###############################################
	# TASK 3a (Marks 7) - YOUR CODE HERE
	
	#raise NotImplementedError
	###############################################
	nn1.train(XTrain, YTrain, XVal, YVal)
	pred, acc = nn1.validate(XTest, YTest)
	with open("predictionsXor.csv", 'w') as file:
		writer = csv.writer(file)
		writer.writerow(["id", "prediction"])
		for i, p in enumerate(pred):
			writer.writerow([i, p])
	print('Test Accuracy',acc)
	return nn1
Ejemplo n.º 2
0
    def test_forward_pass(self):
        data_layer = nn.BatchDataLayer(self.train_data.inputs,
                                       self.train_data.targets,
                                       batch_size=64,
                                       shuffle=False)
        inputs, targets = next(data_layer.forward())

        fc_layer = nn.FullyConnectedLayer(self.train_data.target_dim)
        fc_layer.initialize(self.train_data.input_dim, batch_size=64)
        outputs = fc_layer.forward(inputs)
Ejemplo n.º 3
0
def taskMnist():
    XTrain, YTrain, XVal, YVal, XTest, _ = loadMnist()
    # Create a NeuralNetwork object 'nn1' as follows with optimal parameters. For parameter definition, refer to nn.py file.
    # nn1 = nn.NeuralNetwork(lr, batchSize, epochs)
    # Add layers to neural network corresponding to inputs and outputs of given data
    # Eg. nn1.addLayer(FullyConnectedLayer(x,y))
    ###############################################
    # TASK 3b (Marks 13) - YOUR CODE HERE
    nn1 = nn.NeuralNetwork(0.01, 1, 100)
    nn1.addLayer(nn.FullyConnectedLayer(784,41, 'relu'))
    nn1.addLayer(nn.FullyConnectedLayer(41,10, 'softmax'))
    # raise NotImplementedError
    ###############################################
    nn1.train(XTrain, YTrain, XVal, YVal)
    pred, _ = nn1.validate(XTest, None)
    with open("predictionsMnist.csv", 'w') as file:
        writer = csv.writer(file)
        writer.writerow(["id", "prediction"])
        for i, p in enumerate(pred):
            writer.writerow([i, p])
    return nn1
Ejemplo n.º 4
0
def taskXor():
    print("Training XOR...")
    XTrain, YTrain, XVal, YVal, XTest, YTest = loadXor()
    # Create a NeuralNetwork object 'nn1' as follows with optimal parameters. For parameter definition, refer to nn.py file.
    nn1 = nn.NeuralNetwork(lr=0.005, batchSize=8, epochs=50)
    # Add layers to neural network corresponding to inputs and outputs of given data
    nn1.addLayer(nn.FullyConnectedLayer(2, 12, 'relu'))
    #nn1.addLayer(nn.FullyConnectedLayer(12,64,'relu'))
    nn1.addLayer(nn.FullyConnectedLayer(12, 2, 'softmax'))
    ###############################################
    # TASK 3a (Marks 7) - YOUR CODE HERE

    ###############################################
    nn1.train(XTrain, YTrain, XVal, YVal)
    pred, acc = nn1.validate(XTest, YTest)
    with open("predictionsXor.csv", 'w') as file:
        writer = csv.writer(file)
        writer.writerow(["id", "prediction"])
        for i, p in enumerate(pred):
            writer.writerow([i, p])
    print('Test Accuracy', acc)
    return nn1
Ejemplo n.º 5
0
def taskMnist():
    print("Training: MNIST...")
    XTrain, YTrain, XVal, YVal, XTest, _ = loadMnist()
    # Create a NeuralNetwork object 'nn1' as follows with optimal parameters. For parameter definition, refer to nn.py file.
    nn1 = nn.NeuralNetwork(lr=0.005, batchSize=8, epochs=50)
    # Add layers to neural network corresponding to inputs and outputs of given data
    nn1.addLayer(nn.FullyConnectedLayer(28 * 28, 256, 'relu'))
    #nn1.addLayer(nn.FullyConnectedLayer(128,256,'relu'))
    nn1.addLayer(nn.FullyConnectedLayer(256, 10, 'softmax'))
    ###############################################
    # TASK 3b (Marks 13) - YOUR CODE HERE
    ###############################################
    nn1.train(XTrain, YTrain, XVal, YVal)
    pred, acc = nn1.validate(XVal, YVal)
    print(acc)
    pred, _ = nn1.validate(XTest, None)
    with open("predictionsMnist.csv", 'w') as file:
        writer = csv.writer(file)
        writer.writerow(["id", "prediction"])
        for i, p in enumerate(pred):
            writer.writerow([i, p])
    return nn1
Ejemplo n.º 6
0
    def test_fully_connected_as_special_case(self):
        filter_size = (self.train_data.image_width,
                       self.train_data.image_height)
        stride = (1, 1)
        pad = (0, 0)
        num_filters = self.train_data.target_dim

        # get a data batch
        data_layer = nn.BatchDataLayer(self.train_data.inputs,
                                       self.train_data.targets,
                                       batch_size=64,
                                       shuffle=False)
        inputs, targets = next(data_layer.forward())

        # forward pass

        # get forward output of fully connected layer
        np.random.seed(0)
        fc_layer = nn.FullyConnectedLayer(self.train_data.target_dim,
                                          scale=0.01)
        fc_layer.initialize(self.train_data.input_dim, batch_size=64)
        fc_outputs = fc_layer.forward(inputs)

        # get forward output of convolutional layer
        np.random.seed(0)
        conv_layer = nn.ConvolutionalLayer(filter_size,
                                           stride,
                                           pad,
                                           num_filters,
                                           scale=0.01)
        conv_layer.initialize(self.train_data.input_dim, batch_size=64)
        conv_outputs = conv_layer.forward(inputs)

        # compare forward outputs
        np.testing.assert_array_equal(fc_layer.W, conv_layer.W)
        np.testing.assert_array_equal(fc_layer.b, conv_layer.b)
        np.testing.assert_array_equal(
            inputs, conv_layer.input_rows.reshape(inputs.shape))
        np.testing.assert_array_almost_equal(fc_outputs,
                                             conv_outputs.reshape(
                                                 fc_outputs.shape),
                                             decimal=10)

        # dot_prod1 = np.dot(conv_layer.input_rows.reshape(inputs.shape), conv_layer.W)
        # dot_prod2 = np.dot(conv_layer.input_rows, conv_layer.W)
        # out1 = dot_prod1 + conv_layer.b
        # out2 = (dot_prod2 + conv_layer.b).reshape(out1.shape)
        # print(dot_prod1.shape)
        # print(dot_prod2.shape)
        # print(dot_prod1)
        # print(dot_prod2)
        # print(np.sum(np.abs(dot_prod1 - dot_prod2)))
        # np.testing.assert_array_equal(dot_prod1, dot_prod2.reshape(dot_prod1.shape))
        # np.testing.assert_array_equal(fc_outputs, out1)
        # np.testing.assert_array_equal(fc_outputs, out2)

        # backward pass

        # get grad from loss layer
        loss_layer = nn.CrossEntropyLayer()
        loss_layer.forward(fc_outputs + 1.0, targets)
        grad_out = loss_layer.backward()

        # backward pass of fully connected layer
        fc_grad = fc_layer.backward(grad_out)
        # backward pass of convolutional layer
        conv_grad = conv_layer.backward(grad_out)
        # compare backward outputs
        np.testing.assert_array_equal(fc_grad,
                                      conv_grad.reshape(fc_grad.shape))