ගැඹුරු සම්මතය අත්හදා බැලීම

Open In Colab

13import copy
14
15import torch
16import torch.nn as nn
17
18from labml import experiment
19from labml.configs import option
20from labml_helpers.module import Module
21from labml_nn.experiments.nlp_autoregression import NLPAutoRegressionConfigs
22from labml_nn.normalization.deep_norm import DeepNormTransformerLayer
23from labml_nn.transformers import MultiHeadAttention
24from labml_nn.transformers.feed_forward import FeedForward

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

මෙයDeepNorm භාවිතා කරන ස්වයංක්රීය ප්රතිගාමී ට්රාන්ස්ෆෝමර් ආකෘතියකි.

27class AutoregressiveTransformer(Module):
  • n_tokens යනු වචන මාලාවේ ටෝකන ගණන
  • d_model කාවැද්දීම ප්රමාණය වේ
  • n_layers ට්රාන්ස්ෆෝමර් ස්ථර ගණන
  • layer ස්තරය වේ. අපි ට්රාන්ෙපෝමර් සඳහා මෙහි n_layers පිටපත් භාවිතා කරමු.
34    def __init__(self, n_tokens: int, d_model: int, n_layers: int, layer: DeepNormTransformerLayer):
41        super().__init__()

n_layers ස්ථර සහිත ට්රාන්ස්ෆෝමර්

43        self.transformer = nn.Sequential(*[copy.deepcopy(layer) for _ in range(n_layers)])

ටෝකන්කාවැද්දීම ස්ථරය

46        self.emb = nn.Embedding(n_tokens, d_model)

කියවීමේස්ථරය

48        self.readout = nn.Linear(d_model, n_tokens)
  • x හැඩයේ ආදාන ටෝකන වේ [seq_len, batch_size]
50    def forward(self, x: torch.Tensor):

ටෝකන්කාවැද්දීම් ලබා ගන්න

55        x = self.emb(x)

ට්රාන්ස්ෆෝමර්එන්කෝඩරය

57        x = self.transformer(x)

පිවිසුම්ලබා ගන්න

59        x = self.readout(x)

ආපසුප්රතිඵල

62        return x, None

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

මෙයඋරුම වන්නේ NLPAutoRegressionConfigs

65class Configs(NLPAutoRegressionConfigs):

ආකෘතිය

74    model: AutoregressiveTransformer

ස්ථරගණන

77    n_layers: int = 32

සහ ගැඹුරු සම්මතය සඳහා

80    deep_norm_alpha: float
81    deep_norm_beta: float

අවධානයයොමු කරන හිස් ගණන

84    n_heads: int = 4

කාවැද්දීමප්රමාණය

86    d_model: int = 64

එක්එක් අවධානය හිස ප්රමාණය

88    d_k: int = 16

ගණනයකරන්න

91@option(Configs.deep_norm_alpha)
92def _deep_norm_alpha(c: Configs):
98    return (2. * c.n_layers) ** (1. / 4.)

ගණනයකරන්න

101@option(Configs.deep_norm_beta)
102def _deep_norm_beta(c: Configs):
108    return (8. * c.n_layers) ** -(1. / 4.)

ආකෘතියආරම්භ කරන්න

111@option(Configs.model)
112def _model(c: Configs):
116    m = AutoregressiveTransformer(c.n_tokens, c.d_model, c.n_layers,
117                                  DeepNormTransformerLayer(d_model=c.d_model,
118                                                           deep_norm_alpha=c.deep_norm_alpha,
119                                                           deep_norm_beta=c.deep_norm_beta,
120                                                           feed_forward=FeedForward(d_model=c.d_model,
121                                                                                    d_ff=c.d_model * 4),
122                                                           self_attn=MultiHeadAttention(c.n_heads, c.d_model,
123                                                                                        dropout_prob=0.0)))
124
125    return m.to(c.device)

අත්හදාබැලීම නිර්මාණය කර ක්රියාත්මක කරන්න

128def main():

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

133    experiment.create(name="deep_norm", writers={'screen', 'web_api'})

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

135    conf = Configs()

වින්යාසයන්අභිබවා යන්න

137    experiment.configs(conf, {

අක්ෂරමට්ටමේ ටෝකනයිසර් භාවිතා කරන්න

139        'tokenizer': 'character',

කඩිනම්බෙදුම්කරු හිස් ය

141        'prompt_separator': '',

නියැදීමසඳහා විමසුමක් ආරම්භ කිරීම

143        'prompt': 'It is ',

කුඩාෂේක්ස්පියර් දත්ත කට්ටලය භාවිතා කරන්න

145        'text': 'tiny_shakespeare',

කසන්දර්භය ප්රමාණය භාවිතා

148        'seq_len': 256,

32වයස අවුරුදු සඳහා දුම්රිය

150        'epochs': 32,

කණ්ඩායම්ප්රමාණය

152        'batch_size': 16,

එක් යුගයකට වරක් පුහුණුව සහ වලංගු කිරීම අතර මාරු වන්න

154        'inner_iterations': 10,

ස්ථරගණන

157        'n_layers': 50,

උනුසුම්වීමක් නොමැති ආදම් ප්රශස්තකරණය

161        'optimizer.optimizer': 'Adam',
162        'optimizer.learning_rate': 1.25e-4,
163    })

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

166    experiment.add_pytorch_models({'model': conf.model})

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

169    with experiment.start():

පුහුණුධාවනය

171        conf.run()

175if __name__ == '__main__':
176    main()