diff --git a/machineLearning/nn/layer/activation.py b/machineLearning/nn/layer/activation.py index 62d020771ee53d258a54351c0f1c214bd8896e59..63c5dea45e8318e9b00c04b396ea1754b848cd18 100644 --- a/machineLearning/nn/layer/activation.py +++ b/machineLearning/nn/layer/activation.py @@ -9,17 +9,35 @@ class Activation(Layer): the main activation function class containing all the methods used for activation function it's an abstract class, meaning it should never be used directly, but instead used a base """ - __slots__ = ['input', 'activation'] + __slots__ = ['input', 'activation', 'useQuantization', 'scale', 'bits', 'lut', 'inputRange'] def __init__(self) -> None: super().__init__() + self.useQuantization = False + self.scale = 1 + self.bits = 8 + self.lut = None + self.inputRange = (0, 1) def forward(self, input: ArrayLike) -> np.ndarray: """ - creates the activation and introduces non-linearity to the network + Creates the activation and introduces non-linearity to the network. + Uses a lookup table (LUT) for the quantized path. """ self.input = input - self.activation = self._function(self.input) + if self.useQuantization: + if not self.lut: + raise ValueError("No LUT generated for this layer") + + # Assuming symmetric quantization for activation functions + quantized_indices = np.clip(np.round(input).astype(np.int32), 0, 2**self.bits - 1) + + # Use the indices to look up the activation values in the LUT + self.activation = self.lut[quantized_indices] + else: + # For the non-quantized path, directly compute the activation + self.activation = self._function(self.input) + return self.activation def backward(self, gradient: ArrayLike) -> np.ndarray: @@ -28,6 +46,26 @@ class Activation(Layer): """ return self._derivative() * gradient + def quantize(self, bits: int = 8) -> None: + # Initialization steps... + self.bits = bits + self.lut = np.zeros((2 ** bits,), dtype=np.int32) # For 8-bit, size is 256 + + # Determine the floating-point range for inputs based on `self.inputRange` + min_val, max_val = self.inputRange + + # Populate the LUT for quantized outputs + for i in range(2 ** bits): + # Map quantized input index to floating-point range + real_value = min_val + (max_val - min_val) * (i / (2 ** bits - 1)) + # Apply the actual activation function + activation_output = self._function(real_value) + # Re-quantize the activation output back to quantized domain + quantized_output = np.round((activation_output - min_val) / (max_val - min_val) * (2 ** bits - 1)) + self.lut[i] = quantized_output + + self.useQuantization = True + @abstractmethod def _function(self, input: ArrayLike) -> np.ndarray: """ @@ -55,6 +93,7 @@ class Relu(Activation): def __init__(self) -> None: super().__init__() + self.inputRange = (0, 6) def _function(self, input: ArrayLike) -> np.ndarray: return np.maximum(0.0, input) @@ -73,6 +112,7 @@ class Elu(Activation): def __init__(self, alpha: float = 1.0) -> None: super().__init__() self.alpha = alpha + self.inputRange = (-1, 6) def _function(self, input: ArrayLike) -> np.ndarray: return np.where(input <= 0., self.alpha * np.exp(input) - 1, input) @@ -91,6 +131,7 @@ class LeakyRelu(Activation): def __init__(self, epislon: float = 1e-1) -> None: super().__init__() self.epislon = epislon + self.inputRange = (-6, 6) def _function(self, input: ArrayLike) -> np.ndarray: input[input <= 0.] *= self.epislon @@ -111,6 +152,7 @@ class Tanh(Activation): def __init__(self) -> None: super().__init__() + self.inputRange = (-1, 1) def _function(self, input: ArrayLike) -> np.ndarray: return np.tanh(input) @@ -166,6 +208,7 @@ class SoftPlus(Activation): def __init__(self) -> None: super().__init__() + self.inputRange = (0, 6) def _function(self, input: ArrayLike) -> np.ndarray: return np.log(1. + np.exp(input)) @@ -187,6 +230,7 @@ class SoftSign(Activation): def __init__(self) -> None: super().__init__() + self.inputRange = (-1, 1) def _function(self, input: ArrayLike) -> np.ndarray: return input / (np.abs(input) + 1.) @@ -199,7 +243,7 @@ class SoftSign(Activation): class Identity(Activation): """ The identity activation function. - + The identity function simply returns its input without any transformation. It is often used as the activation function for the output layer of a neural network when the task involves regression, i.e., predicting a continuous output value. @@ -208,6 +252,7 @@ class Identity(Activation): def __init__(self) -> None: super().__init__() + self.inputRange = (-6, 6) def _function(self, input: ArrayLike) -> np.ndarray: return input diff --git a/machineLearning/nn/layer/linear.py b/machineLearning/nn/layer/linear.py index b340b8f613ba7851a5c89cfb24d626d233f4bcc8..78ed5afdfb1fa5053b13ca4143f1b84776be34a5 100644 --- a/machineLearning/nn/layer/linear.py +++ b/machineLearning/nn/layer/linear.py @@ -128,4 +128,4 @@ class Dropout(Layer): printString = self.name printString += ' size: ' + str(self.size) printString += ' probability: ' + str(self.probability) - return printString \ No newline at end of file + return printString diff --git a/machineLearning/nn/layer/weights.py b/machineLearning/nn/layer/weights.py index b63b4dd05efab9e894b98bc18dadcd1e356d7f8f..316c77725612681d82e8c672ce7d2f0710b9bbc1 100644 --- a/machineLearning/nn/layer/weights.py +++ b/machineLearning/nn/layer/weights.py @@ -46,7 +46,7 @@ class Weights(object): or quantized (and dequantized back) weight values for computation. """ if self._useQuantization: - return self.dequantize() + return self._quantizedValues else: return self._values @@ -123,7 +123,7 @@ class Weights(object): self.qMax = 2 ** (bits - 1) - 1 self.qMin = - self.qMax elif scheme == "asymmetric": - sefl.qMax = 2 ** bits - 1 + self.qMax = 2 ** bits - 1 self.qMin = 0 else: raise ValueError(f"{scheme} is not a recognized quantization scheme") diff --git a/machineLearning/nn/quantizer.py b/machineLearning/nn/quantizer.py index 4f1536a45b4a9e9b7be74eb0fc5f844d132c5183..eed9bf99c3cd08bf65cc4331d41b72bb6632a3ca 100644 --- a/machineLearning/nn/quantizer.py +++ b/machineLearning/nn/quantizer.py @@ -1,5 +1,6 @@ import numpy as np from collections import namedtuple +from copy import deepcopy from .module import Module from .layer import Layer @@ -31,20 +32,20 @@ class Quantizer: pass @property - def quantizationError(self) -> QuantizationError: + def quantizationError(self, quantizedModule: Module) -> QuantizationError: """ this returns the two main errors of the quantization """ - return QuantizationError(self._roundingError(), self._clippingError()) + return QuantizationError(self._roundingError(quantizedModule), self._clippingError(quantizedModule)) - def _roundingError(self) -> float: + def _roundingError(self, quantizedModule: Module) -> float: """ A private method for calculating the mean absolute rounding error. """ totalError = 0. totalElements = 0 - for layer in self.module: + for layer in quantizedModule: try: params = layer.params() except AttributeError: @@ -61,11 +62,11 @@ class Quantizer: meanError = totalError / totalElements if totalElements > 0 else 0 return meanError - def _clippingError(self) -> float: + def _clippingError(self, quantizedModule: Module) -> float: totalClippingError = 0. totalElements = 0 - for layer in self.module: + for layer in quantizedModule: try: params = layer.params() except AttributeError: @@ -92,43 +93,49 @@ class Quantizer: meanClippingError = totalClippingError / totalElements if totalElements > 0 else 0 return meanClippingError - def __call__(self, module: Module) -> None: + def __call__(self, module: Module) -> Module: """ Applies quantization to all quantizable parameters in the module. """ - self.module = module - for layer in self.module: + qunaitzedModule = deepcopy(module) + for layer in qunaitzedModule: self._quantizeLayer(layer) - def dequantize(self) -> None: + return qunaitzedModule + + def dequantize(self, quatizedModule: Module) -> Module: """ Applies dequantization to all dequantizable parameters in the module. """ - for layer in self.module: + for layer in quatizedModule: self._dequantizeLayer(layer) + return quatizedModule + def _quantizeLayer(self, layer: Layer) -> None: """ - Quantizes the weights (and biases) of a single layer if applicable. + Quantizes the weights (and biases) of a single layer if applicable, + or the layer itself if it supports direct quantization. """ - try: + if hasattr(layer, 'params'): + # For layers with parameters like weights and biases params = layer.params() - except AttributeError: - # 'params' method not found in the layer, skip updating - return - - for param in params: - param.quantize(bits=self.bits, scheme=self.scheme) + for param in params: + param.quantize(bits=self.bits, scheme=self.scheme) + elif hasattr(layer, 'quantize'): + # For layers supporting direct quantization, like activation layers with LUT + layer.quantize(bits=self.bits) def _dequantizeLayer(self, layer: Layer) -> None: """ - Dequantizes the weights (and biases) of a single layer if applicable. + Dequantizes the weights (and biases) of a single layer if applicable, + or the layer itself if it supports direct dequantization. """ - try: + if hasattr(layer, 'params'): + # For layers with parameters like weights and biases params = layer.params() - except AttributeError: - # 'params' method not found in the layer, skip updating - return - - for param in params: - param.dequantize() + for param in params: + param.dequantize() + elif hasattr(layer, 'dequantize'): + # For layers supporting direct dequantization, if applicable + layer.dequantize() diff --git a/network-test.ipynb b/network-test.ipynb index cc99cfec723fa79b310966ce929e435b38dccdbd..6cd324d333ec37ee2d9eef7cba8da0c83cbb8e4c 100644 --- a/network-test.ipynb +++ b/network-test.ipynb @@ -64,7 +64,7 @@ { "data": { "text/plain": [ - "<matplotlib.image.AxesImage at 0x119a130b0>" + "<matplotlib.image.AxesImage at 0x1175f98e0>" ] }, "execution_count": 3, @@ -73,7 +73,7 @@ }, { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZgAAAGdCAYAAAAv9mXmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAZn0lEQVR4nO3df2xVhf3/8Vd7S2+r3lZACvRDC8imSPkhUCDQzR8TMQ3w1WVh09Ssg2XZXBGwmVm7BRlhcGHZCAuw8uPDgEQQWDbUmS8S6AKMaUcp4pfOCaIOriJU/bp7oegF772fP/b51E8n5fa0993TU5+P5CbrzbncV67Ac6e33JOWSCQSAgAgxdLdHgAA6JkIDADABIEBAJggMAAAEwQGAGCCwAAATBAYAIAJAgMAMJHR1U8Yj8d17tw5BQIBpaWldfXTAwA6IZFI6OLFi8rPz1d6+vXPUbo8MOfOnVNBQUFXPy0AIIVCoZAGDRp03WO6PDCBQECSNP6BnyijV1ZXP327ZXwcd3tCUtlvfej2hKQuFvVze0JSgWPvuj2hXS6O/Q+3JySVSPfAdyU8MLE7i139RA17lrb8XX49XR6Y//m2WEavrO4dmKvdPzAZ6X63JyTVnf8b/w8vvI6SN15LAvPF0Z63OHiTHwBggsAAAEwQGACACQIDADBBYAAAJggMAMAEgQEAmCAwAAATBAYAYILAAABMEBgAgAkCAwAwQWAAACY6FJi1a9dqyJAhysrK0qRJk3TkyJFU7wIAeJzjwOzcuVOVlZVatGiRjh07pjFjxuiBBx5QU1OTxT4AgEc5DszKlSv1ve99T7Nnz9aIESO0bt063XDDDfrtb39rsQ8A4FGOAnPlyhU1NDRo6tSpn/0C6emaOnWqXn755Ws+JhqNKhKJtLoBAHo+R4H54IMPFIvF1L9//1b39+/fX+fPn7/mY4LBoHJzc1tuBQUFHV8LAPAM858iq66uVjgcbrmFQiHrpwQAdAMZTg6+5ZZb5PP5dOHChVb3X7hwQQMGDLjmY/x+v/x+b1zzHACQOo7OYDIzMzV+/HjV1ta23BePx1VbW6vJkyenfBwAwLscncFIUmVlpcrLy1VcXKyJEydq1apVam5u1uzZsy32AQA8ynFgvvWtb+n999/XU089pfPnz+vOO+/Uiy+++Lk3/gEAX2yOAyNJc+fO1dy5c1O9BQDQg/BZZAAAEwQGAGCCwAAATBAYAIAJAgMAMEFgAAAmCAwAwASBAQCYIDAAABMEBgBggsAAAEwQGACACQIDADDRoU9TTgX//7+qjAyfW0+f1JWbe7k9IalYn5vcnpBU9rNH3J6Q1MUHJ7o9oV0ymmNuT0gq88Crbk/oEZpnjnd7QtsS7T+UMxgAgAkCAwAwQWAAACYIDADABIEBAJggMAAAEwQGAGCCwAAATBAYAIAJAgMAMEFgAAAmCAwAwASBAQCYIDAAABMEBgBggsAAAEw4DsyhQ4c0c+ZM5efnKy0tTc8++6zBLACA1zkOTHNzs8aMGaO1a9da7AEA9BCOL5lcWlqq0tJSiy0AgB7EcWCcikajikajLV9HIhHrpwQAdAPmb/IHg0Hl5ua23AoKCqyfEgDQDZgHprq6WuFwuOUWCoWsnxIA0A2Yf4vM7/fL7/dbPw0AoJvh38EAAEw4PoO5dOmSTp8+3fL122+/rePHj6tPnz4qLCxM6TgAgHc5DszRo0d17733tnxdWVkpSSovL9eWLVtSNgwA4G2OA3PPPfcokUhYbAEA9CC8BwMAMEFgAAAmCAwAwASBAQCYIDAAABMEBgBggsAAAEwQGACACQIDADBBYAAAJggMAMAEgQEAmCAwAAAT5le0bMtv/nO9AoHu27ev/t9Ktyck9fb/edrtCUl9EGt2e0JSL31yyu0J7TK/9lG3JyQ1aXGO2xOSuuOm825PSGpLXdztCW2KfxyX/ti+Y7vv3/AAAE8jMAAAEwQGAGCCwAAATBAYAIAJAgMAMEFgAAAmCAwAwASBAQCYIDAAABMEBgBggsAAAEwQGACACQIDADBBYAAAJggMAMCEo8AEg0FNmDBBgUBAeXl5euihh3Ty5EmrbQAAD3MUmIMHD6qiokJ1dXXat2+frl69qmnTpqm5uftftRAA0LUcXTL5xRdfbPX1li1blJeXp4aGBt11110pHQYA8DZHgfl34XBYktSnT582j4lGo4pGoy1fRyKRzjwlAMAjOvwmfzwe14IFC1RSUqKRI0e2eVwwGFRubm7LraCgoKNPCQDwkA4HpqKiQo2NjdqxY8d1j6uurlY4HG65hUKhjj4lAMBDOvQtsrlz5+qFF17QoUOHNGjQoOse6/f75ff7OzQOAOBdjgKTSCT0+OOPa/fu3Tpw4ICGDh1qtQsA4HGOAlNRUaHt27frueeeUyAQ0Pnz5yVJubm5ys7ONhkIAPAmR+/B1NTUKBwO65577tHAgQNbbjt37rTaBwDwKMffIgMAoD34LDIAgAkCAwAwQWAAACYIDADABIEBAJggMAAAEwQGAGCCwAAATBAYAIAJAgMAMEFgAAAmCAwAwASBAQCYSEt08UckRyIR5ebmaurgCmWkd98rXX56pvtf2tl32zC3JyTn6/7/H+bSbTe7PaFdfB/H3Z6QVHbD225PSOrT2wvcnpBUc343/rvx6ic6unuhwuGwcnJyrnts9//TDwDwJAIDADBBYAAAJggMAMAEgQEAmCAwAAATBAYAYILAAABMEBgAgAkCAwAwQWAAACYIDADABIEBAJggMAAAEwQGAGCCwAAATDgKTE1NjUaPHq2cnBzl5ORo8uTJ2rNnj9U2AICHOQrMoEGDtHz5cjU0NOjo0aP62te+pgcffFB/+9vfrPYBADwqw8nBM2fObPX10qVLVVNTo7q6OhUVFaV0GADA2xwF5n+LxWL63e9+p+bmZk2ePLnN46LRqKLRaMvXkUiko08JAPAQx2/ynzhxQjfddJP8fr9+8IMfaPfu3RoxYkSbxweDQeXm5rbcCgoKOjUYAOANjgNz++236/jx4/rrX/+qxx57TOXl5XrttdfaPL66ulrhcLjlFgqFOjUYAOANjr9FlpmZqS996UuSpPHjx6u+vl6//vWvtX79+mse7/f75ff7O7cSAOA5nf53MPF4vNV7LAAASA7PYKqrq1VaWqrCwkJdvHhR27dv14EDB7R3716rfQAAj3IUmKamJn3729/We++9p9zcXI0ePVp79+7V/fffb7UPAOBRjgKzadMmqx0AgB6GzyIDAJggMAAAEwQGAGCCwAAATBAYAIAJAgMAMEFgAAAmCAwAwASBAQCYIDAAABMEBgBggsAAAEwQGACACcdXtEyVxA3ZSvi675UuMwYXuD0huUuX3V6Q1MXiQW5PSMr3cdztCe2S/eaHbk9IKvZB99/oy+/n9oSkMi/2cntCm9Kvtv/PC2cwAAATBAYAYILAAABMEBgAgAkCAwAwQWAAACYIDADABIEBAJggMAAAEwQGAGCCwAAATBAYAIAJAgMAMEFgAAAmCAwAwASBAQCY6FRgli9frrS0NC1YsCBFcwAAPUWHA1NfX6/169dr9OjRqdwDAOghOhSYS5cuqaysTBs3blTv3r1TvQkA0AN0KDAVFRWaPn26pk6dmvTYaDSqSCTS6gYA6PkynD5gx44dOnbsmOrr69t1fDAY1OLFix0PAwB4m6MzmFAopPnz52vbtm3Kyspq12Oqq6sVDodbbqFQqENDAQDe4ugMpqGhQU1NTRo3blzLfbFYTIcOHdKaNWsUjUbl8/laPcbv98vv96dmLQDAMxwF5r777tOJEyda3Td79mwNHz5cP/7xjz8XFwDAF5ejwAQCAY0cObLVfTfeeKP69u37ufsBAF9s/Et+AIAJxz9F9u8OHDiQghkAgJ6GMxgAgAkCAwAwQWAAACYIDADABIEBAJggMAAAEwQGAGCCwAAATBAYAIAJAgMAMEFgAAAmCAwAwASBAQCY6PSnKXfU5cKAMnq177LLbsiuPeP2hKTSB/Z3e0JS8Yw0tyck1etqwu0JPUb66OFuT0jq40EBtycklfX+J25PaJMv1v5tnMEAAEwQGACACQIDADBBYAAAJggMAMAEgQEAmCAwAAATBAYAYILAAABMEBgAgAkCAwAwQWAAACYIDADABIEBAJggMAAAEwQGAGDCUWB+9rOfKS0trdVt+PDuf4EhAEDXc3xFy6KiIu3fv/+zXyDDtYtiAgC6Mcd1yMjI0IABAyy2AAB6EMfvwbzxxhvKz8/XrbfeqrKyMp09e9ZiFwDA4xydwUyaNElbtmzR7bffrvfee0+LFy/WV7/6VTU2NioQCFzzMdFoVNFotOXrSCTSucUAAE9wFJjS0tKW/z169GhNmjRJgwcP1q5du/Td7373mo8JBoNavHhx51YCADynUz+mfPPNN+u2227T6dOn2zymurpa4XC45RYKhTrzlAAAj+hUYC5duqQ333xTAwcObPMYv9+vnJycVjcAQM/nKDA/+tGPdPDgQf3jH//QSy+9pK9//evy+Xx65JFHrPYBADzK0Xsw77zzjh555BF9+OGH6tevn77yla+orq5O/fr1s9oHAPAoR4HZsWOH1Q4AQA/DZ5EBAEwQGACACQIDADBBYAAAJggMAMAEgQEAmCAwAAATBAYAYILAAABMEBgAgAkCAwAwQWAAACYIDADABIEBAJhw9HH9KZX471s3ld63j9sTkkrckOX2hKRyal93e0JSiUFtX5G1O4ndEnB7QlJXczLdnpBUZviq2xOS+iSv+/7Z/tTBy8cZDADABIEBAJggMAAAEwQGAGCCwAAATBAYAIAJAgMAMEFgAAAmCAwAwASBAQCYIDAAABMEBgBggsAAAEwQGACACQIDADDhODDvvvuuHn30UfXt21fZ2dkaNWqUjh49arENAOBhji449tFHH6mkpET33nuv9uzZo379+umNN95Q7969rfYBADzKUWBWrFihgoICbd68ueW+oUOHpnwUAMD7HH2L7Pnnn1dxcbFmzZqlvLw8jR07Vhs3brTaBgDwMEeBeeutt1RTU6Mvf/nL2rt3rx577DHNmzdPW7dubfMx0WhUkUik1Q0A0PM5+hZZPB5XcXGxli1bJkkaO3asGhsbtW7dOpWXl1/zMcFgUIsXL+78UgCApzg6gxk4cKBGjBjR6r477rhDZ8+ebfMx1dXVCofDLbdQKNSxpQAAT3F0BlNSUqKTJ0+2uu/UqVMaPHhwm4/x+/3y+/0dWwcA8CxHZzBPPPGE6urqtGzZMp0+fVrbt2/Xhg0bVFFRYbUPAOBRjgIzYcIE7d69W88884xGjhypJUuWaNWqVSorK7PaBwDwKEffIpOkGTNmaMaMGRZbAAA9CJ9FBgAwQWAAACYIDADABIEBAJggMAAAEwQGAGCCwAAATBAYAIAJAgMAMEFgAAAmCAwAwASBAQCYIDAAABMEBgBgwvHH9adK9l9eV0ZapltPn1TzXSOSH+SyG19p+1LV3UXka8PdnpBU9oWo2xPaxff/3nR7QlJXp3b/PzdekHE55vaEtn3a/m2cwQAATBAYAIAJAgMAMEFgAAAmCAwAwASBAQCYIDAAABMEBgBggsAAAEwQGACACQIDADBBYAAAJggMAMAEgQEAmCAwAAATBAYAYMJRYIYMGaK0tLTP3SoqKqz2AQA8ytEVLevr6xWLfXY1s8bGRt1///2aNWtWyocBALzNUWD69evX6uvly5dr2LBhuvvuu1M6CgDgfY4C879duXJFTz/9tCorK5WWltbmcdFoVNHoZ9c8j0QiHX1KAICHdPhN/meffVb//Oc/9Z3vfOe6xwWDQeXm5rbcCgoKOvqUAAAP6XBgNm3apNLSUuXn51/3uOrqaoXD4ZZbKBTq6FMCADykQ98iO3PmjPbv368//OEPSY/1+/3y+/0deRoAgId16Axm8+bNysvL0/Tp01O9BwDQQzgOTDwe1+bNm1VeXq6MjA7/jAAAoIdzHJj9+/fr7NmzmjNnjsUeAEAP4fgUZNq0aUokEhZbAAA9CJ9FBgAwQWAAACYIDADABIEBAJggMAAAEwQGAGCCwAAATBAYAIAJAgMAMEFgAAAmCAwAwASBAQCYIDAAABOuXdAlPRBQenqmW0+f1I0nzrk9Ian4Lb3dnpBUxuW42xOSynj9rNsT2iWtz81uT0jqprcibk9I6uNBN7k9IalEus/tCW2KOdjGGQwAwASBAQCYIDAAABMEBgBggsAAAEwQGACACQIDADBBYAAAJggMAMAEgQEAmCAwAAATBAYAYILAAABMEBgAgAkCAwAwQWAAACYcBSYWi2nhwoUaOnSosrOzNWzYMC1ZskSJRMJqHwDAoxxd0XLFihWqqanR1q1bVVRUpKNHj2r27NnKzc3VvHnzrDYCADzIUWBeeuklPfjgg5o+fbokaciQIXrmmWd05MgRk3EAAO9y9C2yKVOmqLa2VqdOnZIkvfrqqzp8+LBKS0vbfEw0GlUkEml1AwD0fI7OYKqqqhSJRDR8+HD5fD7FYjEtXbpUZWVlbT4mGAxq8eLFnR4KAPAWR2cwu3bt0rZt27R9+3YdO3ZMW7du1S9/+Utt3bq1zcdUV1crHA633EKhUKdHAwC6P0dnME8++aSqqqr08MMPS5JGjRqlM2fOKBgMqry8/JqP8fv98vv9nV8KAPAUR2cwly9fVnp664f4fD7F4/GUjgIAeJ+jM5iZM2dq6dKlKiwsVFFRkV555RWtXLlSc+bMsdoHAPAoR4FZvXq1Fi5cqB/+8IdqampSfn6+vv/97+upp56y2gcA8ChHgQkEAlq1apVWrVplNAcA0FPwWWQAABMEBgBggsAAAEwQGACACQIDADBBYAAAJggMAMAEgQEAmCAwAAATBAYAYILAAABMEBgAgAlHH3aZColEQpL0afxKVz+1M2ndv73xWKbbE5L69Govtyck1e1/L/63tHiX/3F1LB7zwH/vq93/dUyLub2gbZ9++omkz/4uv560RHuOSqF33nlHBQUFXfmUAIAUC4VCGjRo0HWP6fLAxONxnTt3ToFAQGlpaZ3+9SKRiAoKChQKhZSTk5OChV9MvI6pweuYOryWqZHq1zGRSOjixYvKz8//3BWO/12Xnyump6cnrV5H5OTk8JswBXgdU4PXMXV4LVMjla9jbm5uu47r/m80AAA8icAAAEx4PjB+v1+LFi2S3+93e4qn8TqmBq9j6vBapoabr2OXv8kPAPhi8PwZDACgeyIwAAATBAYAYILAAABMeD4wa9eu1ZAhQ5SVlaVJkybpyJEjbk/ylGAwqAkTJigQCCgvL08PPfSQTp486fYsz1u+fLnS0tK0YMECt6d4zrvvvqtHH31Uffv2VXZ2tkaNGqWjR4+6PctTYrGYFi5cqKFDhyo7O1vDhg3TkiVL2vX5Yank6cDs3LlTlZWVWrRokY4dO6YxY8bogQceUFNTk9vTPOPgwYOqqKhQXV2d9u3bp6tXr2ratGlqbm52e5pn1dfXa/369Ro9erTbUzzno48+UklJiXr16qU9e/botdde069+9Sv17t3b7WmesmLFCtXU1GjNmjX6+9//rhUrVugXv/iFVq9e3aU7PP1jypMmTdKECRO0Zs0aSf/6nLOCggI9/vjjqqqqcnmdN73//vvKy8vTwYMHddddd7k9x3MuXbqkcePG6Te/+Y1+/vOf684779SqVavcnuUZVVVV+stf/qI///nPbk/xtBkzZqh///7atGlTy33f+MY3lJ2draeffrrLdnj2DObKlStqaGjQ1KlTW+5LT0/X1KlT9fLLL7u4zNvC4bAkqU+fPi4v8aaKigpNnz691e9LtN/zzz+v4uJizZo1S3l5eRo7dqw2btzo9izPmTJlimpra3Xq1ClJ0quvvqrDhw+rtLS0S3d0/wsjtOGDDz5QLBZT//79W93fv39/vf766y6t8rZ4PK4FCxaopKREI0eOdHuO5+zYsUPHjh1TfX2921M866233lJNTY0qKyv1k5/8RPX19Zo3b54yMzNVXl7u9jzPqKqqUiQS0fDhw+Xz+RSLxbR06VKVlZV16Q7PBgapV1FRocbGRh0+fNjtKZ4TCoU0f/587du3T1lZWW7P8ax4PK7i4mItW7ZMkjR27Fg1NjZq3bp1BMaBXbt2adu2bdq+fbuKiop0/PhxLViwQPn5+V36Ono2MLfccot8Pp8uXLjQ6v4LFy5owIABLq3yrrlz5+qFF17QoUOHTC6n0NM1NDSoqalJ48aNa7kvFovp0KFDWrNmjaLRqHw+n4sLvWHgwIEaMWJEq/vuuOMO/f73v3dpkTc9+eSTqqqq0sMPPyxJGjVqlM6cOaNgMNilgfHsezCZmZkaP368amtrW+6Lx+Oqra3V5MmTXVzmLYlEQnPnztXu3bv1pz/9SUOHDnV7kifdd999OnHihI4fP95yKy4uVllZmY4fP05c2qmkpORzPyZ/6tQpDR482KVF3nT58uXPXQzM5/MpHo936Q7PnsFIUmVlpcrLy1VcXKyJEydq1apVam5u1uzZs92e5hkVFRXavn27nnvuOQUCAZ0/f17Svy4olJ2d7fI67wgEAp973+rGG29U3759eT/LgSeeeEJTpkzRsmXL9M1vflNHjhzRhg0btGHDBrenecrMmTO1dOlSFRYWqqioSK+88opWrlypOXPmdO2QhMetXr06UVhYmMjMzExMnDgxUVdX5/YkT5F0zdvmzZvdnuZ5d999d2L+/Pluz/CcP/7xj4mRI0cm/H5/Yvjw4YkNGza4PclzIpFIYv78+YnCwsJEVlZW4tZbb0389Kc/TUSj0S7d4el/BwMA6L48+x4MAKB7IzAAABMEBgBggsAAAEwQGACACQIDADBBYAAAJggMAMAEgQEAmCAwAAATBAYAYILAAABM/Bfi+wIYVPRrtwAAAABJRU5ErkJggg==", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] @@ -274,31 +274,31 @@ "name": "stdout", "output_type": "stream", "text": [ - "losses: \u001b[1m\u001b[37m0.30402\u001b[0m validation: \u001b[1m\u001b[37m0.05782\u001b[0m accuracy: \u001b[1m\u001b[37m0.60938\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[37m0.19382\u001b[0m validation: \u001b[1m\u001b[37m0.03175\u001b[0m accuracy: \u001b[1m\u001b[37m0.875\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.14172\u001b[0m validation: \u001b[1m\u001b[32m0.0207\u001b[0m accuracy: \u001b[1m\u001b[31m0.9375\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.1173\u001b[0m validation: \u001b[1m\u001b[32m0.02057\u001b[0m accuracy: \u001b[1m\u001b[31m0.89062\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.10261\u001b[0m validation: \u001b[1m\u001b[32m0.01206\u001b[0m accuracy: \u001b[1m\u001b[31m0.96094\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.09597\u001b[0m validation: \u001b[1m\u001b[31m0.03263\u001b[0m accuracy: \u001b[1m\u001b[31m0.875\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.08669\u001b[0m validation: \u001b[1m\u001b[33m0.0195\u001b[0m accuracy: \u001b[1m\u001b[31m0.95312\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.0785\u001b[0m validation: \u001b[1m\u001b[32m0.01075\u001b[0m accuracy: \u001b[1m\u001b[31m0.96875\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.0698\u001b[0m validation: \u001b[1m\u001b[32m0.00541\u001b[0m accuracy: \u001b[1m\u001b[31m0.97656\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.06598\u001b[0m validation: \u001b[1m\u001b[31m0.00811\u001b[0m accuracy: \u001b[1m\u001b[31m0.96875\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.06139\u001b[0m validation: \u001b[1m\u001b[33m0.00647\u001b[0m accuracy: \u001b[1m\u001b[31m0.97656\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.05716\u001b[0m validation: \u001b[1m\u001b[32m0.00523\u001b[0m accuracy: \u001b[1m\u001b[31m1.0\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.04959\u001b[0m validation: \u001b[1m\u001b[31m0.00794\u001b[0m accuracy: \u001b[1m\u001b[31m0.98438\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.04783\u001b[0m validation: \u001b[1m\u001b[32m0.00284\u001b[0m accuracy: \u001b[1m\u001b[31m0.98438\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.04559\u001b[0m validation: \u001b[1m\u001b[33m0.00404\u001b[0m accuracy: \u001b[1m\u001b[31m0.98438\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.04189\u001b[0m validation: \u001b[1m\u001b[31m0.00523\u001b[0m accuracy: \u001b[1m\u001b[31m0.99219\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.03752\u001b[0m validation: \u001b[1m\u001b[33m0.00377\u001b[0m accuracy: \u001b[1m\u001b[31m0.99219\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.03742\u001b[0m validation: \u001b[1m\u001b[33m0.0029\u001b[0m accuracy: \u001b[1m\u001b[31m0.99219\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.03468\u001b[0m validation: \u001b[1m\u001b[32m0.00266\u001b[0m accuracy: \u001b[1m\u001b[31m1.0\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.03166\u001b[0m validation: \u001b[1m\u001b[32m0.00223\u001b[0m accuracy: \u001b[1m\u001b[31m1.0\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.02953\u001b[0m validation: \u001b[1m\u001b[31m0.00337\u001b[0m accuracy: \u001b[1m\u001b[31m0.97656\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.02897\u001b[0m validation: \u001b[1m\u001b[32m0.00199\u001b[0m accuracy: \u001b[1m\u001b[31m0.99219\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.02649\u001b[0m validation: \u001b[1m\u001b[32m0.00105\u001b[0m accuracy: \u001b[1m\u001b[31m1.0\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.02409\u001b[0m validation: \u001b[1m\u001b[31m0.00409\u001b[0m accuracy: \u001b[1m\u001b[31m0.99219\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", - "losses: \u001b[1m\u001b[32m0.02343\u001b[0m validation: \u001b[1m\u001b[31m0.01581\u001b[0m accuracy: \u001b[1m\u001b[31m0.98438\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n" + "losses: \u001b[1m\u001b[37m0.48367\u001b[0m validation: \u001b[1m\u001b[37m0.10597\u001b[0m accuracy: \u001b[1m\u001b[37m0.53125\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[37m0.34256\u001b[0m validation: \u001b[1m\u001b[37m0.07349\u001b[0m accuracy: \u001b[1m\u001b[37m0.47656\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[32m0.30831\u001b[0m validation: \u001b[1m\u001b[32m0.06231\u001b[0m accuracy: \u001b[1m\u001b[31m0.71875\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[32m0.2095\u001b[0m validation: \u001b[1m\u001b[32m0.0161\u001b[0m accuracy: \u001b[1m\u001b[31m0.95312\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[32m0.10394\u001b[0m validation: \u001b[1m\u001b[32m0.00775\u001b[0m accuracy: \u001b[1m\u001b[31m0.97656\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[32m0.0657\u001b[0m validation: \u001b[1m\u001b[32m0.00307\u001b[0m accuracy: \u001b[1m\u001b[31m0.99219\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[32m0.04935\u001b[0m validation: \u001b[1m\u001b[31m0.02252\u001b[0m accuracy: \u001b[1m\u001b[31m0.91406\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[32m0.04087\u001b[0m validation: \u001b[1m\u001b[32m0.0012\u001b[0m accuracy: \u001b[1m\u001b[31m1.0\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[32m0.0347\u001b[0m validation: \u001b[1m\u001b[31m0.04984\u001b[0m accuracy: \u001b[1m\u001b[31m0.85938\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[32m0.02826\u001b[0m validation: \u001b[1m\u001b[33m0.00198\u001b[0m accuracy: \u001b[1m\u001b[31m1.0\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[32m0.02511\u001b[0m validation: \u001b[1m\u001b[31m0.04313\u001b[0m accuracy: \u001b[1m\u001b[31m0.9375\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[33m0.02562\u001b[0m validation: \u001b[1m\u001b[33m0.00393\u001b[0m accuracy: \u001b[1m\u001b[31m0.99219\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[32m0.02064\u001b[0m validation: \u001b[1m\u001b[33m0.00204\u001b[0m accuracy: \u001b[1m\u001b[31m1.0\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[33m0.02203\u001b[0m validation: \u001b[1m\u001b[31m0.00479\u001b[0m accuracy: \u001b[1m\u001b[31m0.98438\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[32m0.01849\u001b[0m validation: \u001b[1m\u001b[33m0.00237\u001b[0m accuracy: \u001b[1m\u001b[31m0.97656\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[31m0.02315\u001b[0m validation: \u001b[1m\u001b[33m0.00127\u001b[0m accuracy: \u001b[1m\u001b[31m1.0\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[33m0.01962\u001b[0m validation: \u001b[1m\u001b[32m0.00087\u001b[0m accuracy: \u001b[1m\u001b[31m1.0\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[32m0.01759\u001b[0m validation: \u001b[1m\u001b[31m0.00211\u001b[0m accuracy: \u001b[1m\u001b[31m1.0\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[32m0.0168\u001b[0m validation: \u001b[1m\u001b[31m0.00375\u001b[0m accuracy: \u001b[1m\u001b[31m0.99219\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[33m0.01701\u001b[0m validation: \u001b[1m\u001b[33m0.00164\u001b[0m accuracy: \u001b[1m\u001b[31m0.99219\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[32m0.01527\u001b[0m validation: \u001b[1m\u001b[32m0.00083\u001b[0m accuracy: \u001b[1m\u001b[31m0.99219\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[32m0.01476\u001b[0m validation: \u001b[1m\u001b[33m0.00094\u001b[0m accuracy: \u001b[1m\u001b[31m1.0\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[31m0.01603\u001b[0m validation: \u001b[1m\u001b[31m0.00171\u001b[0m accuracy: \u001b[1m\u001b[31m1.0\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[32m0.01286\u001b[0m validation: \u001b[1m\u001b[31m0.00297\u001b[0m accuracy: \u001b[1m\u001b[31m0.98438\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n", + "losses: \u001b[1m\u001b[33m0.01288\u001b[0m validation: \u001b[1m\u001b[32m0.00074\u001b[0m accuracy: \u001b[1m\u001b[31m1.0\u001b[0m learningRate: \u001b[1m\u001b[37m0.001\u001b[0m \n" ] } ], @@ -343,7 +343,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "<Figure size 640x480 with 2 Axes>" ] @@ -415,27 +415,27 @@ "————————————————————— confusion matrix —————————————————————\n", " Class 0 Class 1 Class 2 Class 3 \n", "····························································\n", - " Class 0 3196 0 4 0 \n", - " 24% 0% 0% 0% \n", + " Class 0 3200 0 0 0 \n", + " 25% 0% 0% 0% \n", "····························································\n", - " Class 1 4 3196 0 0 \n", + " Class 1 0 3198 0 2 \n", " 0% 24% 0% 0% \n", "····························································\n", - " Class 2 43 0 3157 0 \n", + " Class 2 17 0 3183 0 \n", " 0% 0% 24% 0% \n", "····························································\n", - " Class 3 0 495 0 2705 \n", - " 0% 3% 0% 21% \n", + " Class 3 0 18 1 3181 \n", + " 0% 0% 0% 24% \n", "\n", "———————————————————————————————— scores ———————————————————————————————\n", " accuracy precision sensitivity miss rate \n", "·······································································\n", - " Class 0 0.996 0.986 0.999 0.001 \n", - " Class 1 0.961 0.866 0.999 0.001 \n", - " Class 2 0.996 0.999 0.987 0.013 \n", - " Class 3 0.961 1.0 0.845 0.155 \n", + " Class 0 0.999 0.995 1.0 0.0 \n", + " Class 1 0.998 0.994 0.999 0.001 \n", + " Class 2 0.999 1.0 0.995 0.005 \n", + " Class 3 0.998 0.999 0.994 0.006 \n", "·······································································\n", - " total 0.979 0.963 0.957 0.043 \n" + " total 0.999 0.997 0.997 0.003 \n" ] } ], @@ -511,27 +511,27 @@ "————————————————————— confusion matrix —————————————————————\n", " Class 0 Class 1 Class 2 Class 3 \n", "····························································\n", - " Class 0 3196 0 4 0 \n", - " 24% 0% 0% 0% \n", + " Class 0 3200 0 0 0 \n", + " 25% 0% 0% 0% \n", "····························································\n", - " Class 1 4 3196 0 0 \n", + " Class 1 0 3198 0 2 \n", " 0% 24% 0% 0% \n", "····························································\n", - " Class 2 43 0 3157 0 \n", + " Class 2 17 0 3183 0 \n", " 0% 0% 24% 0% \n", "····························································\n", - " Class 3 0 495 0 2705 \n", - " 0% 3% 0% 21% \n", + " Class 3 0 18 1 3181 \n", + " 0% 0% 0% 24% \n", "\n", "———————————————————————————————— scores ———————————————————————————————\n", " accuracy precision sensitivity miss rate \n", "·······································································\n", - " Class 0 0.996 0.986 0.999 0.001 \n", - " Class 1 0.961 0.866 0.999 0.001 \n", - " Class 2 0.996 0.999 0.987 0.013 \n", - " Class 3 0.961 1.0 0.845 0.155 \n", + " Class 0 0.999 0.995 1.0 0.0 \n", + " Class 1 0.998 0.994 0.999 0.001 \n", + " Class 2 0.999 1.0 0.995 0.005 \n", + " Class 3 0.998 0.999 0.994 0.006 \n", "·······································································\n", - " total 0.979 0.963 0.957 0.043 \n" + " total 0.999 0.997 0.997 0.003 \n" ] } ], @@ -564,20 +564,56 @@ "metadata": {}, "outputs": [ { - "ename": "AttributeError", - "evalue": "'Quantizer' object has no attribute 'quantize'", + "ename": "AxisError", + "evalue": "axis 1 is out of bounds for array of dimension 0", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[16], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m quantizer \u001b[38;5;241m=\u001b[39m Quantizer()\n\u001b[0;32m----> 2\u001b[0m \u001b[43mquantizer\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mquantize\u001b[49m(network)\n", - "\u001b[0;31mAttributeError\u001b[0m: 'Quantizer' object has no attribute 'quantize'" + "\u001b[0;31mAxisError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[16], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m quantizer \u001b[38;5;241m=\u001b[39m Quantizer()\n\u001b[0;32m----> 2\u001b[0m quantizedModule \u001b[38;5;241m=\u001b[39m \u001b[43mquantizer\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnetwork\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Documents/neural network/machineLearning/nn/quantizer.py:102\u001b[0m, in \u001b[0;36mQuantizer.__call__\u001b[0;34m(self, module)\u001b[0m\n\u001b[1;32m 100\u001b[0m qunaitzedModule \u001b[38;5;241m=\u001b[39m deepcopy(module)\n\u001b[1;32m 101\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m layer \u001b[38;5;129;01min\u001b[39;00m qunaitzedModule:\n\u001b[0;32m--> 102\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_quantizeLayer\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlayer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 104\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m qunaitzedModule\n", + "File \u001b[0;32m~/Documents/neural network/machineLearning/nn/quantizer.py:127\u001b[0m, in \u001b[0;36mQuantizer._quantizeLayer\u001b[0;34m(self, layer)\u001b[0m\n\u001b[1;32m 124\u001b[0m param\u001b[38;5;241m.\u001b[39mquantize(bits\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbits, scheme\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mscheme)\n\u001b[1;32m 125\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(layer, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquantize\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[1;32m 126\u001b[0m \u001b[38;5;66;03m# For layers supporting direct quantization, like activation layers with LUT\u001b[39;00m\n\u001b[0;32m--> 127\u001b[0m \u001b[43mlayer\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mquantize\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbits\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbits\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Documents/neural network/machineLearning/nn/layer/activation.py:62\u001b[0m, in \u001b[0;36mActivation.quantize\u001b[0;34m(self, bits)\u001b[0m\n\u001b[1;32m 60\u001b[0m real_value \u001b[38;5;241m=\u001b[39m min_val \u001b[38;5;241m+\u001b[39m (max_val \u001b[38;5;241m-\u001b[39m min_val) \u001b[38;5;241m*\u001b[39m (i \u001b[38;5;241m/\u001b[39m (\u001b[38;5;241m2\u001b[39m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m bits \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m1\u001b[39m))\n\u001b[1;32m 61\u001b[0m \u001b[38;5;66;03m# Apply the actual activation function\u001b[39;00m\n\u001b[0;32m---> 62\u001b[0m activation_output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_function\u001b[49m\u001b[43m(\u001b[49m\u001b[43mreal_value\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 63\u001b[0m \u001b[38;5;66;03m# Re-quantize the activation output back to quantized domain\u001b[39;00m\n\u001b[1;32m 64\u001b[0m quantized_output \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mround((activation_output \u001b[38;5;241m-\u001b[39m min_val) \u001b[38;5;241m/\u001b[39m (max_val \u001b[38;5;241m-\u001b[39m min_val) \u001b[38;5;241m*\u001b[39m (\u001b[38;5;241m2\u001b[39m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m bits \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m1\u001b[39m))\n", + "File \u001b[0;32m~/Documents/neural network/machineLearning/nn/layer/activation.py:196\u001b[0m, in \u001b[0;36mSoftMax._function\u001b[0;34m(self, input)\u001b[0m\n\u001b[1;32m 194\u001b[0m \u001b[38;5;28minput\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28minput\u001b[39m \u001b[38;5;241m-\u001b[39m np\u001b[38;5;241m.\u001b[39mmax(\u001b[38;5;28minput\u001b[39m)\n\u001b[1;32m 195\u001b[0m output \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mexp(\u001b[38;5;28minput\u001b[39m)\n\u001b[0;32m--> 196\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m output\u001b[38;5;241m/\u001b[39m\u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msum\u001b[49m\u001b[43m(\u001b[49m\u001b[43moutput\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkeepdims\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/numpy/core/fromnumeric.py:2313\u001b[0m, in \u001b[0;36msum\u001b[0;34m(a, axis, dtype, out, keepdims, initial, where)\u001b[0m\n\u001b[1;32m 2310\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m out\n\u001b[1;32m 2311\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m res\n\u001b[0;32m-> 2313\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_wrapreduction\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43madd\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43msum\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mout\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkeepdims\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mkeepdims\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2314\u001b[0m \u001b[43m \u001b[49m\u001b[43minitial\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minitial\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mwhere\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mwhere\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/numpy/core/fromnumeric.py:86\u001b[0m, in \u001b[0;36m_wrapreduction\u001b[0;34m(obj, ufunc, method, axis, dtype, out, **kwargs)\u001b[0m\n\u001b[1;32m 84\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m reduction(axis\u001b[38;5;241m=\u001b[39maxis, dtype\u001b[38;5;241m=\u001b[39mdtype, out\u001b[38;5;241m=\u001b[39mout, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mpasskwargs)\n\u001b[1;32m 85\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m---> 86\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mreduction\u001b[49m\u001b[43m(\u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maxis\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mout\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpasskwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 88\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ufunc\u001b[38;5;241m.\u001b[39mreduce(obj, axis, dtype, out, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mpasskwargs)\n", + "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/numpy/core/_methods.py:49\u001b[0m, in \u001b[0;36m_sum\u001b[0;34m(a, axis, dtype, out, keepdims, initial, where)\u001b[0m\n\u001b[1;32m 47\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_sum\u001b[39m(a, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, dtype\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, out\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, keepdims\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[1;32m 48\u001b[0m initial\u001b[38;5;241m=\u001b[39m_NoValue, where\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m):\n\u001b[0;32m---> 49\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mumr_sum\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mout\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkeepdims\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minitial\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mwhere\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[0;31mAxisError\u001b[0m: axis 1 is out of bounds for array of dimension 0" ] } ], "source": [ "quantizer = Quantizer()\n", - "quantizer.quantize(network)" + "quantizedModule = quantizer(network)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<machineLearning.nn.layer.weights.Weights at 0x10e8873c0>" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "quantizedModule[4].weights" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "quantizedModule[2].lut" ] }, { @@ -589,51 +625,262 @@ "name": "stdout", "output_type": "stream", "text": [ - "evaluation |\u001b[0m\u001b[31m⣿⣿\u001b[0m\u001b[0m\u001b[31m \u001b[0m | 04%\r" + "Unsqueeze\n", + "Convolution2D input channels: 1 output channels: 3 kernel size: (3, 3) padding: (0, 0) stride: (1, 1)\n", + "[[[[ -21 -9 57]\n", + " [ 101 -127 -1]\n", + " [ 18 0 -95]]]\n", + "\n", + "\n", + " [[[ -35 29 -3]\n", + " [ 65 72 58]\n", + " [ -6 -67 12]]]\n", + "\n", + "\n", + " [[[ 2 -63 -36]\n", + " [ -69 -30 72]\n", + " [ 10 -106 58]]]]\n", + "Tanh\n", + "Flatten\n", + "Linear input size: 147 output size: 147\n", + "[[ 23 3 16 ... 12 5 -16]\n", + " [ 23 -20 26 ... -14 36 -29]\n", + " [ 26 -24 32 ... -12 38 -19]\n", + " ...\n", + " [ 20 -29 62 ... -14 16 -5]\n", + " [ -5 -32 35 ... -15 19 0]\n", + " [ -7 -16 22 ... -6 -5 -7]]\n", + "Dropout size: 147 probability: 0.35\n", + "Tanh\n", + "Linear input size: 147 output size: 147\n", + "[[ 12 0 -26 ... -10 32 -36]\n", + " [ 6 12 14 ... -20 -23 17]\n", + " [ 16 -11 -79 ... -16 72 -90]\n", + " ...\n", + " [ 18 -19 30 ... -11 -16 2]\n", + " [ 14 -7 -41 ... -10 24 -34]\n", + " [ -4 5 39 ... 29 -57 43]]\n", + "Dropout size: 147 probability: 0.35\n", + "Tanh\n", + "Linear input size: 147 output size: 147\n", + "[[ 11 11 -11 ... -32 -12 11]\n", + " [ 22 -6 9 ... 11 15 5]\n", + " [ 26 12 -13 ... 3 6 -4]\n", + " ...\n", + " [ 38 -23 9 ... 24 13 -19]\n", + " [-12 -14 12 ... 4 1 -7]\n", + " [ 27 7 -13 ... 6 12 0]]\n", + "Dropout size: 147 probability: 0.35\n", + "Tanh\n", + "Linear input size: 147 output size: 147\n", + "[[ 2 9 -12 ... 8 -39 -4]\n", + " [ 23 34 -13 ... -41 -3 -28]\n", + " [-43 -48 7 ... 35 15 47]\n", + " ...\n", + " [-75 -33 -15 ... 50 -16 44]\n", + " [ -7 -38 -4 ... 29 6 28]\n", + " [ 25 34 0 ... -40 -6 -50]]\n", + "Dropout size: 147 probability: 0.35\n", + "Tanh\n", + "Linear input size: 147 output size: 4\n", + "[[ -57 -70 -8 -9]\n", + " [ -33 -42 4 25]\n", + " [ 47 -101 64 -78]\n", + " [ 4 73 -83 21]\n", + " [ 28 -40 84 -34]\n", + " [ -57 -3 -86 45]\n", + " [ -36 -28 -4 0]\n", + " [ -39 31 -89 65]\n", + " [ -85 -41 3 -12]\n", + " [ -40 -79 -9 -28]\n", + " [ 35 66 -81 20]\n", + " [ -70 -59 6 28]\n", + " [ 57 50 -24 5]\n", + " [ -34 -48 89 7]\n", + " [ 55 -68 86 -81]\n", + " [ 88 -20 66 -38]\n", + " [ -75 -60 26 -14]\n", + " [ 39 54 40 -53]\n", + " [ -44 -33 17 -53]\n", + " [ 58 14 -50 -22]\n", + " [ 59 -16 43 -68]\n", + " [ 40 -49 85 13]\n", + " [ 71 -30 3 -82]\n", + " [ -38 -25 28 75]\n", + " [ 36 28 -49 7]\n", + " [ 75 -98 84 -41]\n", + " [ 68 49 15 -64]\n", + " [ -66 -89 13 76]\n", + " [ -42 97 -32 68]\n", + " [ 54 -86 69 -42]\n", + " [ 49 50 -38 2]\n", + " [ -22 -49 79 -22]\n", + " [ 51 57 -14 -14]\n", + " [ -19 36 -36 54]\n", + " [ -70 -6 -49 69]\n", + " [ 35 45 -48 -5]\n", + " [ -17 -55 -5 21]\n", + " [ -24 -27 28 39]\n", + " [ 19 41 3 -14]\n", + " [ 44 -63 80 -21]\n", + " [ 53 24 -9 -19]\n", + " [ -69 75 -42 23]\n", + " [ 36 54 -56 -9]\n", + " [ 46 19 -29 1]\n", + " [ -36 104 -75 -16]\n", + " [ -33 -34 -55 62]\n", + " [ -47 -39 69 -18]\n", + " [ -70 42 -48 127]\n", + " [ 77 -67 15 -47]\n", + " [ -54 -46 10 52]\n", + " [ 65 -75 116 -65]\n", + " [ 69 91 -51 -7]\n", + " [ -54 -42 0 66]\n", + " [ -57 27 -62 56]\n", + " [ 64 43 -6 -13]\n", + " [ -32 -62 47 35]\n", + " [ 20 89 -31 3]\n", + " [ -48 -30 61 23]\n", + " [ 33 35 -33 -5]\n", + " [ -79 36 -68 80]\n", + " [ -71 -84 22 62]\n", + " [ -40 -77 2 13]\n", + " [ 57 45 27 -72]\n", + " [ -66 85 -49 61]\n", + " [ 64 -39 34 -97]\n", + " [ -35 -41 -3 -20]\n", + " [ 44 43 -41 24]\n", + " [ -43 -86 -9 44]\n", + " [ -43 -16 58 23]\n", + " [ 1 98 -83 -15]\n", + " [ -15 -43 -9 86]\n", + " [ 27 51 -18 28]\n", + " [ 12 -102 57 -43]\n", + " [ 52 64 30 -37]\n", + " [ 50 52 -12 5]\n", + " [ 24 49 -85 -8]\n", + " [ 2 -50 93 -9]\n", + " [ 28 47 -6 31]\n", + " [ 63 32 -34 6]\n", + " [ 16 12 -32 5]\n", + " [ 49 -67 84 -50]\n", + " [ -52 73 -46 18]\n", + " [ -43 16 -50 33]\n", + " [ 59 24 -21 -56]\n", + " [ -14 -44 -33 61]\n", + " [ -9 31 -78 -8]\n", + " [ 26 -76 49 -28]\n", + " [ -66 -14 -82 3]\n", + " [ 114 -73 87 -71]\n", + " [ -16 -35 -41 61]\n", + " [ 54 23 -22 22]\n", + " [ 22 51 -31 -19]\n", + " [ -34 -20 23 -18]\n", + " [ -65 53 -46 48]\n", + " [ 39 55 81 -16]\n", + " [ -58 -5 7 -24]\n", + " [ -32 -46 110 33]\n", + " [ -46 -62 -39 25]\n", + " [ 21 70 -2 -10]\n", + " [ -16 -38 66 18]\n", + " [ 73 65 -10 -41]\n", + " [ -22 -43 -5 59]\n", + " [ -2 60 -39 -20]\n", + " [ -37 -51 -69 62]\n", + " [ 35 -4 38 -32]\n", + " [ -36 -59 83 15]\n", + " [ -34 -45 -95 72]\n", + " [ 6 -65 80 -42]\n", + " [ -55 -28 -51 81]\n", + " [ 59 38 -73 -15]\n", + " [ 10 51 -44 8]\n", + " [ 55 -27 23 -39]\n", + " [ -58 41 -55 38]\n", + " [ 29 87 -13 -57]\n", + " [ 77 -7 0 -3]\n", + " [ 3 43 -33 35]\n", + " [ -66 -67 -47 88]\n", + " [ 17 -71 85 -3]\n", + " [ -14 -32 25 45]\n", + " [ -32 30 -55 89]\n", + " [ -67 -45 40 26]\n", + " [ -11 64 -26 65]\n", + " [ -39 -73 2 6]\n", + " [ 31 -45 6 -53]\n", + " [ 54 -57 34 -29]\n", + " [ -59 5 -88 42]\n", + " [ -27 -69 21 -26]\n", + " [ 23 28 17 30]\n", + " [ 93 -42 42 -35]\n", + " [ -40 -66 -37 61]\n", + " [ 55 52 -42 -20]\n", + " [ -46 40 -18 43]\n", + " [ 55 -9 63 -50]\n", + " [ 58 -69 41 -110]\n", + " [ 19 58 -22 -65]\n", + " [ 47 -70 72 -16]\n", + " [ -43 -58 58 33]\n", + " [ 76 23 57 -67]\n", + " [ -68 7 -35 44]\n", + " [ 28 31 11 -103]\n", + " [ 2 -67 62 -72]\n", + " [ 45 -25 -3 9]\n", + " [ 14 55 37 -103]\n", + " [ 47 20 -5 -5]\n", + " [ 45 52 23 -53]\n", + " [ -19 -69 60 31]\n", + " [ 56 44 -8 -27]]\n", + "SoftMax\n" ] - }, + } + ], + "source": [ + "for layer in quantizedModule:\n", + " print(layer)\n", + " try:\n", + " print(layer.weights.values)\n", + " except AttributeError:\n", + " continue" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "evaluation |⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿| done ✔[0m\u001b[0m\u001b[32m \u001b[0m | 96%\n", - "â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â” evaluation â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”\n", - "————————————————————— confusion matrix —————————————————————\n", - " Class 0 Class 1 Class 2 Class 3 \n", - "····························································\n", - " Class 0 3190 1 9 0 \n", - " 24% 0% 0% 0% \n", - "····························································\n", - " Class 1 1 3180 0 19 \n", - " 0% 24% 0% 0% \n", - "····························································\n", - " Class 2 1 0 3198 1 \n", - " 0% 0% 24% 0% \n", - "····························································\n", - " Class 3 0 0 0 3200 \n", - " 0% 0% 0% 25% \n", - "\n", - "———————————————————————————————— scores ———————————————————————————————\n", - " accuracy precision sensitivity miss rate \n", - "·······································································\n", - " Class 0 0.999 0.999 0.997 0.003 \n", - " Class 1 0.998 1.0 0.994 0.006 \n", - " Class 2 0.999 0.997 0.999 0.001 \n", - " Class 3 0.998 0.994 1.0 0.0 \n", - "·······································································\n", - " total 0.999 0.998 0.998 0.003 \n" + "evaluation | | 00%\r" + ] + }, + { + "ename": "RuntimeWarning", + "evalue": "invalid value encountered in divide", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mRuntimeWarning\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[19], line 8\u001b[0m\n\u001b[1;32m 6\u001b[0m inputs \u001b[38;5;241m=\u001b[39m item[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdata\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m 7\u001b[0m labels \u001b[38;5;241m=\u001b[39m item[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlabels\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[0;32m----> 8\u001b[0m prediction \u001b[38;5;241m=\u001b[39m \u001b[43mquantizedModule\u001b[49m\u001b[43m(\u001b[49m\u001b[43minputs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 9\u001b[0m quantConfusion\u001b[38;5;241m.\u001b[39mupdate(prediction, labels)\n\u001b[1;32m 10\u001b[0m bar\u001b[38;5;241m.\u001b[39mstep()\n", + "File \u001b[0;32m~/Documents/neural network/machineLearning/nn/module/module.py:99\u001b[0m, in \u001b[0;36mModule.__call__\u001b[0;34m(self, input)\u001b[0m\n\u001b[1;32m 95\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__call__\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;28minput\u001b[39m: np\u001b[38;5;241m.\u001b[39mndarray) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m np\u001b[38;5;241m.\u001b[39mndarray:\n\u001b[1;32m 96\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 97\u001b[0m \u001b[38;5;124;03m this makes using this class more convenient\u001b[39;00m\n\u001b[1;32m 98\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m---> 99\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mforward\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Documents/neural network/machineLearning/nn/module/sequential.py:20\u001b[0m, in \u001b[0;36mSequential.forward\u001b[0;34m(self, input)\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 17\u001b[0m \u001b[38;5;124;03mcalls all layers sequentially\u001b[39;00m\n\u001b[1;32m 18\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 19\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m layer \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m:\n\u001b[0;32m---> 20\u001b[0m \u001b[38;5;28minput\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[43mlayer\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 21\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28minput\u001b[39m\n", + "File \u001b[0;32m~/Documents/neural network/machineLearning/nn/layer/layer.py:35\u001b[0m, in \u001b[0;36mLayer.__call__\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 31\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__call__\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs: ArrayLike) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m np\u001b[38;5;241m.\u001b[39mndarray:\n\u001b[1;32m 32\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 33\u001b[0m \u001b[38;5;124;03m this is used to make layers behave more like functions\u001b[39;00m\n\u001b[1;32m 34\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m---> 35\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mforward\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Documents/neural network/machineLearning/nn/layer/activation.py:38\u001b[0m, in \u001b[0;36mActivation.forward\u001b[0;34m(self, input)\u001b[0m\n\u001b[1;32m 35\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mactivation \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlut[quantized_indices]\n\u001b[1;32m 36\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 37\u001b[0m \u001b[38;5;66;03m# For the non-quantized path, directly compute the activation\u001b[39;00m\n\u001b[0;32m---> 38\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mactivation \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_function\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minput\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 40\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mactivation\n", + "File \u001b[0;32m~/Documents/neural network/machineLearning/nn/layer/activation.py:191\u001b[0m, in \u001b[0;36mSoftMax._function\u001b[0;34m(self, input)\u001b[0m\n\u001b[1;32m 189\u001b[0m \u001b[38;5;28minput\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28minput\u001b[39m \u001b[38;5;241m-\u001b[39m np\u001b[38;5;241m.\u001b[39mmax(\u001b[38;5;28minput\u001b[39m)\n\u001b[1;32m 190\u001b[0m output \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mexp(\u001b[38;5;28minput\u001b[39m)\n\u001b[0;32m--> 191\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43moutput\u001b[49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msum\u001b[49m\u001b[43m(\u001b[49m\u001b[43moutput\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkeepdims\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", + "\u001b[0;31mRuntimeWarning\u001b[0m: invalid value encountered in divide" ] } ], "source": [ "quantConfusion = ConfusionMatrix(categories)\n", - "network.eval()\n", + "quantizedModule.eval()\n", "length = len(data.eval)\n", "bar = Progressbar('evaluation', length)\n", "for item in data.eval:\n", " inputs = item['data']\n", " labels = item['labels']\n", - " prediction = network(inputs)\n", + " prediction = quantizedModule(inputs)\n", " quantConfusion.update(prediction, labels)\n", " bar.step()\n", "quantConfusion.percentages()\n", @@ -651,6 +898,46 @@ "The network works in principle and thanks to numpy, which is running on openblas, it even utilises multiple cores. I've added jupyter widgets to set network parameters.\n", "The post training quantization (PTQ) doesn't shoot errors, but actually doesn't work yet, the network still runs fully unquantized." ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(True, False)" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hasattr(network[1], 'params'), hasattr(network[1], 'lut')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(False, True)" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hasattr(network[2], 'params'), hasattr(network[2], 'lut')" + ] } ], "metadata": {