මෝටර්රථ ප්රතිගාමී දුම්රිය ට්රාන්ස්ෆෝමර්

මෙයස්වයංක්රීය ප්රතිගාමී සඳහා සරල ට්රාන්ස්ෆෝමර් ආකෘතියක් පුහුණු කරයි.

12import torch
13from labml import experiment
14from labml.configs import option
15from labml.utils.pytorch import get_modules
16from labml_helpers.module import Module
17
18from labml_nn.experiments.nlp_autoregression import NLPAutoRegressionConfigs
19from labml_nn.transformers import Encoder, Generator, TransformerConfigs
20from labml_nn.transformers.utils import subsequent_mask

ස්වයංක්රීයප්රතිගාමී ආකෘතිය

23class AutoregressiveModel(Module):
28    def __init__(self, src_embed: Module, encoder: Encoder, generator: Generator, *,
29                 is_save_ff_input: bool = False):
30        super().__init__()

ටෝකන්කාවැද්දීම මොඩියුලය

32        self.src_embed = src_embed

ට්රාන්ස්ෆෝමර්පදනම් කරගත් එන්කෝඩරය

34        self.encoder = encoder

එන්කෝඩරයේඅවසාන ස්ථරය ආදානය පෝෂක ඉදිරි ස්ථරයට සුරැකිය යුතුද යන්න. මෙය සිදු වේ , සන්දර්භය කාවැද්දීම.

38        self.encoder.layers[-1].is_save_ff_input = is_save_ff_input

ඊළඟටෝකන් උත්පාදන ස්තරය; මෙය ඊළඟ ටෝකනයේ පිවිසුම් ලබා දෙයි

41        self.generator = generator

මෙයපළමු ඇමතුමෙන් ආරම්භ කෙරේ

43        self.src_mask = None

ගැලවීමලබා ගන්න

45    @property
46    def ff_input(self) -> torch.Tensor:
50        return self.encoder.layers[-1].ff_input
52    def forward(self, src: torch.Tensor):

ට්රාන්ස්ෆෝමරයඅතීත ටෝකන කෙරෙහි පමණක් අවධානය යොමු කළ හැකි වන පරිදි පසුකාලීන වෙස්මුහුණක් සාදන්න.

54        if self.src_mask is None or self.src_mask.size(0) != len(src):
55            self.src_mask = subsequent_mask(len(src)).to(src.device)

ටෝකනකාවැද්දීම (src ) සහ ට්රාන්ස්ෆෝමරය හරහා එය ක්රියාත්මක කරන්න

57        res = self.encoder(self.src_embed(src), self.src_mask)

ඊළඟටෝකනයේ පිවිසුම් ජනනය කරන්න

59        return self.generator(res), None

වින්යාසකිරීම්

අපිඅත්හදා බැලීම ආරම්භ කරන විට පෙරනිමි වින්යාස කළ හැකි අතර එය අධික ලෙස ධාවනය වනු ඇත

62class Configs(NLPAutoRegressionConfigs):
69    transformer: TransformerConfigs
70    model: AutoregressiveModel
71
72    is_save_ff_input = False

ස්වයංක්රීයප්රතිගාමී ආකෘතිය ආරම්භ කරන්න

75@option(Configs.model)
76def autoregressive_model(c: Configs):
80    m = AutoregressiveModel(

වින්යාසගතකළ හැකි ට්රාන්ස්ෆෝමරයෙන් ප්රභව ටෝකන් කාවැද්දීමේ ස්ථරය, එන්කෝඩරය සහ අවසාන ටෝකන් උත්පාදක යන්ත්රය ලබා ගන්න

83        src_embed=c.transformer.src_embed,
84        encoder=c.transformer.encoder,
85        generator=c.transformer.generator,

සුරැකීමටයන්න

87        is_save_ff_input=c.is_save_ff_input)
88    return m.to(c.device)

අපගේස්වයංක්රීය ප්රතිගාමී ආකෘතිය සඳහා වින්යාසගත කළ හැකි ට්රාන්ස්ෆෝමර් එන්කෝඩරය ආරම්භ කරන්න

91@option(Configs.transformer)
92def transformer_c(c: Configs):
96    tc = TransformerConfigs()
97    tc.n_src_vocab = c.n_tokens
98    tc.n_tgt_vocab = c.n_tokens
99
100    return tc
103def main():

අත්හදාබැලීම සාදන්න

105    experiment.create(name="knn_lm")

වින්යාසසාදන්න

107    conf = Configs()

වින්යාසයන්පූරණය කරන්න

109    experiment.configs(conf,

අභිබවායාම සඳහා වින්යාසයන් පිළිබඳ ශබ්දකෝෂයක්

111                       {'tokenizer': 'character',
112                        'prompt_separator': '',
113                        'prompt': 'It is ',
114                        'text': 'tiny_shakespeare',
115
116                        'optimizer.optimizer': 'Noam',
117                        'optimizer.learning_rate': 1.,
118                        'optimizer.d_model': 256,
119
120                        'seq_len': 1024,
121                        'epochs': 128,
122                        'batch_size': 6,
123                        'inner_iterations': 10,

ට්රාන්ස්ෆෝමර්වින්යාසයන්

126                        'transformer.d_model': 256,
127                        'transformer.ffn.d_ff': 1024,
128                        'transformer.n_heads': 8,
129                        'transformer.n_layers': 6})

ආකෘතිආරම්භ කිරීම සඳහා මෙය අවශ්ය වේ

132    conf.n_tokens = conf.text.n_tokens

ඉතිරිකිරීම සහ පැටවීම සඳහා ආකෘති සකසන්න

135    experiment.add_pytorch_models(get_modules(conf))

අත්හදාබැලීම ආරම්භ කරන්න

138    with experiment.start():

TrainValidConfigs.run

140        conf.run()
141
142
143if __name__ == '__main__':
144    main()