pytinytensor 0.1.3__tar.gz → 0.1.5__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 (46) hide show
  1. {pytinytensor-0.1.3/pytinytensor.egg-info → pytinytensor-0.1.5}/PKG-INFO +16 -1
  2. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/README.md +15 -0
  3. {pytinytensor-0.1.3 → pytinytensor-0.1.5/pytinytensor.egg-info}/PKG-INFO +16 -1
  4. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/pytinytensor.egg-info/SOURCES.txt +4 -1
  5. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/setup.py +1 -2
  6. pytinytensor-0.1.5/tinytensor/nn/__init__.py +14 -0
  7. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/nn/modules.py +32 -1
  8. pytinytensor-0.1.5/tinytensor/nn/utils.py +23 -0
  9. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/optim/__init__.py +6 -3
  10. pytinytensor-0.1.5/tinytensor/optim/lr_scheduler.py +13 -0
  11. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/utils/__init__.py +3 -2
  12. pytinytensor-0.1.5/tinytensor/utils/summary.py +49 -0
  13. pytinytensor-0.1.3/tinytensor/nn/__init__.py +0 -0
  14. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/LICENSE +0 -0
  15. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/pyproject.toml +0 -0
  16. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/pytinytensor.egg-info/dependency_links.txt +0 -0
  17. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/pytinytensor.egg-info/requires.txt +0 -0
  18. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/pytinytensor.egg-info/top_level.txt +0 -0
  19. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/setup.cfg +0 -0
  20. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tests/test_autograd.py +0 -0
  21. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tests/test_data.py +0 -0
  22. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tests/test_losses.py +0 -0
  23. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tests/test_nn.py +0 -0
  24. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tests/test_optim.py +0 -0
  25. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tests/test_tensor_math.py +0 -0
  26. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/__init__.py +0 -0
  27. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/backends/__init__.py +0 -0
  28. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/backends/cpu_numpy.py +0 -0
  29. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/backends/cuda_binding.cpp +0 -0
  30. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/backends/cuda_gpu.cu +0 -0
  31. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/backends/cuda_gpu.py +0 -0
  32. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/config.py +0 -0
  33. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/core/__init__.py +0 -0
  34. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/core/autograd.py +0 -0
  35. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/core/ops.py +0 -0
  36. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/core/tensor.py +0 -0
  37. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/data/__init__.py +0 -0
  38. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/data/dataloader.py +0 -0
  39. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/data/dataset.py +0 -0
  40. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/nn/activations.py +0 -0
  41. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/nn/dropout.py +0 -0
  42. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/nn/linear.py +0 -0
  43. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/nn/losses.py +0 -0
  44. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/optim/optimizer.py +0 -0
  45. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/utils/bar.py +0 -0
  46. {pytinytensor-0.1.3 → pytinytensor-0.1.5}/tinytensor/utils/early_stopping.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytinytensor
3
- Version: 0.1.3
3
+ Version: 0.1.5
4
4
  Summary: мини ИИ фреймворк от IbrokimN ( github/IbrokhimN )
5
5
  Home-page: https://github.com/IbrokhimN/tinytensor
6
6
  Author: IbrokhimN
@@ -33,6 +33,7 @@ Dynamic: summary
33
33
  ## Содержание
34
34
 
