Back to Annotated Deep Learning Paper Implementations

ප්රයිමර් EZ විචලනයන්

docs/si/transformers/primer_ez/variations.html

latest8.4 KB
Original Source

hometransformersprimer_ez

View code on Github

#

ප්රයිමර් EZ විචලනයන්

ප්රයිමර්EZ හි වෙනස්කම් මොනවාද යන්න බැලීමට අපි යම් වෙනස්කම් කිහිපයක් උත්සාහ කළෙමු.

12importtorch13fromtorchimportnn1415fromlabml\_helpers.moduleimportModule16fromlabml\_nn.transformersimportMultiHeadAttention

#

අවකාශීයගැඹුර නැණවත් හවුල් සම්මුතිය

අපිඑකම කර්නලය සියලුම නාලිකා හරහා බෙදා ගනිමු.

19classSpatialDepthWiseSharedConvolution(Module):

#

26def\_\_init\_\_(self,kernel\_size:int=3):27super().\_\_init\_\_()28self.kernel\_size=kernel\_size

#

අපිපයිටෝර්ච් Conv1d මොඩියුලය භාවිතා කරමු. අපි දෙපැත්තටම පුරවන එකතු කර පසුව නිවැරදි වඩාත්ම kernel_size - 1 ප්රති

. ල ලබා ගනිමු

33self.conv=nn.Conv1d(in\_channels=1,out\_channels=1,kernel\_size=(kernel\_size,),padding=(kernel\_size-1,))

#

x හැඩය ඇත [seq_len, batch_size, heads, d_k]

35defforward(self,x:torch.Tensor):

#

හැඩයලබා ගන්න

41seq\_len,batch\_size,heads,d\_k=x.shape

#

කිරීමටඅවසර [batch_size, heads, d_k, seq_len]

43x=x.permute(1,2,3,0)

#

හැඩයවෙනස් කරන්න [batch_size * heads * d_k, seq_len]

45x=x.view(batch\_size\*heads\*d\_k,1,seq\_len)

#

1Dකැටි ගැසුමේ ආකෘතියේ ආදානය පිළිගනී [N, channels, sequence]

48x=self.conv(x)

#

අපිදෙපැත්තෙන්ම ආවරණයකින් සමන්විත බැවින් නිවැරදි වඩාත්ම kernel_size - 1 ප්රති results ල බෝග කරන්න

50x=x[:,:,:-(self.kernel\_size-1)]

#

නැවතහැඩගස්වන්න [batch_size, heads, d_k, seq_len]

52x=x.view(batch\_size,heads,d\_k,seq\_len)

#

කිරීමටඅවසර [seq_len, batch_size, heads, d_k]

54x=x.permute(3,0,1,2)

#

57returnx

#

බහු-ගැඹුරු-ප්රඥාව-බෙදා-COV-හිසඅවධානය

අපි බහු-ප්රධාන අවධානය අපගේ මුල් ක්රියාත්මක කිරීම දීර් extend කරන අතර විමසුම, යතුර සහ වටිනාකම් ප්රක්ෂේපණ සඳහා අවකාශීය ගැඹුරට හවුල් හවුල් සම්මුතියක් එක් කරමු.

60classMultiDSharedConvHeadAttention(MultiHeadAttention):

#

68def\_\_init\_\_(self,heads:int,d\_model:int,dropout\_prob:float=0.1):69super().\_\_init\_\_(heads,d\_model,dropout\_prob)

#

බහු-ප්රධාන අවධානය විමසුම නිර්මාණය කරනු ඇත, ප්රධාන සහ අගය ප්රක්ෂේපනය මොඩියුල self.query``self.key , සහ self.value .

අපිඔවුන් එක් එක් අවකාශීය ගැඹුර-නැණවත් හවුල් convolution ස්ථරය ඒකාබද්ධ හා වෙනුවට self.query``self.key , සහ self.value .

76self.query=nn.Sequential(self.query,SpatialDepthWiseSharedConvolution())77self.key=nn.Sequential(self.key,SpatialDepthWiseSharedConvolution())78self.value=nn.Sequential(self.value,SpatialDepthWiseSharedConvolution())

