Back to Annotated Deep Learning Paper Implementations

ට්රාන්ස්ෆෝමර් එන්කෝඩර් සහ විකේතක ආකෘති

docs/si/transformers/models.html

latest11.1 KB
Original Source

hometransformers

View code on Github

#

ට්රාන්ස්ෆෝමර් එන්කෝඩර් සහ විකේතක ආකෘති

13importmath1415importtorch16importtorch.nnasnn1718fromlabml\_nn.utilsimportclone\_module\_list19from.feed\_forwardimportFeedForward20from.mhaimportMultiHeadAttention21from.positional\_encodingimportget\_positional\_encoding

#

ටෝකනකාවැද්දීම සහ ස්ථාවර ස්ථානීය කේතීකරණඑකතු කරන්න

24classEmbeddingsWithPositionalEncoding(nn.Module):

#

31def\_\_init\_\_(self,d\_model:int,n\_vocab:int,max\_len:int=5000):32super().\_\_init\_\_()33self.linear=nn.Embedding(n\_vocab,d\_model)34self.d\_model=d\_model35self.register\_buffer('positional\_encodings',get\_positional\_encoding(d\_model,max\_len))

#

37defforward(self,x:torch.Tensor):38pe=self.positional\_encodings[:x.shape[0]].requires\_grad\_(False)39returnself.linear(x)\*math.sqrt(self.d\_model)+pe

#

ටෝකනකාවැද්දීම සහ පරාමිතිකරණය කළ ස්ථානීය කේතීකරණ එකතු කරන්න

42classEmbeddingsWithLearnedPositionalEncoding(nn.Module):

#

49def\_\_init\_\_(self,d\_model:int,n\_vocab:int,max\_len:int=5000):50super().\_\_init\_\_()51self.linear=nn.Embedding(n\_vocab,d\_model)52self.d\_model=d\_model53self.positional\_encodings=nn.Parameter(torch.zeros(max\_len,1,d\_model),requires\_grad=True)

#

55defforward(self,x:torch.Tensor):56pe=self.positional\_encodings[:x.shape[0]]57returnself.linear(x)\*math.sqrt(self.d\_model)+pe

#

ට්රාන්ස්ෆෝමර්ස්ථරය

මෙයඑන්කෝඩර් තට්ටුවක් හෝ විකේතක තට්ටුවක් ලෙස ක්රියා කළ හැකිය.

🗒කඩදාසි ඇතුළු සමහර ක්රියාත්මක කිරීම්, ස්ථර-සාමාන්යකරණය සිදු කරන ස්ථානයේ වෙනස්කම් ඇති බව පෙනේ. මෙන්න අපි අවධානය සහ පෝෂක ඉදිරියට ජාල පෙර ස්ථරයක් සාමාන්යකරණය කරන්න, සහ මුල් අවශේෂ දෛශික එකතු කරන්න. විකල්පයක් වන්නේ අපද්රව්ය එකතු කිරීමෙන් පසු ස්ථර සාමාන්යකරණය කිරීමයි. නමුත් පුහුණුවීමේදී මෙය අඩු ස්ථාවර බව අපට පෙනී ගියේය. ට්රාන්ස්ෆෝමර් ගෘහ නිර්මාණ ශිල්පයේ ON Layer සාමාන්යකරණය පිළිබඳපත්රිකාවේ මේ පිළිබඳව සවිස්තරාත්මක සාකච්ඡාවක් අපට හමු විය.

60classTransformerLayer(nn.Module):

#

  • d_model ටෝකනය කාවැද්දීමේ ප්රමාණයයි
  • self_attn ස්වයං අවධානය මොඩියුලය
  • src_attn යනු ප්රභව අවධානය යොමු කිරීමේ මොඩියුලය (මෙය විකේතකයක් තුළ භාවිතා කරන විට)
  • feed_forward යනු ආහාර ඉදිරි මොඩියුලයයි
  • dropout_prob ස්වයං අවධානයෙන් පසු ඉවත් වීමේ සම්භාවිතාව සහ FFN
78def\_\_init\_\_(self,\*,79d\_model:int,80self\_attn:MultiHeadAttention,81src\_attn:MultiHeadAttention=None,82feed\_forward:FeedForward,83dropout\_prob:float):

#

91super().\_\_init\_\_()92self.size=d\_model93self.self\_attn=self\_attn94self.src\_attn=src\_attn95self.feed\_forward=feed\_forward96self.dropout=nn.Dropout(dropout\_prob)97self.norm\_self\_attn=nn.LayerNorm([d\_model])98ifself.src\_attnisnotNone:99self.norm\_src\_attn=nn.LayerNorm([d\_model])100self.norm\_ff=nn.LayerNorm([d\_model])

#

ආහාරඉදිරි ස්ථරයට ආදානය ඉතිරි කර ගත යුතුද යන්න

102self.is\_save\_ff\_input=False

#

104defforward(self,\*,105x:torch.Tensor,106mask:torch.Tensor,107src:torch.Tensor=None,108src\_mask:torch.Tensor=None):

#

ස්වයංඅවධානය යොමු කිරීමට පෙර දෛශික සාමාන්යකරණය කරන්න

110z=self.norm\_self\_attn(x)

#

ස්වයංඅවධානය හරහා ධාවනය කරන්න, i.e. යතුරු සහ වටිනාකම් ස්වයං සිට

112self\_attn=self.self\_attn(query=z,key=z,value=z,mask=mask)

#

ස්වයංඅවධානය ප්රතිඵල එකතු

114x=x+self.dropout(self\_attn)

#