35
35
  - [Установка](#установка)
36
+ - [Документация](#документация)
36
37
  - [Быстрый старт](#быстрый-старт)
37
38
  - [Как работает autograd](#как-работает-autograd)
38
39
  - [API](#api)
@@ -59,6 +60,20 @@ pip install -r requirements.txt
59
60
 
60
61
  Зависимость одна - numpy.
61
62
 
63
+ ## Документация
64
+
65
+ Все подробности разложены по [`docs/`](docs/), README тут больше как входная дверь:
66
+
67
+ - [docs/getting_started.md](docs/getting_started.md) - установка, quickstart
68
+ - [docs/tensor_and_autograd.md](docs/tensor_and_autograd.md) - как устроен Tensor и backward
69
+ - [docs/nn.md](docs/nn.md) - Module, Linear, активации, Dropout, MSELoss
70
+ - [docs/optim.md](docs/optim.md) - SGD, AdamW
71
+ - [docs/data.md](docs/data.md) - Dataset, DataLoader
72
+ - [docs/utils.md](docs/utils.md) - progress_bar, EarlyStopping
73
+ - [docs/model_saving.md](docs/model_saving.md) - save/load модели
74
+ - [docs/cuda.md](docs/cuda.md) - опциональный cuda-бэкенд
75
+ - [docs/faq.md](docs/faq.md) - грабли, на которые уже наступили
76
+
62
77
  ## Быстрый старт
63
78
 
64
79
  ```python
@@ -10,6 +10,7 @@
10
10
  ## Содержание
11
11
 
12
12
  - [Установка](#установка)
13
+ - [Документация](#документация)
13
14
  - [Быстрый старт](#быстрый-старт)
14
15
  - [Как работает autograd](#как-работает-autograd)
15
16
  - [API](#api)
@@ -36,6 +37,20 @@ pip install -r requirements.txt
36
37
 
37
38
  Зависимость одна - numpy.
38
39
 
40
+ ## Документация
41
+
42
+ Все подробности разложены по [`docs/`](docs/), README тут больше как входная дверь:
43
+
44
+ - [docs/getting_started.md](docs/getting_started.md) - установка, quickstart
45
+ - [docs/tensor_and_autograd.md](docs/tensor_and_autograd.md) - как устроен Tensor и backward
46
+ - [docs/nn.md](docs/nn.md) - Module, Linear, активации, Dropout, MSELoss
47
+ - [docs/optim.md](docs/optim.md) - SGD, AdamW
48
+ - [docs/data.md](docs/data.md) - Dataset, DataLoader
49
+ - [docs/utils.md](docs/utils.md) - progress_bar, EarlyStopping
50
+ - [docs/model_saving.md](docs/model_saving.md) - save/load модели
51
+ - [docs/cuda.md](docs/cuda.md) - опциональный cuda-бэкенд
52
+ - [docs/faq.md](docs/faq.md) - грабли, на которые уже наступили
53
+
39
54
  ## Быстрый старт
40
55
 
41
56
  ```python
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytinytensor
3
- Version: 0.1.3
3
+ Version: 0.1.5
4
4
  Summary: мини ИИ фреймворк от IbrokimN ( github/IbrokhimN )
5
5
  Home-page: https://github.com/IbrokhimN/tinytensor
6
6
  Author: IbrokhimN
@@ -33,6 +33,7 @@ Dynamic: summary
33
33
  ## Содержание
34
34
 
35
35
  - [Установка](#установка)
36
+ - [Документация](#документация)
36
37
  - [Быстрый старт](#быстрый-старт)
37
38
  - [Как работает autograd](#как-работает-autograd)
38
39
  - [API](#api)
@@ -59,6 +60,20 @@ pip install -r requirements.txt
59
60
 
60
61
  Зависимость одна - numpy.
61
62
 
63
+ ## Документация
64
+
65
+ Все подробности разложены по [`docs/`](docs/), README тут больше как входная дверь:
66
+
67
+ - [docs/getting_started.md](docs/getting_started.md) - установка, quickstart
68
+ - [docs/tensor_and_autograd.md](docs/tensor_and_autograd.md) - как устроен Tensor и backward
69
+ - [docs/nn.md](docs/nn.md) - Module, Linear, активации, Dropout, MSELoss
70
+ - [docs/optim.md](docs/optim.md) - SGD, AdamW
71
+ - [docs/data.md](docs/data.md) - Dataset, DataLoader
72
+ - [docs/utils.md](docs/utils.md) - progress_bar, EarlyStopping
73
+ - [docs/model_saving.md](docs/model_saving.md) - save/load модели
74
+ - [docs/cuda.md](docs/cuda.md) - опциональный cuda-бэкенд
75
+ - [docs/faq.md](docs/faq.md) - грабли, на которые уже наступили
76
+
62
77
  ## Быстрый старт
63
78
 
64
79
  ```python
@@ -33,8 +33,11 @@ tinytensor/nn/dropout.py
33
33
  tinytensor/nn/linear.py
34
34
  tinytensor/nn/losses.py
35
35
  tinytensor/nn/modules.py
36
+ tinytensor/nn/utils.py
36
37
  tinytensor/optim/__init__.py
38
+ tinytensor/optim/lr_scheduler.py
37
39
  tinytensor/optim/optimizer.py
38
40
  tinytensor/utils/__init__.py
39
41
  tinytensor/utils/bar.py
40
- tinytensor/utils/early_stopping.py
42
+ tinytensor/utils/early_stopping.py
43
+ tinytensor/utils/summary.py
@@ -35,7 +35,6 @@ def find_cuda_lib_dirs():
35
35
  found.append(lib_dir)
36
36
  return found
37
37
 
38
-
39
38
  def check_cuda():
40
39
  try:
41
40
  subprocess.check_output(["nvcc", "--version"])
@@ -113,7 +112,7 @@ else:
113
112
 
114
113
  setup(
115
114
  name="pytinytensor",
116
- version="0.1.3",
115
+ version="0.1.5",
117
116
  description="мини ИИ фреймворк от IbrokimN ( github/IbrokhimN )",
118
117
  long_description=long_description,
119
118
  long_description_content_type="text/markdown",
@@ -0,0 +1,14 @@
1
+ from tinytensor.nn.modules import Module, Sequential
2
+ from tinytensor.nn.linear import Linear
3
+ from tinytensor.nn.activations import ReLU, LeReLU, Sigmod, Tanh, GELU
4
+ from tinytensor.nn.dropout import Dropout
5
+ from tinytensor.nn.losses import MSELoss
6
+
7
+ __all__ = [
8
+ "Module",
9
+ "Sequential",
10
+ "Linear",
11
+ "ReLU", "LeReLU", "Sigmod", "Tanh", "GELU",
12
+ "Dropout",
13
+ "MSELoss"
14
+ ]
@@ -37,7 +37,7 @@ class Module:
37
37
  sdict = {}
38
38
  for name, param in self._get_named_params().items():
39
39
  sdict[name] = param.data
40
- return sdict
40
+ return sdict
41
41
 
42
42
  def load_state_dict(self, sdict):
43
43
  #запихиваем обратно
@@ -63,3 +63,34 @@ class Module:
63
63
  with open(filepath, "rb") as f:
64
64
  sd = pickle.load(f)
65
65
  self.load_state_dict(sd)
66
+
67
+
68
+ class Sequential(Module):
69
+ def __init__(self, *args):
70
+ super().__init__()
71
+ self.layers = list(args)
72
+
73
+ def parameters(self):
74
+ params = []
75
+ for layer in self.layers:
76
+ params.extend(layer.parameters())
77
+ return params
78
+
79
+ def _get_named_params(self, prefix=""):
80
+ named = {}
81
+ for i, layer in enumerate(self.layers):
82
+ key = f"{prefix}.layers.{i}" if prefix else f"layers.{i}"
83
+ named.update(layer._get_named_params(prefix=key))
84
+ return named
85
+
86
+ def forward(self, x):
87
+ # закидываем x по слоям
88
+ for layer in self.layers:
89
+ x = layer(x)
90
+ return x
91
+
92
+ def __getitem__(self, idx):
93
+ return self.layers[idx]
94
+
95
+ def __len__(self):
96
+ return len(self.layers)
@@ -0,0 +1,23 @@
1
+ import numpy as np
2
+
3
+ def clip_grad_norm_(parameters, max_norm=1.0):
4
+ if isinstance(parameters, Exception): # тп защита
5
+ return
6
+
7
+ params = [p for p in parameters if p.grad is not None]
8
+ if len(params) == 0:
9
+ return 0.0
10
+
11
+ total_norm_sq = 0.0
12
+ for p in params:
13
+ total_norm_sq += np.sum(p.grad ** 2)
14
+
15
+ total_norm = np.sqrt(total_norm_sq)
16
+
17
+ clip_coef = max_norm / (total_norm + 1e-6)
18
+
19
+ if clip_coef < 1.0:
20
+ for p in params:
21
+ p.grad *= clip_coef
22
+
23
+ return total_norm
@@ -1,6 +1,9 @@
1
1
  from tinytensor.optim.optimizer import Optimizer, SGD, AdamW
2
-
3
- __all__ = ["Optimizer", "SGD", "AdamW"]
2
+ from tinytensor.optim.lr_scheduler import StepLR
3
+ __all__ = [
4
+ "Optimizer", "SGD", "AdamW",
5
+ "StepLR"
6
+ ]
4
7
 
5
8
  #эт для удобства
6
9
  #чтоб можно было писать вот так:
@@ -8,4 +11,4 @@ __all__ = ["Optimizer", "SGD", "AdamW"]
8
11
  from tinytensor.optim import AdamW
9
12
 
10
13
  optimizer = AdamW(model.parameters(), lr=1e-3)
11
- """
14
+ """
@@ -0,0 +1,13 @@
1
+ #уменьшаем lr каждые n эпох чтоб модель обучилась более плавно
2
+ class StepLR:
3
+ def __init__(self, optimizer, step_size: int, gamma: float = 0.1):
4
+ self.optimizer = optimizer
5
+ self.step_size = step_size
6
+ self.gamma = gamma
7
+ self.last_epoch = 0
8
+
9
+ def step(self):
10
+ self.last_epoch += 1
11
+ if self.last_epoch % self.step_size == 0:
12
+ # уменьшаем условно в 10 раз
13
+ self.optimizer.lr *= self.gamma
@@ -1,4 +1,5 @@
1
1
  from tinytensor.utils.bar import progress_bar, train_bar
2
2
  from tinytensor.utils.early_stopping import EarlyStopping
3
- __all__ = ["progress_bar", "train_bar",
4
- "EarlyStopping"]
3
+ from tinytensor.utils.summary import summary
4
+
5
+ __all__ = ["progress_bar", "train_bar", "EarlyStopping", "summary"]
@@ -0,0 +1,49 @@
1
+ import numpy as np
2
+ from tinytensor.core.tensor import Tensor
3
+ from tinytensor.nn.modules import Module
4
+
5
+ def summary(model: Module, input_shape: tuple):
6
+ # печает инфу о модели
7
+ print("\n" + "=" * 50)
8
+ print(f"{'layer (type)':<20} {'output shape':<18} {'param #':<10}")
9
+ print("-" * 50)
10
+
11
+ total_params = 0
12
+ trainable_params = 0
13
+
14
+ dummy_input = Tensor(np.zeros(input_shape), requires_grad=False)
15
+ x = dummy_input
16
+
17
+ layers = []
18
+ for attr in model.__dict__.values():
19
+ if isinstance(attr, Module):
20
+ layers.append(attr)
21
+ elif isinstance(attr, (list, tuple)):
22
+ for item in attr:
23
+ if isinstance(item, Module):
24
+ layers.append(item)
25
+
26
+ for layer in layers:
27
+ layer_name = layer.__class__.__name__
28
+
29
+ layer_params = 0
30
+ for p in layer.parameters():
31
+ num_params = int(np.prod(p.data.shape))
32
+ layer_params += num_params
33
+ if p.requires_grad:
34
+ trainable_params += num_params
35
+ total_params += num_params
36
+
37
+ try:
38
+ x = layer(x)
39
+ out_shape = str(tuple(x.data.shape))
40
+ except Exception as e:
41
+ out_shape = "Ошибка"
42
+
43
+ print(f"{layer_name:<20} {out_shape:<18} {layer_params:<10,}")
44
+
45
+ print("-" * 50)
46
+ print(f"Total params: {total_params:,}")
47
+ print(f"Trainable params: {trainable_params:,}")
48
+ print(f"Non-trainable params: {total_params - trainable_params:,}")
49
+ print("=" * 50 + "\n")
File without changes
File without changes
File without changes