#

හිසසංකෝචනය සඳහා අවකාශීය ගැඹුර නැණවත්

81classSpatialDepthWisePerHeadConvolution(Module):

#

  • heads හිස් සංඛ්යාව වේ
  • d_k එක් එක් හිසෙහි නාලිකා ගණන වේ
86def\_\_init\_\_(self,heads:int,d\_k:int,kernel\_size:int=3):

#

91super().\_\_init\_\_()92self.kernel\_size=kernel\_size

#

අපිපයිටෝර්ච් Conv1d මොඩියුලය භාවිතා කරමු. එක් එක් නාලිකාව සහ හිස සඳහා වෙනම සංවහනයක් (විවිධ කර්නල් සමඟ) සිදු වන පරිදි එක් එක් හිසෙන් නාලිකා ගණනට සමාන වන පරිදි අපි කණ්ඩායම් ගණන සකස් කරමු. අපි දෙපැත්තටම පුරවන එකතු කර පසුව නිවැරදි වඩාත්ම kernel_size - 1 ප්රති

. ල ලබා ගනිමු

98self.conv=nn.Conv1d(in\_channels=d\_k\*heads,out\_channels=d\_k\*heads,99kernel\_size=(kernel\_size,),padding=(kernel\_size-1,),groups=d\_k\*heads)

#

x හැඩය ඇත [seq_len, batch_size, heads, d_k]

101defforward(self,x:torch.Tensor):

#

හැඩයලබා ගන්න

107seq\_len,batch\_size,heads,d\_k=x.shape

#

කිරීමටඅවසර [batch_size, heads, d_k, seq_len]

109x=x.permute(1,2,3,0)

#

හැඩයවෙනස් කරන්න [batch_size heads * d_k, seq_len]

111x=x.view(batch\_size,heads\*d\_k,seq\_len)

#

1Dකැටි ගැසුමේ ආකෘතියේ ආදානය පිළිගනී [N, channels, sequence]

114x=self.conv(x)

#

අපිදෙපැත්තෙන්ම ආවරණයකින් සමන්විත බැවින් නිවැරදි වඩාත්ම kernel_size - 1 ප්රති results ල බෝග කරන්න

116x=x[:,:,:-(self.kernel\_size-1)]

#

නැවතහැඩගස්වන්න [batch_size, heads, d_k, seq_len]

118x=x.view(batch\_size,heads,d\_k,seq\_len)

#

කිරීමටඅවසර [seq_len, batch_size, heads, d_k]

120x=x.permute(3,0,1,2)

#

123returnx

#

බහු-per-හිසගැඹුරු-ප්රඥාව-කේතු-හිස අවධානය

අපි බහු-ප්රධාන අවධානය අපගේ මුල් ක්රියාත්මක කිරීම දීර් and කරන අතර විමසුම, යතුර සහ වටිනාකම් ප්රක්ෂේපණ සඳහා අවකාශීය ගැඹුර-නැණවත් සම්මුතිය එක් කරමු.

126classMultiDPHConvHeadAttention(MultiHeadAttention):

#

134def\_\_init\_\_(self,heads:int,d\_model:int,dropout\_prob:float=0.1):135super().\_\_init\_\_(heads,d\_model,dropout\_prob)

#

බහු-ප්රධාන අවධානය විමසුම නිර්මාණය කරනු ඇත, ප්රධාන සහ අගය ප්රක්ෂේපනය මොඩියුල self.query``self.key , සහ self.value .

අපිඑක් එක් ඒවාට අවකාශීය එක්-හිස ගැඹුර-නැණවත් කැටි ගැසුණු ස්ථරයක් ඒකාබද්ධ කර ප්රතිස්ථාපනය කරමු self.query``self.key , සහ self.value .

142self.query=nn.Sequential(self.query,SpatialDepthWisePerHeadConvolution(heads,self.d\_k))143self.key=nn.Sequential(self.key,SpatialDepthWisePerHeadConvolution(heads,self.d\_k))144self.value=nn.Sequential(self.value,SpatialDepthWisePerHeadConvolution(heads,self.d\_k))

Trending Research Paperslabml.ai