gradforge 2.0.1__tar.gz → 2.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. {gradforge-2.0.1 → gradforge-2.0.2}/PKG-INFO +2 -1
  2. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/_tests/test_linear.py +4 -5
  3. gradforge-2.0.2/gradforge/_utils/colored_logger.py +35 -0
  4. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/autograd/_operations/add.py +1 -0
  5. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/autograd/engine.py +2 -0
  6. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/autograd/standard_engine.py +1 -0
  7. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/backend/backend.py +4 -0
  8. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/backend/numpy_backend/numpy_backend.py +12 -4
  9. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/core/tensor.py +6 -2
  10. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/optimizers/sgd.py +3 -1
  11. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/training/layers/linear.py +3 -1
  12. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge.egg-info/PKG-INFO +2 -1
  13. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge.egg-info/SOURCES.txt +1 -0
  14. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge.egg-info/requires.txt +1 -0
  15. {gradforge-2.0.1 → gradforge-2.0.2}/pyproject.toml +2 -1
  16. {gradforge-2.0.1 → gradforge-2.0.2}/README.md +0 -0
  17. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/_exceptions/__init__.py +0 -0
  18. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/_exceptions/_errors.py +0 -0
  19. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/_tests/profiling_stats.py +0 -0
  20. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/_tests/test_operation.py +0 -0
  21. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/autograd/__init__.py +0 -0
  22. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/autograd/_operations/div.py +0 -0
  23. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/autograd/_operations/matmul.py +0 -0
  24. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/autograd/_operations/mul.py +0 -0
  25. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/autograd/_operations/pow.py +0 -0
  26. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/autograd/_operations/sub.py +0 -0
  27. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/autograd/operation.py +0 -0
  28. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/backend/__init__.py +0 -0
  29. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/backend/backend_manager.py +0 -0
  30. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/backend/cupy_backend/cuda_backend.py +0 -0
  31. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/data/preprocessing/__init__.py +0 -0
  32. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/data/preprocessing/preprocess.py +0 -0
  33. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/metrics/__init__.py +0 -0
  34. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/metrics/std_metrics.py +0 -0
  35. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/optimizers/__init__.py +0 -0
  36. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/optimizers/adam.py +0 -0
  37. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/optimizers/optimizer.py +0 -0
  38. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/training/__init__.py +0 -0
  39. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/training/callbacks/__init__.py +0 -0
  40. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/training/callbacks/std_callbacks.py +0 -0
  41. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/training/layers/__init__.py +0 -0
  42. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/training/layers/layer.py +0 -0
  43. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/training/models/model.py +0 -0
  44. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/training/models/sequential.py +0 -0
  45. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge/training/trainer.py +0 -0
  46. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge.egg-info/dependency_links.txt +0 -0
  47. {gradforge-2.0.1 → gradforge-2.0.2}/gradforge.egg-info/top_level.txt +0 -0
  48. {gradforge-2.0.1 → gradforge-2.0.2}/setup.cfg +0 -0
@@ -1,12 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gradforge
3
- Version: 2.0.1
3
+ Version: 2.0.2
4
4
  Summary: Machinelearning library
5
5
  Author-email: insane-machines <forshnikita2@gmail.com>
6
6
  License: MIT
7
7
  Project-URL: Homepage, https://github.com/nikitaforsh/gradforge
8
8
  Requires-Python: >=3.11
9
9
  Description-Content-Type: text/markdown
10
+ Requires-Dist: colorama>=0.4.6
10
11
  Requires-Dist: numpy
11
12
  Requires-Dist: pytest>=9.1.1
12
13
  Provides-Extra: cuda
@@ -17,11 +17,9 @@ def train(model, x, y, epochs):
17
17
 
18
18
  optimizer.zero_grad(model.params)
19
19
  engine.backward(loss)
