deep-river 0.2.4__tar.gz → 0.2.6__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.
- {deep_river-0.2.4 → deep_river-0.2.6}/PKG-INFO +106 -9
- {deep_river-0.2.4 → deep_river-0.2.6}/README.md +11 -7
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/__version__.py +1 -1
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/anomaly/ae.py +3 -3
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/anomaly/probability_weighted_ae.py +2 -2
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/anomaly/scaler.py +3 -7
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/base.py +6 -24
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/classification/classifier.py +5 -6
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/classification/rolling_classifier.py +3 -3
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/classification/zoo.py +4 -4
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/regression/multioutput.py +15 -7
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/regression/rolling_regressor.py +4 -6
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/utils/__init__.py +1 -0
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/utils/estimator_checks.py +1 -0
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/utils/tensor_conversion.py +1 -1
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/utils/test_estimators.py +1 -0
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river.egg-info/PKG-INFO +107 -10
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river.egg-info/requires.txt +18 -18
- {deep_river-0.2.4 → deep_river-0.2.6}/setup.py +6 -6
- {deep_river-0.2.4 → deep_river-0.2.6}/LICENSE +0 -0
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/__init__.py +0 -0
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/anomaly/__init__.py +0 -0
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/anomaly/rolling_ae.py +0 -0
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/classification/__init__.py +0 -0
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/regression/__init__.py +0 -0
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/regression/regressor.py +0 -0
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/regression/zoo.py +0 -0
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/utils/hooks.py +0 -0
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/utils/params.py +0 -0
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/utils/test_tensor_conversion.py +0 -0
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river.egg-info/SOURCES.txt +0 -0
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river.egg-info/dependency_links.txt +0 -0
- {deep_river-0.2.4 → deep_river-0.2.6}/deep_river.egg-info/top_level.txt +0 -0
- {deep_river-0.2.4 → deep_river-0.2.6}/pyproject.toml +0 -0
- {deep_river-0.2.4 → deep_river-0.2.6}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: deep_river
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.6
|
|
4
4
|
Summary: Online Deep Learning for river
|
|
5
5
|
Home-page: https://online-ml.github.io/deep-river/
|
|
6
6
|
Author: Cedric Kulbach
|
|
@@ -16,10 +16,103 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
|
16
16
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
17
17
|
Requires-Python: >=3.6.0
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
|
+
License-File: LICENSE
|
|
20
|
+
Requires-Dist: scikit-learn~=1.4.2
|
|
21
|
+
Requires-Dist: torch~=2.2.2
|
|
22
|
+
Requires-Dist: pandas~=2.2.2
|
|
23
|
+
Requires-Dist: numpy~=1.26.4
|
|
24
|
+
Requires-Dist: river~=0.21.1
|
|
25
|
+
Requires-Dist: tqdm~=4.66.4
|
|
26
|
+
Requires-Dist: ordered-set~=4.1.0
|
|
27
|
+
Requires-Dist: torchviz~=0.0.2
|
|
19
28
|
Provides-Extra: dev
|
|
29
|
+
Requires-Dist: scikit-learn~=1.4.2; extra == "dev"
|
|
30
|
+
Requires-Dist: torch~=2.2.2; extra == "dev"
|
|
31
|
+
Requires-Dist: pandas~=2.2.2; extra == "dev"
|
|
32
|
+
Requires-Dist: numpy~=1.26.4; extra == "dev"
|
|
33
|
+
Requires-Dist: river~=0.21.1; extra == "dev"
|
|
34
|
+
Requires-Dist: tqdm~=4.66.4; extra == "dev"
|
|
35
|
+
Requires-Dist: ordered-set~=4.1.0; extra == "dev"
|
|
36
|
+
Requires-Dist: torchviz~=0.0.2; extra == "dev"
|
|
37
|
+
Requires-Dist: graphviz>=0.10.1; extra == "dev"
|
|
38
|
+
Requires-Dist: matplotlib>=3.0.2; extra == "dev"
|
|
39
|
+
Requires-Dist: mypy>=0.990; extra == "dev"
|
|
40
|
+
Requires-Dist: pre-commit>=2.20.0; extra == "dev"
|
|
41
|
+
Requires-Dist: pytest>=7.2.0; extra == "dev"
|
|
42
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
43
|
+
Requires-Dist: scikit-learn>=0.22.1; extra == "dev"
|
|
44
|
+
Requires-Dist: black>=22.10.0; extra == "dev"
|
|
45
|
+
Requires-Dist: flake8>=5.0.4; extra == "dev"
|
|
46
|
+
Requires-Dist: isort>=5.10.1; extra == "dev"
|
|
47
|
+
Requires-Dist: jupyter>=1.0.0; extra == "dev"
|
|
48
|
+
Requires-Dist: pyupgrade==3.2.0; extra == "dev"
|
|
20
49
|
Provides-Extra: docs
|
|
50
|
+
Requires-Dist: scikit-learn~=1.4.2; extra == "docs"
|
|
51
|
+
Requires-Dist: torch~=2.2.2; extra == "docs"
|
|
52
|
+
Requires-Dist: pandas~=2.2.2; extra == "docs"
|
|
53
|
+
Requires-Dist: numpy~=1.26.4; extra == "docs"
|
|
54
|
+
Requires-Dist: river~=0.21.1; extra == "docs"
|
|
55
|
+
Requires-Dist: tqdm~=4.66.4; extra == "docs"
|
|
56
|
+
Requires-Dist: ordered-set~=4.1.0; extra == "docs"
|
|
57
|
+
Requires-Dist: torchviz~=0.0.2; extra == "docs"
|
|
58
|
+
Requires-Dist: flask>=2.0.2; extra == "docs"
|
|
59
|
+
Requires-Dist: ipykernel>=6.9.0; extra == "docs"
|
|
60
|
+
Requires-Dist: mike>=0.5.3; extra == "docs"
|
|
61
|
+
Requires-Dist: mkdocs>=1.2.3; extra == "docs"
|
|
62
|
+
Requires-Dist: mkdocs-awesome-pages-plugin>=2.7.0; extra == "docs"
|
|
63
|
+
Requires-Dist: mkdocs-gen-files>=0.3.5; extra == "docs"
|
|
64
|
+
Requires-Dist: mkdocs-charts-plugin>=0.0.8; extra == "docs"
|
|
65
|
+
Requires-Dist: mkdocs-literate-nav>=0.4.1; extra == "docs"
|
|
66
|
+
Requires-Dist: mkdocs-material>=8.1.11; extra == "docs"
|
|
67
|
+
Requires-Dist: mkdocstrings[python]>=0.19.0; extra == "docs"
|
|
68
|
+
Requires-Dist: pytkdocs[numpy-style]>=0.5.0; extra == "docs"
|
|
69
|
+
Requires-Dist: ipython_genutils>=0.1.0; extra == "docs"
|
|
70
|
+
Requires-Dist: mkdocs-jupyter>=0.20.0; extra == "docs"
|
|
71
|
+
Requires-Dist: nbconvert>=6.4.2; extra == "docs"
|
|
72
|
+
Requires-Dist: numpydoc>=1.2; extra == "docs"
|
|
73
|
+
Requires-Dist: spacy>=3.2.2; extra == "docs"
|
|
74
|
+
Requires-Dist: jinja2>=3.0.3; extra == "docs"
|
|
75
|
+
Requires-Dist: dominate; extra == "docs"
|
|
76
|
+
Requires-Dist: jupyter-client; extra == "docs"
|
|
77
|
+
Requires-Dist: mkdocs-charts-plugin; extra == "docs"
|
|
78
|
+
Requires-Dist: python-slugify; extra == "docs"
|
|
79
|
+
Requires-Dist: watermark==2.3.1; extra == "docs"
|
|
21
80
|
Provides-Extra: all
|
|
22
|
-
|
|
81
|
+
Requires-Dist: graphviz>=0.10.1; extra == "all"
|
|
82
|
+
Requires-Dist: matplotlib>=3.0.2; extra == "all"
|
|
83
|
+
Requires-Dist: mypy>=0.990; extra == "all"
|
|
84
|
+
Requires-Dist: pre-commit>=2.20.0; extra == "all"
|
|
85
|
+
Requires-Dist: pytest>=7.2.0; extra == "all"
|
|
86
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "all"
|
|
87
|
+
Requires-Dist: scikit-learn>=0.22.1; extra == "all"
|
|
88
|
+
Requires-Dist: black>=22.10.0; extra == "all"
|
|
89
|
+
Requires-Dist: flake8>=5.0.4; extra == "all"
|
|
90
|
+
Requires-Dist: isort>=5.10.1; extra == "all"
|
|
91
|
+
Requires-Dist: jupyter>=1.0.0; extra == "all"
|
|
92
|
+
Requires-Dist: pyupgrade==3.2.0; extra == "all"
|
|
93
|
+
Requires-Dist: flask>=2.0.2; extra == "all"
|
|
94
|
+
Requires-Dist: ipykernel>=6.9.0; extra == "all"
|
|
95
|
+
Requires-Dist: mike>=0.5.3; extra == "all"
|
|
96
|
+
Requires-Dist: mkdocs>=1.2.3; extra == "all"
|
|
97
|
+
Requires-Dist: mkdocs-awesome-pages-plugin>=2.7.0; extra == "all"
|
|
98
|
+
Requires-Dist: mkdocs-gen-files>=0.3.5; extra == "all"
|
|
99
|
+
Requires-Dist: mkdocs-charts-plugin>=0.0.8; extra == "all"
|
|
100
|
+
Requires-Dist: mkdocs-literate-nav>=0.4.1; extra == "all"
|
|
101
|
+
Requires-Dist: mkdocs-material>=8.1.11; extra == "all"
|
|
102
|
+
Requires-Dist: mkdocstrings[python]>=0.19.0; extra == "all"
|
|
103
|
+
Requires-Dist: pytkdocs[numpy-style]>=0.5.0; extra == "all"
|
|
104
|
+
Requires-Dist: ipython_genutils>=0.1.0; extra == "all"
|
|
105
|
+
Requires-Dist: mkdocs-jupyter>=0.20.0; extra == "all"
|
|
106
|
+
Requires-Dist: nbconvert>=6.4.2; extra == "all"
|
|
107
|
+
Requires-Dist: numpydoc>=1.2; extra == "all"
|
|
108
|
+
Requires-Dist: spacy>=3.2.2; extra == "all"
|
|
109
|
+
Requires-Dist: jinja2>=3.0.3; extra == "all"
|
|
110
|
+
Requires-Dist: dominate; extra == "all"
|
|
111
|
+
Requires-Dist: jupyter-client; extra == "all"
|
|
112
|
+
Requires-Dist: mkdocs-charts-plugin; extra == "all"
|
|
113
|
+
Requires-Dist: python-slugify; extra == "all"
|
|
114
|
+
Requires-Dist: watermark==2.3.1; extra == "all"
|
|
115
|
+
Requires-Dist: dataclasses; python_version == "3.6"
|
|
23
116
|
|
|
24
117
|
|
|
25
118
|
<p align="center">
|
|
@@ -98,10 +191,10 @@ For further examples check out the <a href="https://online-ml.github.io/deep-riv
|
|
|
98
191
|
|
|
99
192
|
>>> for x, y in dataset:
|
|
100
193
|
... y_pred = model_pipeline.predict_one(x) # make a prediction
|
|
101
|
-
... metric
|
|
102
|
-
... model_pipeline
|
|
194
|
+
... metric.update(y, y_pred) # update the metric
|
|
195
|
+
... model_pipeline.learn_one(x, y) # make the model learn
|
|
103
196
|
>>> print(f"Accuracy: {metric.get():.4f}")
|
|
104
|
-
Accuracy: 0.
|
|
197
|
+
Accuracy: 0.6736
|
|
105
198
|
|
|
106
199
|
```
|
|
107
200
|
### Multi Target Regression
|
|
@@ -139,7 +232,7 @@ Accuracy: 0.6728
|
|
|
139
232
|
>>> metric = metrics.multioutput.MicroAverage(metrics.MAE())
|
|
140
233
|
>>> ev = evaluate.progressive_val_score(dataset, model, metric)
|
|
141
234
|
>>> print(f"MicroAverage(MAE): {metric.get():.2f}")
|
|
142
|
-
MicroAverage(MAE):
|
|
235
|
+
MicroAverage(MAE): 34.31
|
|
143
236
|
|
|
144
237
|
```
|
|
145
238
|
|
|
@@ -177,11 +270,11 @@ MicroAverage(MAE): 28.36
|
|
|
177
270
|
|
|
178
271
|
>>> for x, y in dataset:
|
|
179
272
|
... score = model.score_one(x)
|
|
180
|
-
... model
|
|
181
|
-
... metric
|
|
273
|
+
... model.learn_one(x=x)
|
|
274
|
+
... metric.update(y, score)
|
|
182
275
|
...
|
|
183
276
|
>>> print(f"ROCAUC: {metric.get():.4f}")
|
|
184
|
-
ROCAUC: 0.
|
|
277
|
+
ROCAUC: 0.9017
|
|
185
278
|
|
|
186
279
|
```
|
|
187
280
|
|
|
@@ -190,3 +283,7 @@ ROCAUC: 0.7447
|
|
|
190
283
|
<p align="center">
|
|
191
284
|
<img src="https://upload.wikimedia.org/wikipedia/de/thumb/4/44/Fzi_logo.svg/1200px-Fzi_logo.svg.png?raw=true" alt="FZI Logo" height="200"/>
|
|
192
285
|
</p>
|
|
286
|
+
|
|
287
|
+
<p align="center">
|
|
288
|
+
<img src="https://lieferbotnet.de/wp-content/uploads/2022/09/LieferBotNet-Logo.png?raw=true" alt="Lieferbot net" height="200"/>
|
|
289
|
+
</p>
|
|
@@ -74,10 +74,10 @@ For further examples check out the <a href="https://online-ml.github.io/deep-riv
|
|
|
74
74
|
|
|
75
75
|
>>> for x, y in dataset:
|
|
76
76
|
... y_pred = model_pipeline.predict_one(x) # make a prediction
|
|
77
|
-
... metric
|
|
78
|
-
... model_pipeline
|
|
77
|
+
... metric.update(y, y_pred) # update the metric
|
|
78
|
+
... model_pipeline.learn_one(x, y) # make the model learn
|
|
79
79
|
>>> print(f"Accuracy: {metric.get():.4f}")
|
|
80
|
-
Accuracy: 0.
|
|
80
|
+
Accuracy: 0.6736
|
|
81
81
|
|
|
82
82
|
```
|
|
83
83
|
### Multi Target Regression
|
|
@@ -115,7 +115,7 @@ Accuracy: 0.6728
|
|
|
115
115
|
>>> metric = metrics.multioutput.MicroAverage(metrics.MAE())
|
|
116
116
|
>>> ev = evaluate.progressive_val_score(dataset, model, metric)
|
|
117
117
|
>>> print(f"MicroAverage(MAE): {metric.get():.2f}")
|
|
118
|
-
MicroAverage(MAE):
|
|
118
|
+
MicroAverage(MAE): 34.31
|
|
119
119
|
|
|
120
120
|
```
|
|
121
121
|
|
|
@@ -153,11 +153,11 @@ MicroAverage(MAE): 28.36
|
|
|
153
153
|
|
|
154
154
|
>>> for x, y in dataset:
|
|
155
155
|
... score = model.score_one(x)
|
|
156
|
-
... model
|
|
157
|
-
... metric
|
|
156
|
+
... model.learn_one(x=x)
|
|
157
|
+
... metric.update(y, score)
|
|
158
158
|
...
|
|
159
159
|
>>> print(f"ROCAUC: {metric.get():.4f}")
|
|
160
|
-
ROCAUC: 0.
|
|
160
|
+
ROCAUC: 0.9017
|
|
161
161
|
|
|
162
162
|
```
|
|
163
163
|
|
|
@@ -166,3 +166,7 @@ ROCAUC: 0.7447
|
|
|
166
166
|
<p align="center">
|
|
167
167
|
<img src="https://upload.wikimedia.org/wikipedia/de/thumb/4/44/Fzi_logo.svg/1200px-Fzi_logo.svg.png?raw=true" alt="FZI Logo" height="200"/>
|
|
168
168
|
</p>
|
|
169
|
+
|
|
170
|
+
<p align="center">
|
|
171
|
+
<img src="https://lieferbotnet.de/wp-content/uploads/2022/09/LieferBotNet-Logo.png?raw=true" alt="Lieferbot net" height="200"/>
|
|
172
|
+
</p>
|
|
@@ -89,11 +89,11 @@ class Autoencoder(DeepEstimator, AnomalyDetector):
|
|
|
89
89
|
|
|
90
90
|
>>> for x, y in dataset:
|
|
91
91
|
... score = model.score_one(x)
|
|
92
|
-
... model
|
|
93
|
-
... metric
|
|
92
|
+
... model.learn_one(x=x)
|
|
93
|
+
... metric.update(y, score)
|
|
94
94
|
...
|
|
95
95
|
>>> print(f"ROCAUC: {metric.get():.4f}")
|
|
96
|
-
ROCAUC: 0.
|
|
96
|
+
ROCAUC: 0.9017
|
|
97
97
|
"""
|
|
98
98
|
|
|
99
99
|
def __init__(
|
|
@@ -83,8 +83,8 @@ class ProbabilityWeightedAutoencoder(ae.Autoencoder):
|
|
|
83
83
|
|
|
84
84
|
>>> for x, y in dataset:
|
|
85
85
|
... score = model.score_one(x)
|
|
86
|
-
... model
|
|
87
|
-
... metric
|
|
86
|
+
... model.learn_one(x=x)
|
|
87
|
+
... metric.update(y, score)
|
|
88
88
|
...
|
|
89
89
|
>>> print(f"ROCAUC: {metric.get():.4f}")
|
|
90
90
|
ROCAUC: 0.8599
|
|
@@ -4,7 +4,7 @@ import numpy as np
|
|
|
4
4
|
from river import base, utils
|
|
5
5
|
from river.anomaly import HalfSpaceTrees
|
|
6
6
|
from river.anomaly.base import AnomalyDetector
|
|
7
|
-
from river.stats import Mean, Min
|
|
7
|
+
from river.stats import Mean, Min, RollingMin
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class AnomalyScaler(base.Wrapper, AnomalyDetector):
|
|
@@ -259,12 +259,8 @@ class AnomalyMinMaxScaler(AnomalyScaler):
|
|
|
259
259
|
super().__init__(anomaly_detector)
|
|
260
260
|
self.rolling = rolling
|
|
261
261
|
self.window_size = window_size
|
|
262
|
-
self.min = (
|
|
263
|
-
|
|
264
|
-
)
|
|
265
|
-
self.max = (
|
|
266
|
-
utils.Rolling(Min(), self.window_size) if self.rolling else Min()
|
|
267
|
-
)
|
|
262
|
+
self.min = RollingMin(self.window_size) if self.rolling else Min()
|
|
263
|
+
self.max = RollingMin(self.window_size) if self.rolling else Min()
|
|
268
264
|
|
|
269
265
|
def score_one(self, *args):
|
|
270
266
|
"""
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import abc
|
|
2
1
|
import collections
|
|
3
2
|
import inspect
|
|
4
|
-
from typing import Any, Callable, Deque,
|
|
3
|
+
from typing import Any, Callable, Deque, Type, Union, cast
|
|
5
4
|
|
|
6
5
|
import torch
|
|
7
6
|
from river import base
|
|
@@ -70,27 +69,6 @@ class DeepEstimator(base.Estimator):
|
|
|
70
69
|
self.module_initialized = False
|
|
71
70
|
torch.manual_seed(seed)
|
|
72
71
|
|
|
73
|
-
@abc.abstractmethod
|
|
74
|
-
def learn_one(
|
|
75
|
-
self, x: dict, y: Optional[Any], **kwargs
|
|
76
|
-
) -> "DeepEstimator":
|
|
77
|
-
"""
|
|
78
|
-
Performs one step of training with a single example.
|
|
79
|
-
|
|
80
|
-
Parameters
|
|
81
|
-
----------
|
|
82
|
-
x
|
|
83
|
-
Input example.
|
|
84
|
-
y
|
|
85
|
-
Target value.
|
|
86
|
-
|
|
87
|
-
Returns
|
|
88
|
-
-------
|
|
89
|
-
DeepEstimator
|
|
90
|
-
The estimator itself.
|
|
91
|
-
"""
|
|
92
|
-
raise NotImplementedError
|
|
93
|
-
|
|
94
72
|
def _filter_kwargs(self, fn: Callable, override=None, **kwargs) -> dict:
|
|
95
73
|
"""Filters `net_params` and returns those in `fn`'s arguments.
|
|
96
74
|
|
|
@@ -151,7 +129,11 @@ class DeepEstimator(base.Estimator):
|
|
|
151
129
|
)
|
|
152
130
|
self.module_initialized = True
|
|
153
131
|
|
|
154
|
-
def clone(
|
|
132
|
+
def clone(
|
|
133
|
+
self,
|
|
134
|
+
new_params: dict[Any, Any] | None = None,
|
|
135
|
+
include_attributes=False,
|
|
136
|
+
):
|
|
155
137
|
"""Clones the estimator.
|
|
156
138
|
|
|
157
139
|
Parameters
|
|
@@ -116,11 +116,11 @@ class Classifier(DeepEstimator, base.MiniBatchClassifier):
|
|
|
116
116
|
|
|
117
117
|
>>> for x, y in dataset:
|
|
118
118
|
... y_pred = model_pipeline.predict_one(x) # make a prediction
|
|
119
|
-
... metric
|
|
120
|
-
... model_pipeline
|
|
119
|
+
... metric.update(y, y_pred) # update the metric
|
|
120
|
+
... model_pipeline.learn_one(x,y)
|
|
121
121
|
|
|
122
122
|
>>> print(f'Accuracy: {metric.get()}')
|
|
123
|
-
Accuracy: 0.
|
|
123
|
+
Accuracy: 0.6736
|
|
124
124
|
"""
|
|
125
125
|
|
|
126
126
|
def __init__(
|
|
@@ -194,13 +194,13 @@ class Classifier(DeepEstimator, base.MiniBatchClassifier):
|
|
|
194
194
|
self.optimizer.zero_grad()
|
|
195
195
|
y_pred = self.module(x)
|
|
196
196
|
n_classes = y_pred.shape[-1]
|
|
197
|
-
|
|
197
|
+
y_onehot = labels2onehot(
|
|
198
198
|
y=y,
|
|
199
199
|
classes=self.observed_classes,
|
|
200
200
|
n_classes=n_classes,
|
|
201
201
|
device=self.device,
|
|
202
202
|
)
|
|
203
|
-
loss = self.loss_fn(y_pred,
|
|
203
|
+
loss = self.loss_fn(y_pred, y_onehot)
|
|
204
204
|
loss.backward()
|
|
205
205
|
self.optimizer.step()
|
|
206
206
|
return self
|
|
@@ -372,7 +372,6 @@ class Classifier(DeepEstimator, base.MiniBatchClassifier):
|
|
|
372
372
|
)
|
|
373
373
|
|
|
374
374
|
def find_output_layer(self, n_features: int):
|
|
375
|
-
|
|
376
375
|
handles: List[RemovableHandle] = []
|
|
377
376
|
tracker = ForwardOrderTracker()
|
|
378
377
|
apply_hooks(module=self.module, hook=tracker, handles=handles)
|
|
@@ -119,10 +119,10 @@ class RollingClassifier(Classifier, RollingDeepEstimator):
|
|
|
119
119
|
|
|
120
120
|
>>> for x, y in dataset.take(5000):
|
|
121
121
|
... y_pred = model_pipeline.predict_one(x) # make a prediction
|
|
122
|
-
... metric
|
|
123
|
-
...
|
|
122
|
+
... metric.update(y, y_pred) # update the metric
|
|
123
|
+
... model_pipeline.learn_one(x, y) # make the model learn
|
|
124
124
|
>>> print(f'Accuracy: {metric.get()}')
|
|
125
|
-
Accuracy: 0.
|
|
125
|
+
Accuracy: 0.4548
|
|
126
126
|
"""
|
|
127
127
|
|
|
128
128
|
def __init__(
|
|
@@ -60,8 +60,8 @@ class LogisticRegression(Classifier):
|
|
|
60
60
|
|
|
61
61
|
>>> for x, y in dataset:
|
|
62
62
|
... y_pred = model_pipeline.predict_one(x) # make a prediction
|
|
63
|
-
... metric
|
|
64
|
-
... model_pipeline
|
|
63
|
+
... metric.update(y, y_pred) # update the metric
|
|
64
|
+
... model_pipeline.learn_one(x, y) # update the model
|
|
65
65
|
|
|
66
66
|
>>> print(f"Accuracy: {metric.get():.2f}")
|
|
67
67
|
Accuracy: 0.44
|
|
@@ -181,8 +181,8 @@ class MultiLayerPerceptron(Classifier):
|
|
|
181
181
|
|
|
182
182
|
>>> for x, y in dataset:
|
|
183
183
|
... y_pred = model_pipeline.predict_one(x) # make a prediction
|
|
184
|
-
... metric
|
|
185
|
-
... model_pipeline
|
|
184
|
+
... metric.update(y, y_pred) # update the metric
|
|
185
|
+
... model_pipeline.learn_one(x, y) # update the model
|
|
186
186
|
|
|
187
187
|
>>> print(f"Accuracy: {metric.get():.2f}")
|
|
188
188
|
Accuracy: 0.44
|
|
@@ -6,7 +6,7 @@ import torch
|
|
|
6
6
|
from river.base import MultiTargetRegressor as RiverMultiTargetRegressor
|
|
7
7
|
from river.base.typing import FeatureName, RegTarget
|
|
8
8
|
|
|
9
|
-
from deep_river.
|
|
9
|
+
from deep_river.base import DeepEstimator
|
|
10
10
|
from deep_river.utils import dict2tensor, float2tensor
|
|
11
11
|
|
|
12
12
|
|
|
@@ -19,7 +19,7 @@ class _TestModule(torch.nn.Module):
|
|
|
19
19
|
return self.dense0(X)
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
class MultiTargetRegressor(RiverMultiTargetRegressor,
|
|
22
|
+
class MultiTargetRegressor(RiverMultiTargetRegressor, DeepEstimator):
|
|
23
23
|
"""A Regressor that supports multiple targets.
|
|
24
24
|
|
|
25
25
|
Parameters
|
|
@@ -82,7 +82,7 @@ class MultiTargetRegressor(RiverMultiTargetRegressor, Regressor):
|
|
|
82
82
|
>>> metric = metrics.multioutput.MicroAverage(metrics.MAE())
|
|
83
83
|
>>> ev = evaluate.progressive_val_score(dataset, model, metric)
|
|
84
84
|
>>> print(f"MicroAverage(MAE): {metric.get():.2f}")
|
|
85
|
-
MicroAverage(MAE):
|
|
85
|
+
MicroAverage(MAE): 34.31
|
|
86
86
|
|
|
87
87
|
"""
|
|
88
88
|
|
|
@@ -105,9 +105,9 @@ class MultiTargetRegressor(RiverMultiTargetRegressor, Regressor):
|
|
|
105
105
|
seed=seed,
|
|
106
106
|
**kwargs,
|
|
107
107
|
)
|
|
108
|
-
self.observed_targets: OrderedDict[
|
|
109
|
-
|
|
110
|
-
|
|
108
|
+
self.observed_targets: OrderedDict[FeatureName, RegTarget] = (
|
|
109
|
+
OrderedDict()
|
|
110
|
+
)
|
|
111
111
|
|
|
112
112
|
@classmethod
|
|
113
113
|
def _unit_test_params(cls):
|
|
@@ -150,10 +150,18 @@ class MultiTargetRegressor(RiverMultiTargetRegressor, Regressor):
|
|
|
150
150
|
"check_pickling",
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
+
def _learn(self, x: torch.Tensor, y: torch.Tensor):
|
|
154
|
+
self.module.train()
|
|
155
|
+
self.optimizer.zero_grad()
|
|
156
|
+
y_pred = self.module(x)
|
|
157
|
+
loss = self.loss_fn(y_pred, y)
|
|
158
|
+
loss.backward()
|
|
159
|
+
self.optimizer.step()
|
|
160
|
+
|
|
153
161
|
def learn_one(
|
|
154
162
|
self,
|
|
155
163
|
x: dict,
|
|
156
|
-
y:
|
|
164
|
+
y: dict[FeatureName, RegTarget],
|
|
157
165
|
**kwargs,
|
|
158
166
|
) -> "MultiTargetRegressor":
|
|
159
167
|
if not self.module_initialized:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import
|
|
1
|
+
from typing import Callable, List, Type, Union
|
|
2
2
|
|
|
3
3
|
import pandas as pd
|
|
4
4
|
import torch
|
|
@@ -126,7 +126,7 @@ class RollingRegressor(RollingDeepEstimator, Regressor):
|
|
|
126
126
|
"check_predict_proba_one_binary",
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
def learn_one(self, x: dict, y: RegTarget, **kwargs) -> "
|
|
129
|
+
def learn_one(self, x: dict, y: RegTarget, **kwargs) -> "Regressor":
|
|
130
130
|
"""
|
|
131
131
|
Performs one step of training with the sliding
|
|
132
132
|
window of the most recent examples.
|
|
@@ -156,9 +156,7 @@ class RollingRegressor(RollingDeepEstimator, Regressor):
|
|
|
156
156
|
|
|
157
157
|
return self
|
|
158
158
|
|
|
159
|
-
def learn_many(
|
|
160
|
-
self, X: pd.DataFrame, y: List[Any]
|
|
161
|
-
) -> "RollingDeepEstimator":
|
|
159
|
+
def learn_many(self, X: pd.DataFrame, y: pd.Series) -> "Regressor":
|
|
162
160
|
if not self.module_initialized:
|
|
163
161
|
self.kwargs["n_features"] = len(X.columns)
|
|
164
162
|
self.initialize_module(**self.kwargs)
|
|
@@ -171,7 +169,7 @@ class RollingRegressor(RollingDeepEstimator, Regressor):
|
|
|
171
169
|
|
|
172
170
|
return self
|
|
173
171
|
|
|
174
|
-
def predict_one(self, x: dict)
|
|
172
|
+
def predict_one(self, x: dict):
|
|
175
173
|
"""
|
|
176
174
|
Predicts the target value for the current sliding
|
|
177
175
|
window of most recent examples.
|
|
@@ -156,7 +156,7 @@ def output2proba(
|
|
|
156
156
|
else:
|
|
157
157
|
preds = torch.sigmoid(preds)
|
|
158
158
|
|
|
159
|
-
preds_np = preds.
|
|
159
|
+
preds_np = preds.numpy(force=True)
|
|
160
160
|
if preds_np.shape[1] == 1:
|
|
161
161
|
preds_np = np.hstack((preds_np, 1 - preds_np))
|
|
162
162
|
n_unobserved_classes = preds_np.shape[1] - len(classes)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
|
-
Name:
|
|
3
|
-
Version: 0.2.
|
|
2
|
+
Name: deep_river
|
|
3
|
+
Version: 0.2.6
|
|
4
4
|
Summary: Online Deep Learning for river
|
|
5
5
|
Home-page: https://online-ml.github.io/deep-river/
|
|
6
6
|
Author: Cedric Kulbach
|
|
@@ -16,10 +16,103 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
|
16
16
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
17
17
|
Requires-Python: >=3.6.0
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
|
+
License-File: LICENSE
|
|
20
|
+
Requires-Dist: scikit-learn~=1.4.2
|
|
21
|
+
Requires-Dist: torch~=2.2.2
|
|
22
|
+
Requires-Dist: pandas~=2.2.2
|
|
23
|
+
Requires-Dist: numpy~=1.26.4
|
|
24
|
+
Requires-Dist: river~=0.21.1
|
|
25
|
+
Requires-Dist: tqdm~=4.66.4
|
|
26
|
+
Requires-Dist: ordered-set~=4.1.0
|
|
27
|
+
Requires-Dist: torchviz~=0.0.2
|
|
19
28
|
Provides-Extra: dev
|
|
29
|
+
Requires-Dist: scikit-learn~=1.4.2; extra == "dev"
|
|
30
|
+
Requires-Dist: torch~=2.2.2; extra == "dev"
|
|
31
|
+
Requires-Dist: pandas~=2.2.2; extra == "dev"
|
|
32
|
+
Requires-Dist: numpy~=1.26.4; extra == "dev"
|
|
33
|
+
Requires-Dist: river~=0.21.1; extra == "dev"
|
|
34
|
+
Requires-Dist: tqdm~=4.66.4; extra == "dev"
|
|
35
|
+
Requires-Dist: ordered-set~=4.1.0; extra == "dev"
|
|
36
|
+
Requires-Dist: torchviz~=0.0.2; extra == "dev"
|
|
37
|
+
Requires-Dist: graphviz>=0.10.1; extra == "dev"
|
|
38
|
+
Requires-Dist: matplotlib>=3.0.2; extra == "dev"
|
|
39
|
+
Requires-Dist: mypy>=0.990; extra == "dev"
|
|
40
|
+
Requires-Dist: pre-commit>=2.20.0; extra == "dev"
|
|
41
|
+
Requires-Dist: pytest>=7.2.0; extra == "dev"
|
|
42
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
43
|
+
Requires-Dist: scikit-learn>=0.22.1; extra == "dev"
|
|
44
|
+
Requires-Dist: black>=22.10.0; extra == "dev"
|
|
45
|
+
Requires-Dist: flake8>=5.0.4; extra == "dev"
|
|
46
|
+
Requires-Dist: isort>=5.10.1; extra == "dev"
|
|
47
|
+
Requires-Dist: jupyter>=1.0.0; extra == "dev"
|
|
48
|
+
Requires-Dist: pyupgrade==3.2.0; extra == "dev"
|
|
20
49
|
Provides-Extra: docs
|
|
50
|
+
Requires-Dist: scikit-learn~=1.4.2; extra == "docs"
|
|
51
|
+
Requires-Dist: torch~=2.2.2; extra == "docs"
|
|
52
|
+
Requires-Dist: pandas~=2.2.2; extra == "docs"
|
|
53
|
+
Requires-Dist: numpy~=1.26.4; extra == "docs"
|
|
54
|
+
Requires-Dist: river~=0.21.1; extra == "docs"
|
|
55
|
+
Requires-Dist: tqdm~=4.66.4; extra == "docs"
|
|
56
|
+
Requires-Dist: ordered-set~=4.1.0; extra == "docs"
|
|
57
|
+
Requires-Dist: torchviz~=0.0.2; extra == "docs"
|
|
58
|
+
Requires-Dist: flask>=2.0.2; extra == "docs"
|
|
59
|
+
Requires-Dist: ipykernel>=6.9.0; extra == "docs"
|
|
60
|
+
Requires-Dist: mike>=0.5.3; extra == "docs"
|
|
61
|
+
Requires-Dist: mkdocs>=1.2.3; extra == "docs"
|
|
62
|
+
Requires-Dist: mkdocs-awesome-pages-plugin>=2.7.0; extra == "docs"
|
|
63
|
+
Requires-Dist: mkdocs-gen-files>=0.3.5; extra == "docs"
|
|
64
|
+
Requires-Dist: mkdocs-charts-plugin>=0.0.8; extra == "docs"
|
|
65
|
+
Requires-Dist: mkdocs-literate-nav>=0.4.1; extra == "docs"
|
|
66
|
+
Requires-Dist: mkdocs-material>=8.1.11; extra == "docs"
|
|
67
|
+
Requires-Dist: mkdocstrings[python]>=0.19.0; extra == "docs"
|
|
68
|
+
Requires-Dist: pytkdocs[numpy-style]>=0.5.0; extra == "docs"
|
|
69
|
+
Requires-Dist: ipython_genutils>=0.1.0; extra == "docs"
|
|
70
|
+
Requires-Dist: mkdocs-jupyter>=0.20.0; extra == "docs"
|
|
71
|
+
Requires-Dist: nbconvert>=6.4.2; extra == "docs"
|
|
72
|
+
Requires-Dist: numpydoc>=1.2; extra == "docs"
|
|
73
|
+
Requires-Dist: spacy>=3.2.2; extra == "docs"
|
|
74
|
+
Requires-Dist: jinja2>=3.0.3; extra == "docs"
|
|
75
|
+
Requires-Dist: dominate; extra == "docs"
|
|
76
|
+
Requires-Dist: jupyter-client; extra == "docs"
|
|
77
|
+
Requires-Dist: mkdocs-charts-plugin; extra == "docs"
|
|
78
|
+
Requires-Dist: python-slugify; extra == "docs"
|
|
79
|
+
Requires-Dist: watermark==2.3.1; extra == "docs"
|
|
21
80
|
Provides-Extra: all
|
|
22
|
-
|
|
81
|
+
Requires-Dist: graphviz>=0.10.1; extra == "all"
|
|
82
|
+
Requires-Dist: matplotlib>=3.0.2; extra == "all"
|
|
83
|
+
Requires-Dist: mypy>=0.990; extra == "all"
|
|
84
|
+
Requires-Dist: pre-commit>=2.20.0; extra == "all"
|
|
85
|
+
Requires-Dist: pytest>=7.2.0; extra == "all"
|
|
86
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "all"
|
|
87
|
+
Requires-Dist: scikit-learn>=0.22.1; extra == "all"
|
|
88
|
+
Requires-Dist: black>=22.10.0; extra == "all"
|
|
89
|
+
Requires-Dist: flake8>=5.0.4; extra == "all"
|
|
90
|
+
Requires-Dist: isort>=5.10.1; extra == "all"
|
|
91
|
+
Requires-Dist: jupyter>=1.0.0; extra == "all"
|
|
92
|
+
Requires-Dist: pyupgrade==3.2.0; extra == "all"
|
|
93
|
+
Requires-Dist: flask>=2.0.2; extra == "all"
|
|
94
|
+
Requires-Dist: ipykernel>=6.9.0; extra == "all"
|
|
95
|
+
Requires-Dist: mike>=0.5.3; extra == "all"
|
|
96
|
+
Requires-Dist: mkdocs>=1.2.3; extra == "all"
|
|
97
|
+
Requires-Dist: mkdocs-awesome-pages-plugin>=2.7.0; extra == "all"
|
|
98
|
+
Requires-Dist: mkdocs-gen-files>=0.3.5; extra == "all"
|
|
99
|
+
Requires-Dist: mkdocs-charts-plugin>=0.0.8; extra == "all"
|
|
100
|
+
Requires-Dist: mkdocs-literate-nav>=0.4.1; extra == "all"
|
|
101
|
+
Requires-Dist: mkdocs-material>=8.1.11; extra == "all"
|
|
102
|
+
Requires-Dist: mkdocstrings[python]>=0.19.0; extra == "all"
|
|
103
|
+
Requires-Dist: pytkdocs[numpy-style]>=0.5.0; extra == "all"
|
|
104
|
+
Requires-Dist: ipython_genutils>=0.1.0; extra == "all"
|
|
105
|
+
Requires-Dist: mkdocs-jupyter>=0.20.0; extra == "all"
|
|
106
|
+
Requires-Dist: nbconvert>=6.4.2; extra == "all"
|
|
107
|
+
Requires-Dist: numpydoc>=1.2; extra == "all"
|
|
108
|
+
Requires-Dist: spacy>=3.2.2; extra == "all"
|
|
109
|
+
Requires-Dist: jinja2>=3.0.3; extra == "all"
|
|
110
|
+
Requires-Dist: dominate; extra == "all"
|
|
111
|
+
Requires-Dist: jupyter-client; extra == "all"
|
|
112
|
+
Requires-Dist: mkdocs-charts-plugin; extra == "all"
|
|
113
|
+
Requires-Dist: python-slugify; extra == "all"
|
|
114
|
+
Requires-Dist: watermark==2.3.1; extra == "all"
|
|
115
|
+
Requires-Dist: dataclasses; python_version == "3.6"
|
|
23
116
|
|
|
24
117
|
|
|
25
118
|
<p align="center">
|
|
@@ -98,10 +191,10 @@ For further examples check out the <a href="https://online-ml.github.io/deep-riv
|
|
|
98
191
|
|
|
99
192
|
>>> for x, y in dataset:
|
|
100
193
|
... y_pred = model_pipeline.predict_one(x) # make a prediction
|
|
101
|
-
... metric
|
|
102
|
-
... model_pipeline
|
|
194
|
+
... metric.update(y, y_pred) # update the metric
|
|
195
|
+
... model_pipeline.learn_one(x, y) # make the model learn
|
|
103
196
|
>>> print(f"Accuracy: {metric.get():.4f}")
|
|
104
|
-
Accuracy: 0.
|
|
197
|
+
Accuracy: 0.6736
|
|
105
198
|
|
|
106
199
|
```
|
|
107
200
|
### Multi Target Regression
|
|
@@ -139,7 +232,7 @@ Accuracy: 0.6728
|
|
|
139
232
|
>>> metric = metrics.multioutput.MicroAverage(metrics.MAE())
|
|
140
233
|
>>> ev = evaluate.progressive_val_score(dataset, model, metric)
|
|
141
234
|
>>> print(f"MicroAverage(MAE): {metric.get():.2f}")
|
|
142
|
-
MicroAverage(MAE):
|
|
235
|
+
MicroAverage(MAE): 34.31
|
|
143
236
|
|
|
144
237
|
```
|
|
145
238
|
|
|
@@ -177,11 +270,11 @@ MicroAverage(MAE): 28.36
|
|
|
177
270
|
|
|
178
271
|
>>> for x, y in dataset:
|
|
179
272
|
... score = model.score_one(x)
|
|
180
|
-
... model
|
|
181
|
-
... metric
|
|
273
|
+
... model.learn_one(x=x)
|
|
274
|
+
... metric.update(y, score)
|
|
182
275
|
...
|
|
183
276
|
>>> print(f"ROCAUC: {metric.get():.4f}")
|
|
184
|
-
ROCAUC: 0.
|
|
277
|
+
ROCAUC: 0.9017
|
|
185
278
|
|
|
186
279
|
```
|
|
187
280
|
|
|
@@ -190,3 +283,7 @@ ROCAUC: 0.7447
|
|
|
190
283
|
<p align="center">
|
|
191
284
|
<img src="https://upload.wikimedia.org/wikipedia/de/thumb/4/44/Fzi_logo.svg/1200px-Fzi_logo.svg.png?raw=true" alt="FZI Logo" height="200"/>
|
|
192
285
|
</p>
|
|
286
|
+
|
|
287
|
+
<p align="center">
|
|
288
|
+
<img src="https://lieferbotnet.de/wp-content/uploads/2022/09/LieferBotNet-Logo.png?raw=true" alt="Lieferbot net" height="200"/>
|
|
289
|
+
</p>
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
scikit-learn~=1.
|
|
2
|
-
torch~=
|
|
3
|
-
pandas~=
|
|
4
|
-
numpy~=1.
|
|
5
|
-
river~=0.
|
|
6
|
-
tqdm~=4.
|
|
1
|
+
scikit-learn~=1.4.2
|
|
2
|
+
torch~=2.2.2
|
|
3
|
+
pandas~=2.2.2
|
|
4
|
+
numpy~=1.26.4
|
|
5
|
+
river~=0.21.1
|
|
6
|
+
tqdm~=4.66.4
|
|
7
7
|
ordered-set~=4.1.0
|
|
8
8
|
torchviz~=0.0.2
|
|
9
9
|
|
|
@@ -47,12 +47,12 @@ python-slugify
|
|
|
47
47
|
watermark==2.3.1
|
|
48
48
|
|
|
49
49
|
[dev]
|
|
50
|
-
scikit-learn~=1.
|
|
51
|
-
torch~=
|
|
52
|
-
pandas~=
|
|
53
|
-
numpy~=1.
|
|
54
|
-
river~=0.
|
|
55
|
-
tqdm~=4.
|
|
50
|
+
scikit-learn~=1.4.2
|
|
51
|
+
torch~=2.2.2
|
|
52
|
+
pandas~=2.2.2
|
|
53
|
+
numpy~=1.26.4
|
|
54
|
+
river~=0.21.1
|
|
55
|
+
tqdm~=4.66.4
|
|
56
56
|
ordered-set~=4.1.0
|
|
57
57
|
torchviz~=0.0.2
|
|
58
58
|
graphviz>=0.10.1
|
|
@@ -69,12 +69,12 @@ jupyter>=1.0.0
|
|
|
69
69
|
pyupgrade==3.2.0
|
|
70
70
|
|
|
71
71
|
[docs]
|
|
72
|
-
scikit-learn~=1.
|
|
73
|
-
torch~=
|
|
74
|
-
pandas~=
|
|
75
|
-
numpy~=1.
|
|
76
|
-
river~=0.
|
|
77
|
-
tqdm~=4.
|
|
72
|
+
scikit-learn~=1.4.2
|
|
73
|
+
torch~=2.2.2
|
|
74
|
+
pandas~=2.2.2
|
|
75
|
+
numpy~=1.26.4
|
|
76
|
+
river~=0.21.1
|
|
77
|
+
tqdm~=4.66.4
|
|
78
78
|
ordered-set~=4.1.0
|
|
79
79
|
torchviz~=0.0.2
|
|
80
80
|
flask>=2.0.2
|
|
@@ -13,12 +13,12 @@ REQUIRES_PYTHON = ">=3.6.0"
|
|
|
13
13
|
|
|
14
14
|
# Package requirements.
|
|
15
15
|
base_packages = [
|
|
16
|
-
"scikit-learn~=1.
|
|
17
|
-
"torch~=
|
|
18
|
-
"pandas~=
|
|
19
|
-
"numpy~=1.
|
|
20
|
-
"river~=0.
|
|
21
|
-
"tqdm~=4.
|
|
16
|
+
"scikit-learn~=1.4.2",
|
|
17
|
+
"torch~=2.2.2",
|
|
18
|
+
"pandas~=2.2.2",
|
|
19
|
+
"numpy~=1.26.4",
|
|
20
|
+
"river~=0.21.1",
|
|
21
|
+
"tqdm~=4.66.4",
|
|
22
22
|
"ordered-set~=4.1.0",
|
|
23
23
|
"torchviz~=0.0.2",
|
|
24
24
|
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|