docs/si/transformers/primer_ez/variations.html
ප්රයිමර්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
අපි බහු-ප්රධාන අවධානය අපගේ මුල් ක්රියාත්මක කිරීම දීර් 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
අපි බහු-ප්රධාන අවධානය අපගේ මුල් ක්රියාත්මක කිරීම දීර් 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))