Esempio n. 1
0
def validate():
    conv_layer_1 = CNN.CNNLayer(3, 3, 1, 32)

    conv_layer_2 = CNN.CNNLayer(32, 5, 2, 64)

    pooling_layer_1 = CNN.PoolingLayer(2,2)

    conv_layers = [conv_layer_1, conv_layer_2, pooling_layer_1]
    ann = ANN.ANN(2304, [128, 3])

    # 0 = Airplane
    # 2 = Bird
    # 8 = Ship

    conv_layer_1.load("data/3-network/CNNL1.npz")
    conv_layer_2.load("data/3-network/CNNL2.npz")
    ann.load("data/3-network/FCL.npz")
    
    batch = data_batch.DataBatch("cifar-10-python/cifar-10-batches-py/test_batch")
    filteredImages = []
    filteredLabels = []
    for x in range(len(batch.labels)):
        if(batch.labels[x] == 0):
            filteredImages.append(batch.images[x])
            filteredLabels.append(0)
        if(batch.labels[x] == 2):
            filteredImages.append(batch.images[x])
            filteredLabels.append(1)
        if(batch.labels[x] == 8):
            filteredImages.append(batch.images[x])
            filteredLabels.append(2)
    batch.images = np.array(filteredImages)
    batch.labels = np.array(filteredLabels)
    data = batch.images
    for i in range(len(conv_layers)):
        data = conv_layers[i].forward(data)

    flattened = data.reshape(data.shape[0], data.shape[1] * data.shape[2] * data.shape[3])

    output = ann.prop_forward(flattened)

    right = 0
    seen = 0
    for i in range(batch.images.shape[0]):
        outputNum = -1
        biggest = -1
        for j in range(0, 3):
            if output[i][j] > biggest:
                outputNum = j
                biggest = output[i][j]
        seen+=1
        if outputNum == batch.labels[i]:
            right += 1
    print("Right: " + str(right) + " / " + str(seen) + " - " + "{0:.0%}".format(right/seen))
Esempio n. 2
0
def train():
    batch_files = ["cifar-10-python/cifar-10-batches-py/data_batch_1",
    "cifar-10-python/cifar-10-batches-py/data_batch_2",
    "cifar-10-python/cifar-10-batches-py/data_batch_3",
    "cifar-10-python/cifar-10-batches-py/data_batch_4",
    "cifar-10-python/cifar-10-batches-py/data_batch_5"]
    conv_layer_1 = CNN.CNNLayer(3, 3, 1, 32)

    conv_layer_2 = CNN.CNNLayer(32, 5, 2, 64)

    pooling_layer_1 = CNN.PoolingLayer(2,2)

    conv_layers = [conv_layer_1, conv_layer_2, pooling_layer_1]
    ann = ANN.ANN(2304, [128, 3])

    # 0 = Airplane
    # 2 = Bird
    # 8 = Ship

    conv_layer_1.load("data/3-network/CNNL1.npz")
    conv_layer_2.load("data/3-network/CNNL2.npz")
    ann.load("data/3-network/FCL.npz")
    
    for epoch in range(0, 40):
        print ("epoch " + str(epoch))
        batch_sizes = 64
        for filename in batch_files:
            batch = data_batch.DataBatch(filename)
            filteredImages = []
            filteredLabels = []
            for x in range(len(batch.labels)):
                if(batch.labels[x] == 0):
                    filteredImages.append(batch.images[x])
                    filteredLabels.append(0)
                if(batch.labels[x] == 2):
                    filteredImages.append(batch.images[x])
                    filteredLabels.append(1)
                if(batch.labels[x] == 8):
                    filteredImages.append(batch.images[x])
                    filteredLabels.append(2)
            batch.images = np.array(filteredImages)
            batch.labels = np.array(filteredLabels)

            print("Running on file " + filename[-12:])
            order = list(range(0, len(batch.images), batch_sizes))
            random.shuffle(order)
            for i in order:
                conv_layers, ann = trainOn(batch.images[i:i+batch_sizes], batch.labels[i:i+batch_sizes],
                conv_layers, ann, True, 0.000004 * math.pow(0.96, epoch), 0.7) #Decay and momentum
            print("saving")
            conv_layer_1.save("data/3-network/CNNL1.npz")
            conv_layer_2.save("data/3-network/CNNL2.npz")
            ann.save("data/3-network/FCL.npz")
Esempio n. 3
0
    def __init__(self):
        conv_layer_1 = CNN.CNNLayer(3, 3, 1, 32)

        conv_layer_2 = CNN.CNNLayer(32, 5, 2, 64)

        pooling_layer_1 = CNN.PoolingLayer(2, 2)

        self.conv_layers = [conv_layer_1, conv_layer_2, pooling_layer_1]
        self.ann = ANN.ANN(2304, [128, 3])

        # 0 = Airplane
        # 2 = Bird
        # 8 = Ship

        conv_layer_1.load("data/3-network/CNNL1.npz")
        conv_layer_2.load("data/3-network/CNNL2.npz")
        self.ann.load("data/3-network/FCL.npz")