def __init__(self, parent, path):

        # take data and use datamanager to return imageSize, and ints.

        # Attributes

        self.path = path
        self.imageNum = 0  # current image in the data to be viewed
        self.imgSize = DataManager.getImgSize(path, split=True)
        self.imgSizeX = self.imgSize[1]
        self.imgSizeY = self.imgSize[0]
        self.imgSize = DataManager.getImgSize(path, split=False)
        self.setSize = DataManager.getSetSize(path)  # Number of images in set
        self.currentPixel = None  # Tk.Frame obj
        self.currentPixelPos = None  # int position of pixel in current image

        # Pixel holder

        self.wrapper = Tk.Frame(parent)
        self.wrapper.grid(row=0, column=0)
        self.digitDisplay = Tk.Frame(self.wrapper, width=235, height=235)
        self.digitDisplay.grid_propagate(False)
        for i in range(self.imgSizeY):
            self.digitDisplay.grid_rowconfigure(i, weight=1)
        for i in range(self.imgSizeX):
            self.digitDisplay.grid_columnconfigure(i, weight=1)
        self.digitDisplay.grid(row=0, column=0)

        # EntryBox

        self.pixelLabel = Tk.Label(self.wrapper, text='No pixel selected')
        self.pixelLabel.grid(row=1, column=0, sticky='nswe')

        # self.pixel is a 2d array containing Tk.Frames. [0] = imageNum, [1] = frames

        pixel = []
        for i in range(self.setSize):
            pixel.append([])
            self.data = DataManager.getImage(self.path, i)
            for j in range(self.imgSizeX * self.imgSizeY):
                val = int.from_bytes(self.data[j:j + 1], byteorder='big')
                pixel[i].append(self.newPixel(val, j))

        self.pixel = pixel

        # Free up some ram

        self.data = None

        return
    def newImg(self, path):

        # Destroy old pixels

        for i in range(self.setSize):
            self.data = DataManager.getImage(self.path, i)
            for j in range(self.imgSizeX * self.imgSizeY):
                self.pixel[i][j].destroy()

        # New attributes

        self.path = path
        self.imageNum = 0  # current image in the data to be viewed
        self.imgSize = DataManager.getImgSize(path, split=True)
        self.imgSizeX = self.imgSize[1]
        self.imgSizeY = self.imgSize[0]
        self.imgSize = DataManager.getImgSize(path, split=False)
        self.setSize = DataManager.getSetSize(path)  # Number of images in set
        self.currentPixel = None  # Tk.Frame obj
        self.currentPixelPos = None  # int position of pixel in current image

        # self.pixel is a 2d array containing Tk.Frames. [0] = imageNum, [1] = frames

        pixel = []
        for i in range(self.setSize):
            pixel.append([])
            self.data = DataManager.getImage(self.path, i)
            for j in range(self.imgSizeX * self.imgSizeY):
                val = int.from_bytes(self.data[j:j + 1], byteorder='big')
                pixel[i].append(self.newPixel(val, j))

        self.pixel = pixel

        # Free up some ram

        self.data = None

        return
Beispiel #3
0
    def train(
        self,
        data,
        expecteds,
        window,
        normalise=False,
    ):

        # Get image size, and num of images from data

        imgCount = DataManager.getSetSize(data)
        imgSize = DataManager.getImgSize(data)

        # Get label file ready

        expecteds = gzip.open(expecteds, 'r')
        expecteds.read(8)  # get past headers

        # Get images and train

        data = gzip.open(data, 'r')
        for i in range(0, imgCount):

            # print('Training on Image: ', i+1)

            # Build image array

            buffer = data.read(imgSize)
            image = np.frombuffer(buffer, dtype=np.uint8)

            # One hot encode label

            label = int.from_bytes(expecteds.read(1), byteorder='big')
            expectedOutput = np.zeros(10)
            expectedOutput[label] = 1

            # Update progress bar

            window.progressBar['value'] += 1
            window.window.update()

            # Do passes

            self.forwardProp(image, normalise=normalise)
            self.backwardProp(expectedOutput)

            # Check if training should be stopped

            if window.stop == True:
                break

        # Setup window things

        window.progressLabel['text'] = 'Progress: Complete!'

        # Free resources

        data.close()
        expecteds.close()

        return