ljw20180420
commited on
Upload folder using huggingface_hub
Browse files
indel_model/README.md
ADDED
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
library_name: transformers
|
3 |
+
tags:
|
4 |
+
- generated_from_trainer
|
5 |
+
datasets:
|
6 |
+
- crispr_data
|
7 |
+
model-index:
|
8 |
+
- name: SX_spcas9_Lindel_indel
|
9 |
+
results: []
|
10 |
+
---
|
11 |
+
|
12 |
+
<!-- This model card has been generated automatically according to the information the Trainer had access to. You
|
13 |
+
should probably proofread and complete it, then remove this comment. -->
|
14 |
+
|
15 |
+
# SX_spcas9_Lindel_indel
|
16 |
+
|
17 |
+
This model is a fine-tuned version of [](https://huggingface.co/) on the crispr_data dataset.
|
18 |
+
It achieves the following results on the evaluation set:
|
19 |
+
- Loss: 47.0798
|
20 |
+
|
21 |
+
## Model description
|
22 |
+
|
23 |
+
More information needed
|
24 |
+
|
25 |
+
## Intended uses & limitations
|
26 |
+
|
27 |
+
More information needed
|
28 |
+
|
29 |
+
## Training and evaluation data
|
30 |
+
|
31 |
+
More information needed
|
32 |
+
|
33 |
+
## Training procedure
|
34 |
+
|
35 |
+
### Training hyperparameters
|
36 |
+
|
37 |
+
The following hyperparameters were used during training:
|
38 |
+
- learning_rate: 0.001
|
39 |
+
- train_batch_size: 100
|
40 |
+
- eval_batch_size: 100
|
41 |
+
- seed: 63036
|
42 |
+
- optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08
|
43 |
+
- lr_scheduler_type: linear
|
44 |
+
- lr_scheduler_warmup_ratio: 0.05
|
45 |
+
- num_epochs: 30.0
|
46 |
+
|
47 |
+
### Training results
|
48 |
+
|
49 |
+
| Training Loss | Epoch | Step | Validation Loss |
|
50 |
+
|:-------------:|:-----:|:----:|:---------------:|
|
51 |
+
| 1022.9014 | 1.0 | 322 | 880.6261 |
|
52 |
+
| 710.5549 | 2.0 | 644 | 540.0052 |
|
53 |
+
| 420.3118 | 3.0 | 966 | 316.6205 |
|
54 |
+
| 244.2501 | 4.0 | 1288 | 185.2687 |
|
55 |
+
| 144.4954 | 5.0 | 1610 | 113.2889 |
|
56 |
+
| 92.2284 | 6.0 | 1932 | 77.3025 |
|
57 |
+
| 66.9501 | 7.0 | 2254 | 60.5766 |
|
58 |
+
| 55.4648 | 8.0 | 2576 | 53.1402 |
|
59 |
+
| 50.3219 | 9.0 | 2898 | 49.8257 |
|
60 |
+
| 48.0616 | 10.0 | 3220 | 48.4087 |
|
61 |
+
| 47.0631 | 11.0 | 3542 | 47.6446 |
|
62 |
+
| 46.6081 | 12.0 | 3864 | 47.4013 |
|
63 |
+
| 46.3857 | 13.0 | 4186 | 47.2288 |
|
64 |
+
| 46.2889 | 14.0 | 4508 | 47.1596 |
|
65 |
+
| 46.2447 | 15.0 | 4830 | 47.0971 |
|
66 |
+
| 46.2195 | 16.0 | 5152 | 47.1162 |
|
67 |
+
| 46.2015 | 17.0 | 5474 | 47.1085 |
|
68 |
+
| 46.1924 | 18.0 | 5796 | 47.0946 |
|
69 |
+
| 46.1853 | 19.0 | 6118 | 47.1015 |
|
70 |
+
| 46.1784 | 20.0 | 6440 | 47.0497 |
|
71 |
+
| 46.1757 | 21.0 | 6762 | 47.0853 |
|
72 |
+
| 46.1676 | 22.0 | 7084 | 47.0706 |
|
73 |
+
| 46.1614 | 23.0 | 7406 | 47.1253 |
|
74 |
+
| 46.155 | 24.0 | 7728 | 47.0727 |
|
75 |
+
| 46.1499 | 25.0 | 8050 | 47.0992 |
|
76 |
+
| 46.1442 | 26.0 | 8372 | 47.0982 |
|
77 |
+
| 46.1369 | 27.0 | 8694 | 47.0905 |
|
78 |
+
| 46.1309 | 28.0 | 9016 | 47.0622 |
|
79 |
+
| 46.1231 | 29.0 | 9338 | 47.0786 |
|
80 |
+
| 46.117 | 30.0 | 9660 | 47.0798 |
|
81 |
+
|
82 |
+
|
83 |
+
### Framework versions
|
84 |
+
|
85 |
+
- Transformers 4.44.2
|
86 |
+
- Pytorch 2.4.0+cu124
|
87 |
+
- Datasets 2.21.0
|
88 |
+
- Tokenizers 0.19.1
|
indel_model/config.json
CHANGED
@@ -1,5 +1,4 @@
|
|
1 |
{
|
2 |
-
"_name_or_path": "/home/ljw/sdc1/CRISPR_results/Lindel/SX_spcas9_Lindel_indel",
|
3 |
"architectures": [
|
4 |
"LindelModel"
|
5 |
],
|
|
|
1 |
{
|
|
|
2 |
"architectures": [
|
3 |
"LindelModel"
|
4 |
],
|
indel_model/model.py
ADDED
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from transformers import PretrainedConfig, PreTrainedModel
|
2 |
+
import torch.nn as nn
|
3 |
+
import torch
|
4 |
+
import torch.nn.functional as F
|
5 |
+
|
6 |
+
class LindelConfig(PretrainedConfig):
|
7 |
+
model_type = "Lindel"
|
8 |
+
label_names = ["count"]
|
9 |
+
|
10 |
+
def __init__(
|
11 |
+
self,
|
12 |
+
dlen = 30, # the upper limit of deletion length (strictly less than dlen)
|
13 |
+
mh_len = 4, # the upper limit of micro-homology length
|
14 |
+
model = "indel", # the actual model, should be "indel", "del", or "ins"
|
15 |
+
reg_mode = "l2", # regularization method, should be "l2" or "l1"
|
16 |
+
reg_const = 0.01, # regularization coefficient
|
17 |
+
seed = 63036, # random seed for intialization
|
18 |
+
**kwargs,
|
19 |
+
):
|
20 |
+
self.dlen = dlen
|
21 |
+
self.mh_len = mh_len
|
22 |
+
self.model = model
|
23 |
+
self.reg_mode = reg_mode
|
24 |
+
self.reg_const = reg_const
|
25 |
+
self.seed = seed
|
26 |
+
super().__init__(**kwargs)
|
27 |
+
|
28 |
+
class LindelModel(PreTrainedModel):
|
29 |
+
config_class = LindelConfig
|
30 |
+
|
31 |
+
def __init__(self, config) -> None:
|
32 |
+
super().__init__(config)
|
33 |
+
# In more recent versions of PyTorch, you no longer need to explicitly register_parameter, it's enough to set a member of your nn.Module with nn.Parameter to "notify" pytorch that this variable should be treated as a trainable parameter (https://stackoverflow.com/questions/59234238/how-to-add-parameters-in-module-class-in-pytorch-custom-model).
|
34 |
+
self.generator = torch.Generator().manual_seed(config.seed)
|
35 |
+
self.reg_mode = config.reg_mode
|
36 |
+
self.reg_const = config.reg_const
|
37 |
+
if config.model == "indel":
|
38 |
+
# onehotencoder(ref[cut-17:cut+3])
|
39 |
+
feature_dim = 20 * 4 + 19 * 16
|
40 |
+
class_dim = 2
|
41 |
+
elif config.model == "ins":
|
42 |
+
# onehotencoder(ref[cut-3:cut+3])
|
43 |
+
feature_dim = 6 * 4 + 5 * 16
|
44 |
+
class_dim = 21
|
45 |
+
elif config.model == "del":
|
46 |
+
class_dim = (4 + 1 + 4 + config.dlen - 1) * (config.dlen - 1) // 2
|
47 |
+
# concatenate get_feature and onehotencoder(ref[cut-17:cut+3])
|
48 |
+
feature_dim = class_dim * (config.mh_len + 1) + 20 * 4 + 19 * 16
|
49 |
+
self.linear = nn.Linear(in_features=feature_dim, out_features=class_dim)
|
50 |
+
self.initialize_weights()
|
51 |
+
|
52 |
+
def initialize_weights(self):
|
53 |
+
for m in self.modules():
|
54 |
+
if isinstance(m, nn.Linear):
|
55 |
+
nn.init.normal_(m.weight, mean=0, std=1, generator=self.generator)
|
56 |
+
if m.bias is not None:
|
57 |
+
nn.init.constant_(m.bias, 0)
|
58 |
+
|
59 |
+
def forward(self, input, count=None) -> torch.Tensor:
|
60 |
+
logit = self.linear(input)
|
61 |
+
if count is not None:
|
62 |
+
return {
|
63 |
+
"logit": logit,
|
64 |
+
"loss": self.cross_entropy_reg(logit, count)
|
65 |
+
}
|
66 |
+
return {"logit": logit}
|
67 |
+
|
68 |
+
def cross_entropy_reg(self, logit, count):
|
69 |
+
if self.reg_mode == "l2":
|
70 |
+
reg_term = (self.linear.weight ** 2).sum()
|
71 |
+
elif self.reg_mode == "l1":
|
72 |
+
reg_term = abs(self.linear.weight).sum()
|
73 |
+
return -(F.log_softmax(logit, dim=1) * F.normalize(count.to(torch.float32), p=1.0, dim=1)).sum() + logit.shape[0] * self.reg_const * reg_term
|
indel_model/runs/Oct28_11-56-11_ljw-System-Product-Name/events.out.tfevents.1730087772.ljw-System-Product-Name.78325.0
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:cce6bf7593c89b8019d0a4db0ff9ecb169fc9fd13b63e1bd01359dd095293d20
|
3 |
+
size 19407
|
indel_model/training_args.bin
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:5bd99de9d33243b395d23a54763b3dea4ad04cb4c5dcd76a64c123da53be6ba8
|
3 |
+
size 5304
|