ප්රභවයක්ලබා දෙන්නේ නම්, ප්රභවයට අවධානය යොමු කිරීමෙන් ප්රති results ල ලබා ගන්න. එන්කෝඩර් ප්රතිදානයන් කෙරෙහි අවධානය යොමු කරන විකේතක තට්ටුවක් ඔබට ඇති විට මෙය

වේ

119ifsrcisnotNone:

#

දෛශිකසාමාන්යකරණය කරන්න

121z=self.norm\_src\_attn(x)

#

ප්රභවයටඅවධානය යොමු කරන්න. එනම් යතුරු සහ අගයන් ප්රභවයෙන් වේ

123attn\_src=self.src\_attn(query=z,key=src,value=src,mask=src\_mask)

#

මූලාශ්රඅවධානය යොමු ප්රතිඵල එක් කරන්න

125x=x+self.dropout(attn\_src)

#

පෝෂණයසඳහා සාමාන්යකරණය කරන්න

128z=self.norm\_ff(x)

#

නිශ්චිතවදක්වා ඇත්නම් ආදානය ආහාර ඉදිරි ස්ථරයට සුරකින්න

130ifself.is\_save\_ff\_input:131self.ff\_input=z.clone()

#

Feed-forwardජාලය හරහා ගමන් කරන්න

133ff=self.feed\_forward(z)

#

ප්රතිපෝෂණඉදිරි ප්රති results ල නැවත එක් කරන්න

135x=x+self.dropout(ff)136137returnx

#

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

140classEncoder(nn.Module):

#

147def\_\_init\_\_(self,layer:TransformerLayer,n\_layers:int):148super().\_\_init\_\_()

#

ට්රාන්ස්ෆෝමර්ස්ථරයේ පිටපත් සාදන්න

150self.layers=clone\_module\_list(layer,n\_layers)

#

අවසානසාමාන්යකරණ ස්තරය

152self.norm=nn.LayerNorm([layer.size])

#

154defforward(self,x:torch.Tensor,mask:torch.Tensor):

#

එක්එක් ට්රාන්ස්ෆෝමර් ස්ථරය හරහා ධාවනය කරන්න

156forlayerinself.layers:157x=layer(x=x,mask=mask)

#

අවසානවශයෙන්, දෛශික සාමාන්යකරණය කරන්න

159returnself.norm(x)

#

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

162classDecoder(nn.Module):

#

169def\_\_init\_\_(self,layer:TransformerLayer,n\_layers:int):170super().\_\_init\_\_()

#

ට්රාන්ස්ෆෝමර්ස්ථරයේ පිටපත් සාදන්න

172self.layers=clone\_module\_list(layer,n\_layers)

#

අවසානසාමාන්යකරණ ස්තරය

174self.norm=nn.LayerNorm([layer.size])

#

176defforward(self,x:torch.Tensor,memory:torch.Tensor,src\_mask:torch.Tensor,tgt\_mask:torch.Tensor):

#

එක්එක් ට්රාන්ස්ෆෝමර් ස්ථරය හරහා ධාවනය කරන්න

178forlayerinself.layers:179x=layer(x=x,mask=tgt\_mask,src=memory,src\_mask=src\_mask)

#

අවසානවශයෙන්, දෛශික සාමාන්යකරණය කරන්න

181returnself.norm(x)

#

උත්පාදකයන්ත්රය

මෙයටෝකන පුරෝකථනය කරන අතර එම අයගේ සොෆ්ට්මැක්ස් ලබා දෙයි. ඔබ භාවිතා කරන්නේ නම් ඔබට මෙය අවශ්ය නොවේ nn.CrossEntropyLoss .

184classGenerator(nn.Module):

#

194def\_\_init\_\_(self,n\_vocab:int,d\_model:int):195super().\_\_init\_\_()196self.projection=nn.Linear(d\_model,n\_vocab)

#

198defforward(self,x):199returnself.projection(x)

#

ඒකාබද්ධඑන්කෝඩරය-විකේතකය

202classEncoderDecoder(nn.Module):

#

209def\_\_init\_\_(self,encoder:Encoder,decoder:Decoder,src\_embed:nn.Module,tgt\_embed:nn.Module,generator:nn.Module):210super().\_\_init\_\_()211self.encoder=encoder212self.decoder=decoder213self.src\_embed=src\_embed214self.tgt\_embed=tgt\_embed215self.generator=generator

#

මෙයඔවුන්ගේ කේතයෙන් වැදගත් විය. ග්ලෝරෝට්/fan_avg සමඟ පරාමිතීන් ආරම්භ කරන්න.

219forpinself.parameters():220ifp.dim()\>1:221nn.init.xavier\_uniform\_(p)

#

223defforward(self,src:torch.Tensor,tgt:torch.Tensor,src\_mask:torch.Tensor,tgt\_mask:torch.Tensor):

#

එන්කෝඩරයහරහා ප්රභවය ධාවනය කරන්න

225enc=self.encode(src,src\_mask)

#

විකේතකයහරහා කේතීකරණ සහ ඉලක්ක ධාවනය කරන්න

227returnself.decode(enc,src\_mask,tgt,tgt\_mask)

#

229defencode(self,src:torch.Tensor,src\_mask:torch.Tensor):230returnself.encoder(self.src\_embed(src),src\_mask)

#

232defdecode(self,memory:torch.Tensor,src\_mask:torch.Tensor,tgt:torch.Tensor,tgt\_mask:torch.Tensor):233returnself.decoder(self.tgt\_embed(tgt),memory,src\_mask,tgt\_mask)

Trending Research Paperslabml.ai