deeplotx 0.8.3__py3-none-any.whl → 0.8.5__py3-none-any.whl
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.
- deeplotx/__init__.py +1 -0
- deeplotx/nn/__init__.py +1 -0
- deeplotx/nn/auto_regression.py +2 -2
- deeplotx/nn/linear_regression.py +5 -4
- deeplotx/nn/logistic_regression.py +4 -4
- deeplotx/nn/long_context_recursive_sequential.py +2 -3
- deeplotx/nn/multi_head_feed_forward.py +32 -0
- deeplotx/nn/recursive_sequential.py +5 -5
- deeplotx/nn/softmax_regression.py +4 -4
- deeplotx/trainer/text_binary_classification_trainer.py +6 -5
- {deeplotx-0.8.3.dist-info → deeplotx-0.8.5.dist-info}/METADATA +2 -1
- {deeplotx-0.8.3.dist-info → deeplotx-0.8.5.dist-info}/RECORD +15 -14
- {deeplotx-0.8.3.dist-info → deeplotx-0.8.5.dist-info}/WHEEL +0 -0
- {deeplotx-0.8.3.dist-info → deeplotx-0.8.5.dist-info}/licenses/LICENSE +0 -0
- {deeplotx-0.8.3.dist-info → deeplotx-0.8.5.dist-info}/top_level.txt +0 -0
deeplotx/__init__.py
CHANGED
deeplotx/nn/__init__.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
from .base_neural_network import BaseNeuralNetwork
|
2
2
|
from .feed_forward import FeedForward
|
3
|
+
from .multi_head_feed_forward import MultiHeadFeedForward
|
3
4
|
from .linear_regression import LinearRegression
|
4
5
|
from .logistic_regression import LogisticRegression
|
5
6
|
from .softmax_regression import SoftmaxRegression
|
deeplotx/nn/auto_regression.py
CHANGED
@@ -7,8 +7,8 @@ class AutoRegression(RecursiveSequential):
|
|
7
7
|
def __init__(self, feature_dim: int, bias: bool = True,
|
8
8
|
recursive_layers: int = 1, recursive_hidden_dim: int | None = None,
|
9
9
|
ffn_layers: int = 1, ffn_expansion_factor: int | float = 2, dropout_rate: float = 0.05,
|
10
|
-
model_name: str | None = None, device: str | None = None, dtype: torch.dtype | None = None):
|
10
|
+
model_name: str | None = None, device: str | None = None, dtype: torch.dtype | None = None, **kwargs):
|
11
11
|
super().__init__(input_dim=feature_dim, output_dim=feature_dim, bias=bias,
|
12
12
|
recursive_layers=recursive_layers, recursive_hidden_dim=recursive_hidden_dim,
|
13
13
|
ffn_layers=ffn_layers, ffn_expansion_factor=ffn_expansion_factor,
|
14
|
-
dropout_rate=dropout_rate, model_name=model_name, device=device, dtype=dtype)
|
14
|
+
dropout_rate=dropout_rate, model_name=model_name, device=device, dtype=dtype, **kwargs)
|
deeplotx/nn/linear_regression.py
CHANGED
@@ -4,16 +4,17 @@ import torch
|
|
4
4
|
from torch import nn
|
5
5
|
|
6
6
|
from deeplotx.nn.base_neural_network import BaseNeuralNetwork
|
7
|
-
from deeplotx.nn.
|
7
|
+
from deeplotx.nn.multi_head_feed_forward import MultiHeadFeedForward
|
8
8
|
|
9
9
|
|
10
10
|
class LinearRegression(BaseNeuralNetwork):
|
11
|
-
def __init__(self, input_dim: int, output_dim: int, num_layers: int = 1,
|
11
|
+
def __init__(self, input_dim: int, output_dim: int, num_heads: int = 1, num_layers: int = 1,
|
12
12
|
expansion_factor: int | float = 1.5, bias: bool = True, dropout_rate: float = 0.1,
|
13
13
|
model_name: str | None = None, device: str | None = None, dtype: torch.dtype | None = None):
|
14
14
|
super().__init__(in_features=input_dim, out_features=output_dim, model_name=model_name, device=device, dtype=dtype)
|
15
|
-
self.ffn =
|
16
|
-
|
15
|
+
self.ffn = MultiHeadFeedForward(feature_dim=input_dim, num_heads=num_heads,
|
16
|
+
num_layers=num_layers, expansion_factor=expansion_factor,
|
17
|
+
bias=bias, dropout_rate=dropout_rate, device=self.device, dtype=self.dtype)
|
17
18
|
self.proj = nn.Linear(in_features=input_dim, out_features=output_dim,
|
18
19
|
bias=bias, device=self.device, dtype=self.dtype)
|
19
20
|
|
@@ -6,10 +6,10 @@ from deeplotx.nn.linear_regression import LinearRegression
|
|
6
6
|
|
7
7
|
|
8
8
|
class LogisticRegression(LinearRegression):
|
9
|
-
def __init__(self, input_dim: int, output_dim: int = 1,
|
10
|
-
bias: bool = True, dropout_rate: float = 0.1,
|
11
|
-
device: str | None = None, dtype: torch.dtype | None = None):
|
12
|
-
super().__init__(input_dim=input_dim, output_dim=output_dim, num_layers=num_layers,
|
9
|
+
def __init__(self, input_dim: int, output_dim: int = 1, num_heads: int = 1, num_layers: int = 1,
|
10
|
+
expansion_factor: int | float = 1.5, bias: bool = True, dropout_rate: float = 0.1,
|
11
|
+
model_name: str | None = None, device: str | None = None, dtype: torch.dtype | None = None):
|
12
|
+
super().__init__(input_dim=input_dim, output_dim=output_dim, num_heads=num_heads, num_layers=num_layers,
|
13
13
|
expansion_factor=expansion_factor, bias=bias, dropout_rate=dropout_rate,
|
14
14
|
model_name=model_name, device=device, dtype=dtype)
|
15
15
|
|
@@ -12,12 +12,11 @@ class LongContextRecursiveSequential(RecursiveSequential):
|
|
12
12
|
def __init__(self, input_dim: int, output_dim: int, bias: bool = True,
|
13
13
|
encoder_layers: int = 1, attn_heads: int = 1, recursive_layers: int = 2, recursive_hidden_dim: int | None = None,
|
14
14
|
ffn_layers: int = 1, ffn_expansion_factor: int | float = 2, dropout_rate: float = 0.05,
|
15
|
-
model_name: str | None = None, device: str | None = None, dtype: torch.dtype | None = None,
|
16
|
-
**kwargs):
|
15
|
+
model_name: str | None = None, device: str | None = None, dtype: torch.dtype | None = None, **kwargs):
|
17
16
|
super().__init__(input_dim=input_dim, output_dim=output_dim, bias=bias,
|
18
17
|
recursive_layers=recursive_layers, recursive_hidden_dim=recursive_hidden_dim,
|
19
18
|
ffn_layers=ffn_layers, ffn_expansion_factor=ffn_expansion_factor, dropout_rate=dropout_rate,
|
20
|
-
model_name=model_name, device=device, dtype=dtype)
|
19
|
+
model_name=model_name, device=device, dtype=dtype, **kwargs)
|
21
20
|
self.roformer_encoders = nn.ModuleList([RoFormerEncoder(feature_dim=input_dim, attn_heads=attn_heads, bias=bias,
|
22
21
|
ffn_layers=kwargs.get('encoder_ffn_layers', ffn_layers),
|
23
22
|
ffn_expansion_factor=kwargs.get('encoder_expansion_factor', ffn_expansion_factor),
|
@@ -0,0 +1,32 @@
|
|
1
|
+
from typing_extensions import override
|
2
|
+
|
3
|
+
import torch
|
4
|
+
from torch import nn
|
5
|
+
|
6
|
+
from deeplotx.nn.base_neural_network import BaseNeuralNetwork
|
7
|
+
from deeplotx.nn.feed_forward import FeedForward
|
8
|
+
|
9
|
+
|
10
|
+
class MultiHeadFeedForward(BaseNeuralNetwork):
|
11
|
+
def __init__(self, feature_dim: int, num_heads: int = 1, num_layers: int = 1, expansion_factor: int | float = 2,
|
12
|
+
bias: bool = True, dropout_rate: float = 0.05, model_name: str | None = None,
|
13
|
+
device: str | None = None, dtype: torch.dtype | None = None):
|
14
|
+
super().__init__(in_features=feature_dim, out_features=feature_dim, model_name=model_name,
|
15
|
+
device=device, dtype=dtype)
|
16
|
+
self._num_heads = num_heads
|
17
|
+
self.expand_proj = nn.Linear(in_features=feature_dim, out_features=feature_dim * self._num_heads, bias=bias,
|
18
|
+
device=self.device, dtype=self.dtype)
|
19
|
+
self.ffn_heads = nn.ModuleList([FeedForward(feature_dim=feature_dim, num_layers=num_layers,
|
20
|
+
expansion_factor=expansion_factor, bias=bias,
|
21
|
+
dropout_rate=dropout_rate, device=self.device,
|
22
|
+
dtype=self.dtype) for _ in range(self._num_heads)])
|
23
|
+
self.out_proj = nn.Linear(in_features=feature_dim * self._num_heads, out_features=feature_dim, bias=bias,
|
24
|
+
device=self.device, dtype=self.dtype)
|
25
|
+
|
26
|
+
@override
|
27
|
+
def forward(self, x: torch.Tensor) -> torch.Tensor:
|
28
|
+
x = self.ensure_device_and_dtype(x, device=self.device, dtype=self.dtype)
|
29
|
+
x = self.expand_proj(x)
|
30
|
+
x_heads = x.split(self.in_features, dim=-1)
|
31
|
+
head_outs = [self.ffn_heads[_](x_heads[_]) for _ in range(self._num_heads)]
|
32
|
+
return self.out_proj(torch.concat(head_outs, dim=-1))
|
@@ -4,14 +4,14 @@ import torch
|
|
4
4
|
from torch import nn
|
5
5
|
|
6
6
|
from deeplotx.nn.base_neural_network import BaseNeuralNetwork
|
7
|
-
from deeplotx.nn.
|
7
|
+
from deeplotx.nn.multi_head_feed_forward import MultiHeadFeedForward
|
8
8
|
|
9
9
|
|
10
10
|
class RecursiveSequential(BaseNeuralNetwork):
|
11
11
|
def __init__(self, input_dim: int, output_dim: int, bias: bool = True,
|
12
12
|
recursive_layers: int = 1, recursive_hidden_dim: int | None = None,
|
13
13
|
ffn_layers: int = 1, ffn_expansion_factor: int | float = 2, dropout_rate: float = 0.05,
|
14
|
-
model_name: str | None = None, device: str | None = None, dtype: torch.dtype | None = None):
|
14
|
+
model_name: str | None = None, device: str | None = None, dtype: torch.dtype | None = None, **kwargs):
|
15
15
|
super().__init__(in_features=input_dim, out_features=output_dim, model_name=model_name,
|
16
16
|
device=device, dtype=dtype)
|
17
17
|
if recursive_hidden_dim is None:
|
@@ -20,9 +20,9 @@ class RecursiveSequential(BaseNeuralNetwork):
|
|
20
20
|
num_layers=recursive_layers, batch_first=True,
|
21
21
|
bias=True, bidirectional=True, device=self.device,
|
22
22
|
dtype=self.dtype)
|
23
|
-
self.ffn =
|
24
|
-
|
25
|
-
|
23
|
+
self.ffn = MultiHeadFeedForward(feature_dim=recursive_hidden_dim * 2, num_heads=kwargs.get('ffn_heads', 1),
|
24
|
+
num_layers=ffn_layers, expansion_factor=ffn_expansion_factor,
|
25
|
+
bias=bias, dropout_rate=dropout_rate, device=self.device, dtype=self.dtype)
|
26
26
|
self.__proj = nn.Linear(in_features=recursive_hidden_dim * 2, out_features=output_dim, bias=bias,
|
27
27
|
device=self.device, dtype=self.dtype)
|
28
28
|
|
@@ -6,10 +6,10 @@ from deeplotx.nn.linear_regression import LinearRegression
|
|
6
6
|
|
7
7
|
|
8
8
|
class SoftmaxRegression(LinearRegression):
|
9
|
-
def __init__(self, input_dim: int, output_dim: int,
|
10
|
-
bias: bool = True, dropout_rate: float = 0.1,
|
11
|
-
device: str | None = None, dtype: torch.dtype | None = None):
|
12
|
-
super().__init__(input_dim=input_dim, output_dim=output_dim, num_layers=num_layers,
|
9
|
+
def __init__(self, input_dim: int, output_dim: int, num_heads: int = 1, num_layers: int = 1,
|
10
|
+
expansion_factor: int | float = 1.5, bias: bool = True, dropout_rate: float = 0.1,
|
11
|
+
model_name: str | None = None, device: str | None = None, dtype: torch.dtype | None = None):
|
12
|
+
super().__init__(input_dim=input_dim, output_dim=output_dim, num_heads=num_heads, num_layers=num_layers,
|
13
13
|
expansion_factor=expansion_factor, bias=bias, dropout_rate=dropout_rate,
|
14
14
|
model_name=model_name, device=device, dtype=dtype)
|
15
15
|
|
@@ -49,6 +49,7 @@ class TextBinaryClassifierTrainer(BaseTrainer):
|
|
49
49
|
logger.warning("The dimension of features doesn't match. A new model instance will be created.")
|
50
50
|
self.model = None
|
51
51
|
if self.model is None:
|
52
|
+
ffn_heads = kwargs.get('ffn_heads', 2)
|
52
53
|
ffn_layers = kwargs.get('ffn_layers', 5)
|
53
54
|
ffn_expansion_factor = kwargs.get('ffn_expansion_factor', 2)
|
54
55
|
bias = kwargs.get('bias', True)
|
@@ -63,11 +64,11 @@ class TextBinaryClassifierTrainer(BaseTrainer):
|
|
63
64
|
self.model = LongContextRecursiveSequential(input_dim=feature_dim, output_dim=1, bias=bias,
|
64
65
|
encoder_layers=encoder_layers, attn_heads=attn_heads,
|
65
66
|
recursive_layers=recursive_layers, recursive_hidden_dim=recursive_hidden_dim,
|
66
|
-
ffn_layers=ffn_layers,
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
theta=theta).initialize_weights()
|
67
|
+
ffn_layers=ffn_layers, ffn_heads=ffn_heads, ffn_expansion_factor=ffn_expansion_factor,
|
68
|
+
dropout_rate=dropout_rate, encoder_ffn_layers=encoder_ffn_layers,
|
69
|
+
encoder_expansion_factor=encoder_expansion_factor, encoder_dropout_rate=encoder_dropout_rate,
|
70
|
+
attn_ffn_layers=attn_ffn_layers, attn_expansion_factor=attn_expansion_factor,
|
71
|
+
attn_dropout_rate=attn_dropout_rate, theta=theta).initialize_weights()
|
71
72
|
logger.debug(f'Training Model: \n{self.model}')
|
72
73
|
loss_function = nn.BCELoss()
|
73
74
|
optimizer = optim.Adamax(self.model.parameters(), lr=learning_rate)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: deeplotx
|
3
|
-
Version: 0.8.
|
3
|
+
Version: 0.8.5
|
4
4
|
Summary: Easy-2-use long text NLP toolkit.
|
5
5
|
Requires-Python: >=3.10
|
6
6
|
Description-Content-Type: text/markdown
|
@@ -168,6 +168,7 @@ Dynamic: license-file
|
|
168
168
|
```python
|
169
169
|
from deeplotx import (
|
170
170
|
FeedForward, # 前馈神经网络
|
171
|
+
MultiHeadFeedForward, # 多头前馈神经网络
|
171
172
|
LinearRegression, # 线性回归
|
172
173
|
LogisticRegression, # 逻辑回归 / 二分类 / 多标签分类
|
173
174
|
SoftmaxRegression, # Softmax 回归 / 多分类
|
@@ -1,34 +1,35 @@
|
|
1
|
-
deeplotx/__init__.py,sha256=
|
1
|
+
deeplotx/__init__.py,sha256=xEq8WQ2LpEZoLX_Z464d0dy4aemFGrEV6ZMJr6ioFnQ,1186
|
2
2
|
deeplotx/encoder/__init__.py,sha256=BrsF5_4O-4pfihYF2wjExDOoAY-03kGJTH-Mhez4tsE,129
|
3
3
|
deeplotx/encoder/encoder.py,sha256=oSBdA-MiwMKNfTFJWR-RdvNS0G0qfX-Qchwy4LuwB00,3985
|
4
4
|
deeplotx/encoder/long_text_encoder.py,sha256=3ScdKDi65J5tdO8PFCXBjCzNUCLlJRwVhpDR0BrphG4,3951
|
5
5
|
deeplotx/encoder/longformer_encoder.py,sha256=NNYLr5I9tdeh0C8Ir7QcbEMU9gDk6U7CiF3Tbg6NEsE,3372
|
6
|
-
deeplotx/nn/__init__.py,sha256=
|
6
|
+
deeplotx/nn/__init__.py,sha256=YILwbxb-NHdiJjfOwBKH8F7PuZSDZSrGpTznPDucTro,710
|
7
7
|
deeplotx/nn/attention.py,sha256=R-i-Rd7gnsh6hwXDeYfqLQOJvfSZIGfQbFzRlC91XLo,2879
|
8
|
-
deeplotx/nn/auto_regression.py,sha256=
|
8
|
+
deeplotx/nn/auto_regression.py,sha256=j_R7WGPq9REngjpLuX5c0AaNqOpgGm2Vfrolw-XjWXw,877
|
9
9
|
deeplotx/nn/base_neural_network.py,sha256=FjQEDFH810fJS7JV3aLgJZnaMqC6DH--wlBvuj-ghTc,5900
|
10
10
|
deeplotx/nn/feed_forward.py,sha256=4ozj7EDalO9pb6JUhZtsJqE0r8bIHFApHRt2zTrl4ho,2931
|
11
|
-
deeplotx/nn/linear_regression.py,sha256=
|
12
|
-
deeplotx/nn/logistic_regression.py,sha256=
|
11
|
+
deeplotx/nn/linear_regression.py,sha256=EotBCCam7FH5iaAv0ma4TfYId2YfhBnrQlMirF0xoq4,1400
|
12
|
+
deeplotx/nn/logistic_regression.py,sha256=6vlXuP5el6EdXEhUbpVTKstcf-pikD50Xezw66l-aUc,978
|
13
13
|
deeplotx/nn/long_context_auto_regression.py,sha256=uy0k_g8wEfMH5nd5HCfrHA8dgEsuWBA2x8U-g3h4vQc,1054
|
14
|
-
deeplotx/nn/long_context_recursive_sequential.py,sha256=
|
14
|
+
deeplotx/nn/long_context_recursive_sequential.py,sha256=pcZfnrIHBqbp2BssfUTS1klpuykZwowikfAIaOnvRUI,2674
|
15
15
|
deeplotx/nn/multi_head_attention.py,sha256=3z73uGbvy3jszRy1B9nxGOJjlttHpcpRF8Qd09OEams,2267
|
16
|
-
deeplotx/nn/
|
16
|
+
deeplotx/nn/multi_head_feed_forward.py,sha256=hD9ScrVJZ9kNksoFASf0xaPgEnNgCeRivW-XjYOPjj8,1908
|
17
|
+
deeplotx/nn/recursive_sequential.py,sha256=crD3rEUPPjwu-uSJSiX9kqaM8OPI8SYspbDPlZb2J2Y,2900
|
17
18
|
deeplotx/nn/roformer_encoder.py,sha256=UJjKniNdMd0rfoYQcsX6bPo6Ceq_Z6EhwHe2kgqWC_k,2426
|
18
19
|
deeplotx/nn/rope.py,sha256=RTOjnllubktdy2rzFWxBfkuLuGjhEMyDd06uojdqPhM,1848
|
19
|
-
deeplotx/nn/softmax_regression.py,sha256=
|
20
|
+
deeplotx/nn/softmax_regression.py,sha256=1brNbnj8qI0VfycZmZQlfn52myKZZe8BF_ziq1JQfPY,999
|
20
21
|
deeplotx/similarity/__init__.py,sha256=s3u-KSgxjnMcWpIItKgXNltFMPQ7YY3CqsqHI-5F1c8,724
|
21
22
|
deeplotx/similarity/distribution.py,sha256=wQGouuuW531pZeBRKBujXsdsoz4fDnPw7_GW81jwepc,1066
|
22
23
|
deeplotx/similarity/set.py,sha256=zhGFxtSIXlWqvipBYzoiPahp4g0boAIoUiMfG0wl07A,686
|
23
24
|
deeplotx/similarity/vector.py,sha256=WVbDHqykt-fvuILVrhUCtIFAOEjY_zvttrXGM9eylG0,1125
|
24
25
|
deeplotx/trainer/__init__.py,sha256=Fl5DR9UecQc5VtBcczU9sx_HtPNoFohpuELOh-Jrsks,77
|
25
26
|
deeplotx/trainer/base_trainer.py,sha256=z0MeAT-rRYmjeBXt0ckt7J1itYArR0Cx02wHesXUoZE,385
|
26
|
-
deeplotx/trainer/text_binary_classification_trainer.py,sha256=
|
27
|
+
deeplotx/trainer/text_binary_classification_trainer.py,sha256=TFxOX8rWU_zKliI9zm7F5ZH7snR2d-sk95s3pfTmm78,6601
|
27
28
|
deeplotx/util/__init__.py,sha256=5CH4MTeSgsmCe3LPMfvKoSBpwh6jDSBuHVElJvzQzgs,90
|
28
29
|
deeplotx/util/hash.py,sha256=qbNU3RLBWGQYFVte9WZBAkZ1BkdjCXiKLDaKPN54KFk,662
|
29
30
|
deeplotx/util/read_file.py,sha256=ptzouvEQeeW8KU5BrWNJlXw-vFXVrpS9SkAUxsu6A8A,612
|
30
|
-
deeplotx-0.8.
|
31
|
-
deeplotx-0.8.
|
32
|
-
deeplotx-0.8.
|
33
|
-
deeplotx-0.8.
|
34
|
-
deeplotx-0.8.
|
31
|
+
deeplotx-0.8.5.dist-info/licenses/LICENSE,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
|
32
|
+
deeplotx-0.8.5.dist-info/METADATA,sha256=aM49grLNXqwEDdA4PwOEgiBKH1uCPjFuu7OCf5-_5aU,13138
|
33
|
+
deeplotx-0.8.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
34
|
+
deeplotx-0.8.5.dist-info/top_level.txt,sha256=hKg4pVDXZ-WWxkRfJFczRIll1Sv7VyfKCmzHLXbuh1U,9
|
35
|
+
deeplotx-0.8.5.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|