20
- print('eror grad: ', error.grad)
21
- try:
22
- optimizer.step(model.params)
23
- except Exception as e:
24
- print('Error: ', e)
20
+ #print('eror grad: ', error.grad)
21
+ optimizer.step(model.params)
22
+ print("Bias grad: ", model.b.grad, "Bias data: ", model.b.data)
25
23
 
26
24
  print(x.data @ model.w.data)
27
25
 
@@ -33,6 +31,7 @@ assert x.data.shape == y.data.shape
33
31
  #before = tracemalloc.take_snapshot()
34
32
 
35
33
  model = Linear(1, 1)
34
+ print(model.b.data)
36
35
  train(model, x, y, epochs=10000)
37
36
  # after = tracemalloc.take_snapshot()
38
37
 
@@ -0,0 +1,35 @@
1
+ import logging
2
+
3
+ from colorama import Fore, Style, init
4
+
5
+
6
+ class ColoredFormatter(logging.Formatter):
7
+
8
+ COLORS = {
9
+ logging.DEBUG: Fore.CYAN,
10
+ logging.INFO: Fore.GREEN,
11
+ logging.WARNING: Fore.YELLOW,
12
+ logging.ERROR: Fore.RED,
13
+ logging.CRITICAL: Fore.RED + Style.BRIGHT
14
+ }
15
+
16
+ def format(self, record):
17
+ color = self.COLORS.get(record.levelno, Fore.WHITE)
18
+
19
+ fmt = f"{Fore.LIGHTBLACK_EX}%(asctime)s {color}[%(levelname)s]{Style.RESET_ALL} %(message)s"
20
+
21
+ formatter = logging.Formatter(fmt, datefmt='%H:%M:%S')
22
+ return formatter.format(record)
23
+
24
+ class Logger:
25
+ def __init__(self):
26
+ init(autoreset=True)
27
+ self.logger = logging.getLogger("AppLogger")
28
+ self.logger.setLevel(logging.DEBUG)
29
+
30
+ console_handler = logging.StreamHandler()
31
+ console_handler.setFormatter(ColoredFormatter())
32
+ self.logger.addHandler(console_handler)
33
+
34
+ def get_logger(self):
35
+ return self.logger
@@ -1,5 +1,6 @@
1
1
  from ...autograd.operation import Operation
2
2
 
3
+
3
4
  class Add(Operation):
4
5
  def __init__(self, backend) -> None:
5
6
  super().__init__(backend)
@@ -1,6 +1,8 @@
1
1
  from abc import ABC, abstractmethod
2
+
2
3
  from ..backend.backend_manager import BackendManager
3
4
 
5
+
4
6
  class Engine(ABC):
5
7
  def __init__(self) -> None:
6
8
  super().__init__()
@@ -27,6 +27,7 @@ class StandardEngine(Engine):
27
27
  if parent.grad_fn is not None:
28
28
  self.backward(parent, parent.grad)
29
29
 
30
+
30
31
  def backward(self, tensor: Tensor, grad=None):
31
32
  if grad is None:
32
33
  grad = self._prepare_root_grad(tensor)
@@ -80,6 +80,10 @@ class Backend(ABC):
80
80
  def is_native(self, data) -> bool:
81
81
  pass
82
82
 
83
+ @abstractmethod
84
+ def sum_array(self, data, axis: tuple):
85
+ pass
86
+
83
87
 
84
88
 
85
89
 
@@ -64,9 +64,17 @@ class NumpyBackend(Backend):
64
64
  return np.ones(shape)
65
65
 
66
66
  def is_native(self, data) -> bool:
67
- if type(data) is np.ndarray:
68
- return True
69
- else:
70
- return False
67
+ return type(data) is np.ndarray
68
+
69
+ def sum_array(self, data, axis: tuple):
70
+ if(axis[0]):
71
+ data = self.convert([sum(data)])
72
+
73
+ if(axis[1]):
74
+ data = self.convert([sum(string) for string in data])
75
+
76
+ return data
77
+
78
+
71
79
 
72
80
 
@@ -5,14 +5,18 @@ from ..autograd._operations import mul, matmul, sub, div, add, pow
5
5
  from typing import Optional
