16import math
17from typing import List
18
19import torch
20from torch import nn
21
22from labml import experiment
23from labml.configs import option
24from labml_helpers.module import Module
25from labml_nn.experiments.nlp_autoregression import NLPAutoRegressionConfigs
26from labml_nn.transformers.hour_glass import HourGlass
27from labml_nn.transformers.positional_encoding import PositionalEncoding

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

30class AutoregressiveTransformer(Module):
  • n_tokens යනු වචන මාලාවේ ප්රමාණයයි
  • d_model ටෝකන් කාවැද්දීම් වල ප්රමාණයයි
  • dropout අතහැර දැමීමේ සම්භාවිතාව
  • hour_glass පැය ග්ලාස් ආකෘතියයි
35    def __init__(self, n_tokens: int, d_model: int, dropout: float, hour_glass: HourGlass):
42        super().__init__()

ටෝකන්කාවැද්දීම්

44        self.embedding = nn.Embedding(n_tokens, d_model)
50        self.pos_embedding = PositionalEncoding(d_model, dropout)
52        self.hour_glass = hour_glass

අවසානකාවැද්දීම් සාමාන්යකරණය කිරීම

54        self.norm = nn.LayerNorm([d_model])

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

56        self.d_model = d_model

පිවිසුම්අනාවැකි පළ කිරීමට අවසාන රේඛීය ස්ථරය

58        self.output = nn.Linear(d_model, n_tokens)
  • x හැඩයේ ටෝකන් දර්ශක සහිත ටෙන්සරයයි [seq_len, batch_size]
60    def __call__(self, x: torch.Tensor):

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

65        x = self.embedding(x)
68        if self.pos_embedding is not None:
69            x = self.pos_embedding(x * math.sqrt(self.d_model))

Hourglass

72        x = self.hour_glass(x)

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

75        output = self.output(self.norm(x))

පිවිසුම්ආපසු එවන්න

78        return output, None
81class Configs(NLPAutoRegressionConfigs):

ආකෘතිය

89    model: AutoregressiveTransformer

අවධානයයොමු ප්රධානීන් ගණන

91    n_heads: int = 8

අතහැරදැමීමේ සම්භාවිතාව

93    dropout: float = 0.1

පෝෂකඉදිරි සැඟවුණු ස්ථරයේ ප්රමාණය

95    d_ff: int = 512

ටෝකන්කාවැද්දීමේ ප්රමාණය

97    d_model: int = 256

කෙටිකිරීමේ සාධක

99    shortening_factors: List[int] = [8, 4]

ආකෘතියසාදන්න

102@option(Configs.model)
103def _model(c: Configs):

පැයවීදුරු ආකෘතිය සාදන්න

109    hour_glass = HourGlass(c.n_heads, c.d_model, c.dropout, c.d_ff, c.shortening_factors)

ස්වයංක්රීයප්රතිගාමී දවටනය සාදන්න

111    m = AutoregressiveTransformer(c.n_tokens, c.d_model, c.dropout, hour_glass).to(c.device)

114    return m
117def main():

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

119    experiment.create(name="hour_glass")

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

121    conf = Configs()

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

123    experiment.configs(conf, {

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

125        'tokenizer': 'character',

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

127        'prompt_separator': '',

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

129        'prompt': 'It is ',

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

131        'text': 'tiny_shakespeare',

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

134        'seq_len': 256,

Epochs සඳහා දුම්රිය

136        'epochs': 128,

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

138        'batch_size': 32,

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

141        'inner_iterations': 10,

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

144        'optimizer.optimizer': 'Noam',
145        'optimizer.learning_rate': 1.,

147    })

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

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

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

153    with experiment.start():

පුහුණුධාවනය

155        conf.run()

159if __name__ == '__main__':
160    main()