theodoredc commited on
Commit
ea381fb
·
verified ·
1 Parent(s): 70d62d1

Create modeling_chord_transformer.py

Browse files
Files changed (1) hide show
  1. modeling_chord_transformer.py +55 -0
modeling_chord_transformer.py ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import torch.nn as nn
3
+ from transformers import PreTrainedModel, PretrainedConfig
4
+
5
+
6
+ class ChordTransformerConfig(PretrainedConfig):
7
+ model_type = "chord-transformer"
8
+
9
+ def __init__(
10
+ self,
11
+ input_dim=12,
12
+ d_model=128,
13
+ nhead=8,
14
+ num_layers=4,
15
+ dim_feedforward=256,
16
+ dropout=0.1,
17
+ **kwargs
18
+ ):
19
+ super().__init__(**kwargs)
20
+ self.input_dim = input_dim
21
+ self.d_model = d_model
22
+ self.nhead = nhead
23
+ self.num_layers = num_layers
24
+ self.dim_feedforward = dim_feedforward
25
+ self.dropout = dropout
26
+
27
+
28
+ class ChordTransformerModel(PreTrainedModel):
29
+ config_class = ChordTransformerConfig
30
+
31
+ def __init__(self, config):
32
+ super().__init__(config)
33
+
34
+ self.input_proj = nn.Linear(config.input_dim, config.d_model)
35
+ self.pos_embedding = nn.Parameter(torch.randn(1, 3000, config.d_model))
36
+
37
+ encoder_layer = nn.TransformerEncoderLayer(
38
+ d_model=config.d_model,
39
+ nhead=config.nhead,
40
+ dim_feedforward=config.dim_feedforward,
41
+ dropout=config.dropout,
42
+ batch_first=True
43
+ )
44
+ self.encoder = nn.TransformerEncoder(encoder_layer, num_layers=config.num_layers)
45
+ self.output_proj = nn.Linear(config.d_model, config.input_dim)
46
+
47
+ self.post_init()
48
+
49
+ def forward(self, x, mask=None):
50
+ batch_size, seq_len, _ = x.size()
51
+ x_proj = self.input_proj(x)
52
+ pos_emb = self.pos_embedding[:, :seq_len, :]
53
+ x_proj = x_proj + pos_emb
54
+ output = self.encoder(x_proj, src_key_padding_mask=mask)
55
+ return self.output_proj(output)