6
6
 
7
7
  class Tensor():
8
- __slots__ = ['data', 'requires_grad', 'grad', 'grad_fn', 'backend']
8
+ __slots__ = ['data', 'requires_grad', 'grad', 'grad_fn', 'backend', 'grad_sum_axes']
9
9
 
10
- def __init__(self, data, requires_grad: bool = False):
10
+ def __init__(self, data, requires_grad: bool = False, grad_sum_axes: tuple = (0, 0)):
11
11
  self.requires_grad: bool = requires_grad
12
12
  self.grad = 0
13
13
  self.grad_fn: Optional[list] = None
14
14
  self.backend: Backend = BackendManager.get_backend()
15
15
  self.data = self.backend.convert(data)
16
+ self.grad_sum_axes = grad_sum_axes
17
+
18
+ def sum_grads(self):
19
+ self.grad = self.backend.sum_array(self.grad, self.grad_sum_axes)
16
20
 
17
21
  def __mul__(self, other):
18
22
  mul_op = mul.Mul(self.backend)
@@ -6,8 +6,10 @@ class SGD(Optimizer):
6
6
 
7
7
  def step(self, params: list[Tensor]):
8
8
  for param in params:
9
+ if param.data.shape != param.grad.shape:
10
+ param.sum_grads()
9
11
  param.data -= param.grad * self.learning_rate
10
12
 
11
13
  def zero_grad(self, params: list[Tensor]):
12
14
  for param in params:
13
- param.grad = param.backend.zeros_like(param.data)
15
+ param.grad = 0
@@ -6,9 +6,11 @@ class Linear(Layer):
6
6
  super().__init__()
7
7
  self._backend = BackendManager.get_backend()
8
8
  self.w: Tensor = Tensor(self._backend.array_zeros((in_shape, out_shape)), requires_grad=True)
9
+ self.b: Tensor = Tensor(self._backend.array_ones((1,)), requires_grad=True, grad_sum_axes=(1, 1))
10
+
9
11
 
10
12
  def predict(self, x: Tensor) -> Tensor:
11
- return x @ self.w
13
+ return x @ self.w + self.b
12
14
 
13
15
  @property
14
16
  def params(self) -> list[Tensor]:
@@ -1,12 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gradforge
3
- Version: 2.0.1
3
+ Version: 2.0.2
4
4
  Summary: Machinelearning library
5
5
  Author-email: insane-machines <forshnikita2@gmail.com>
6
6
  License: MIT
7
7
  Project-URL: Homepage, https://github.com/nikitaforsh/gradforge
8
8
  Requires-Python: >=3.11
9
9
  Description-Content-Type: text/markdown
10
+ Requires-Dist: colorama>=0.4.6
10
11
  Requires-Dist: numpy
11
12
  Requires-Dist: pytest>=9.1.1
12
13
  Provides-Extra: cuda
@@ -10,6 +10,7 @@ gradforge/_exceptions/_errors.py
10
10
  gradforge/_tests/profiling_stats.py
11
11
  gradforge/_tests/test_linear.py
12
12
  gradforge/_tests/test_operation.py
13
+ gradforge/_utils/colored_logger.py
13
14
  gradforge/autograd/__init__.py
14
15
  gradforge/autograd/engine.py
15
16
  gradforge/autograd/operation.py
@@ -1,3 +1,4 @@
1
+ colorama>=0.4.6
1
2
  numpy
2
3
  pytest>=9.1.1
3
4
 
@@ -4,13 +4,14 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "gradforge"
7
- version = "2.0.1"
7
+ version = "2.0.2"
8
8
  description = "Machinelearning library"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
11
11
  authors = [{name = "insane-machines", email = "forshnikita2@gmail.com"}]
12
12
  requires-python = ">=3.11"
13
13
  dependencies = [
14
+ "colorama>=0.4.6",
14
15
  "numpy",
15
16
  "pytest>=9.1.1",
16
17
  ]
File without changes
File without changes