예제 #1
0
파일: training.py 프로젝트: rpcook/mnist
 def __loadMNISTdatabase(self):
     if not self.__mnistTrainingLoaded:
         self.UIelements.writeToLog(
             'Loading MNIST training database to memory...')
         self.UIelements.updateProgressBar(1)
         mnistDatabase = mnist.database()
         trainingImages, trainingLabels = mnistDatabase.getData(
             range(60000), 'training')
         self.trainer.setTrainingSet(trainingImages, trainingLabels)
         validationImages, validationLabels = mnistDatabase.getData(
             range(10000), 'test')
         self.trainer.setValidationSet(validationImages, validationLabels)
         self.__mnistTrainingLoaded = True
         self.UIelements.writeToLog('done.\n\n')
         self.UIelements.updateProgressBar(100)
         time.sleep(0.2)
         self.trainingProgressBar['value'] = 0
     else:
         self.UIelements.writeToLog(
             'MNIST training database already loaded into memory.\n\n')
예제 #2
0
파일: training.py 프로젝트: 4OH4/mnist
    def __evaluateNetwork(self):
        if self.trainer.getNetwork().getStructure() == []:
            self.__writeToLog(
                'ERROR: No network to evaluate, intialise or load from file.\n'
            )
            return

        self.__writeToLog('Verifying network structure...')
        if self.verboseLog.get():
            self.__writeToLog(
                '\nNetwork structure: ' +
                str(self.trainer.getNetwork().getStructure())[1:-1] + '\n')

        if self.trainer.getNetwork().getStructure(
        )[0] != 784 or self.trainer.getNetwork().getStructure()[-1] != 10:
            self.__writeToLog(
                'ERROR: Network must have input size of 784 and output size of 10.\n'
            )
            return

        if self.verboseLog.get():
            self.__writeToLog('Verifying network structure...')
        self.__writeToLog('done.\n\n')

        if not self.__mnistTestData:
            self.__writeToLog('Loading MNIST testing database to memory...')
            self.__mnistTestData = mnist.database(True)
            self.__writeToLog('done.\n\n')
        else:
            self.__writeToLog(
                'MNIST testing database already loaded into memory.\n\n')

        self.__confusionMatrix = np.zeros((10, 10))

        self.__writeToLog(
            'Evaluating neural network against MNIST testing database...')

        network = self.trainer.getNetwork()
        for i in range(10000):
            if i % 100 == 0:
                self.__updateEvaluateProgressBar(i / 100)
            if i % 300 == 0:
                self.__drawConfusionMatrix(False)
            testImage, actualLabel = self.__mnistTestData.getData(i, 'test')
            network.setNeuronActivation(0, range(784), testImage.reshape(784))
            network.evaluate()
            networkPrediction = np.argmax(
                network.getNeuronActivation(-1, range(10)))
            self.__confusionMatrix[actualLabel][networkPrediction] += 1

        totalCorrectPredictions = 0
        for i in range(10):
            totalCorrectPredictions += self.__confusionMatrix[i][i]
        networkAccuracy = totalCorrectPredictions / 10000

        self.__writeToLog('done.\n\n')
        self.__updateEvaluateProgressBar(0)

        self.performanceLabelContent.set(
            'Overall network accuracy: {:.2%}'.format(networkAccuracy))
        self.__drawConfusionMatrix()
예제 #3
0
 def loadMNIST(self):
     self.mnistData = mnist.database()
     self.__mnistLoaded = True
예제 #4
0
파일: testing.py 프로젝트: 4OH4/mnist
# -*- coding: utf-8 -*-

import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
import math
import mnist
import neuralnetwork as nn
from struct import unpack
import numpy as np

mnistTestData = mnist.database(loadTestOnly=True)


class testingGUI:
    def __init__(self, master):
        self.master = master
        master.title('MNIST Neural Network Test Interface')

        # drawing canvas area
        pxSize = 15
        self.pixelSize = pxSize
        self.drawingCanvas = tk.Canvas(width=pxSize * 28,
                                       height=pxSize * 28,
                                       bg='#000044')
        self.drawingCanvas.grid(row=0, column=0)
        self.drawingCanvas.bind('<B1-Motion>', self.__paintOnCanvas)
        self.drawingCanvas.bind('<Button-1>', self.__paintOnCanvas)
        self.__addDrawingBackground()

        self.processDrawingButton = tk.Button(text='Process Digit',