මෙන්නඅපි Feed-Forward ජාලයේ Fuzzy Tiling Activation භාවිතා කරන ට්රාන්ස්ෆෝමරයක් පුහුණු කරමු. අපි එය භාෂා ආකෘතියක් සඳහා භාවිතා කරන අතර නිරූපණය සඳහා කුඩා ෂේක්ස්පියර් දත්ත කට්ටලය මත එය පුහුණු කරමු.
කෙසේවෙතත්, මෙය බොහෝ විට FTA සඳහා සුදුසුම කාර්යය නොවන අතර අඛණ්ඩ විචල්යයන් සහිත දත්ත ආකෘතිකරණය සඳහා FTA වඩාත් සුදුසු යැයි අපි විශ්වාස කරමු.
22import copy
23
24import torch
25import torch.nn as nn
26
27from labml import experiment
28from labml.configs import option
29from labml_helpers.module import Module
30from labml_nn.activations.fta import FTA
31from labml_nn.experiments.nlp_autoregression import NLPAutoRegressionConfigs
32from labml_nn.transformers import MultiHeadAttention, TransformerLayer
33from labml_nn.transformers.utils import subsequent_mask36class FeedForwardFTA(nn.Module):d_model
යනු ටෝකන කාවැද්දීම තුළ ඇති විශේෂාංග ගණන d_ff
යනු FFN හි සැඟවුණු ස්ථරයේ ඇති ලක්ෂණ ගණන activation
FTA සක්රිය කිරීමේ මොඩියුලය dropout
සැඟවුණු ස්තරය සඳහා අතහැර දැමීමේ සම්භාවිතාව41 def __init__(self, d_model: int, d_ff: int,
42 activation: FTA,
43 dropout: float = 0.1):50 super().__init__()බර හා නැඹුරුව අනුව පරාමිතිකරණය කරන ලද එක් ස්ථරය
52 self.layer1 = nn.Linear(d_model, d_ff)බර හා නැඹුරුව අනුව පරාමිතිකරණය කරන ලද ස්ථර දෙකක්
54 self.layer2 = nn.Linear(d_ff * activation.expansion_factor, d_model)සැඟවුණුස්ථර හැලීම
56 self.dropout = nn.Dropout(dropout)සක්රියකිරීමේ කාර්යය
58 self.activation = activation60 def forward(self, x: torch.Tensor):62 x = self.activation(self.layer1(x))අතහැරදැමීම යොදන්න
64 x = self.dropout(x)66 return self.layer2(x)මෙය(නොපැහැදිලි ටයිලිං ඇක්ටිවේෂන්) (index.html) සමඟ ෆීඩ්-ෆෝවර්ඩ් නෙට්වර්ක් භාවිතා කරන ස්වයංක්රීය ප්රතිගාමී ට්රාන්ස්ෆෝමර් ආකෘතියකි.
69class AutoregressiveTransformer(Module):n_tokens
යනු වචන මාලාවේ ටෝකන ගණන d_model
කාවැද්දීම ප්රමාණය වේ n_layers
ට්රාන්ස්ෆෝමර් ස්ථර ගණන layer
ස්තරය වේ. අපි ට්රාන්ස්ෆෝමර් සඳහා මෙහි n_layers
පිටපත් භාවිතා කරමු. 77 def __init__(self, n_tokens: int, d_model: int, n_layers: int, layer: TransformerLayer):84 super().__init__()n_layers
ස්ථර සහිත ට්රාන්ස්ෆෝමර්
86 self.transformer_layers = nn.ModuleList([copy.deepcopy(layer) for _ in range(n_layers)])ටෝකන්කාවැද්දීම ස්ථරය
89 self.emb = nn.Embedding(n_tokens, d_model)කියවීමේස්ථරය
91 self.readout = nn.Linear(d_model, n_tokens)පළමුඇමතුමෙන් වෙස්මුහුණ ආරම්භ කරනු ඇත
94 self.mask = Nonex
හැඩයේ ආදාන ටෝකන වේ [seq_len, batch_size]
96 def forward(self, x: torch.Tensor):ස්වයංක්රීයප්රතිගාමී වෙස් මුහුණක් සාදන්න
101 if self.mask is None or self.mask.size(0) != len(x):පසුකාලීනවෙස්මුහුණ, අනාගත ටෝකන දැකීමෙන් ටෝකන වසං කරනු ඇත
103 self.mask = subsequent_mask(len(x)).to(x.device)ටෝකන්කාවැද්දීම් ලබා ගන්න
106 x = self.emb(x)ට්රාන්ස්ෆෝමර්එන්කෝඩරය
108 for layer in self.transformer_layers:
109 x = layer(x=x, mask=self.mask)පිවිසුම්ලබා ගන්න
111 x = self.readout(x)ආපසුප්රතිඵල
114 return x, None117class Configs(NLPAutoRegressionConfigs):ආකෘතිය
126 model: AutoregressiveTransformerස්ථරගණන
129 n_layers: int = 4සහ ගැඹුරු සම්මතය සඳහා
132 deep_norm_alpha: float
133 deep_norm_beta: floatඅවධානයයොමු කරන හිස් ගණන
136 n_heads: int = 4කාවැද්දීමප්රමාණය
138 d_model: int = 256එක්එක් අවධානය හිස ප්රමාණය
140 d_k: int = 16ඉදිරිස්ථරයේ ප්රමාණය පෝෂණය කරන්න
142 d_ff: int = 256FTA
145 fta_lower_limit: float = -1.
146 fta_upper_limit: float = +1.
147 fta_delta: float = 0.2
148 fta_eta: float = 0.05151@option(Configs.model)
152def _model(c: Configs):FTAසක්රිය කිරීමේ මොඩියුලය සාදන්න
158 fta = FTA(c.fta_lower_limit, c.fta_upper_limit, c.fta_delta, c.fta_eta)ට්රාන්ස්ෆෝමරයසාදන්න. අපි නැවත භාවිතා කිරීම TransformerLayer
MultiHeadAttention
සහ ක්රියාත්මක කිරීම.
162 m = AutoregressiveTransformer(c.n_tokens, c.d_model, c.n_layers,
163 TransformerLayer(d_model=c.d_model,
164 feed_forward=FeedForwardFTA(d_model=c.d_model,
165 d_ff=c.d_ff,
166 activation=fta,
167 dropout=0.1),
168 self_attn=MultiHeadAttention(c.n_heads, c.d_model,
169 dropout_prob=0.0),
170 dropout_prob=0.0))උපාංගයවෙත ගෙන යන්න
173 return m.to(c.device)176def main():අත්හදාබැලීම සාදන්න
181 experiment.create(name="fta", writers={'screen', 'comet', 'labml'})වින්යාසසාදන්න
183 conf = Configs()වින්යාසයන්අභිබවා යන්න
185 experiment.configs(conf, {අක්ෂරමට්ටමේ ටෝකනයිසර් භාවිතා කරන්න
187 'tokenizer': 'character',කඩිනම්බෙදුම්කරු හිස් ය
189 'prompt_separator': '',නියැදීමසඳහා විමසුමක් ආරම්භ කිරීම
191 'prompt': 'It is ',කුඩාෂේක්ස්පියර් දත්ත කට්ටලය භාවිතා කරන්න
193 'text': 'tiny_shakespeare',කසන්දර්භය ප්රමාණය භාවිතා
196 'seq_len': 256,32වයස අවුරුදු සඳහා දුම්රිය
198 'epochs': 32,කණ්ඩායම්ප්රමාණය
200 'batch_size': 16,එක් යුගයකට වරක් පුහුණුව සහ වලංගු කිරීම අතර මාරු වන්න
202 'inner_iterations': 10,උනුසුම්වීමක් නොමැති ආදම් ප්රශස්තකරණය
205 'optimizer.optimizer': 'Adam',
206 'optimizer.learning_rate': 3e-4,
207 })ඉතිරිකිරීම සහ පැටවීම සඳහා ආකෘතිය (ය) සකසන්න
210 experiment.add_pytorch_models({'model': conf.model})අත්හදාබැලීම ආරම්භ කරන්න
213 with experiment.start():පුහුණුධාවනය
215 conf.run()219if __name__ == '__main__':
220 main()