docs/si/transformers/primer_ez/efficient.html
1importmath23importtorch4fromtorchimportnn56fromlabml\_helpers.moduleimportModule7fromlabml\_nn.transformersimportMultiHeadAttention
මෙයඇත්ත වශයෙන්ම මන්දගාමී ය
10classSpatialDepthWiseConvolution(Module):
d_k එක් එක් හිසෙහි නාලිකා ගණන වේ17def\_\_init\_\_(self,d\_k:int,kernel\_size:int=3):
21super().\_\_init\_\_()22self.kernel\_size=kernel\_size
අපිපයිටෝර්ච් Conv1d මොඩියුලය භාවිතා කරමු. එක් එක් නාලිකාව සඳහා වෙනම සංවහනයක් (විවිධ කර්නල් සමඟ) සිදු වන පරිදි නාලිකා ගණනට සමාන වන පරිදි කණ්ඩායම් ගණන අපි සකස් කරමු. අපි දෙපැත්තටම පුරවන එකතු කර පසුව නිවැරදි වඩාත්ම kernel_size - 1 ප්රති
. ල ලබා ගනිමු
27rng=1/math.sqrt(kernel\_size)28self.kernels=nn.Parameter(torch.zeros((kernel\_size,d\_k)).uniform\_(-rng,rng))
x හැඩය ඇත [seq_len, batch_size, heads, d_k]
30defforward(self,x:torch.Tensor):
35res=x\*self.kernels[0].view(1,1,1,-1)3637foriinrange(1,len(self.kernels)):38res[i:]+=x[:-i]\*self.kernels[i].view(1,1,1,-1)3940returnres
අපි බහු-ප්රධාන අවධානය අපගේ මුල් ක්රියාත්මක කිරීම දීර් and කරන අතර විමසුම, යතුර සහ වටිනාකම් ප්රක්ෂේපණ සඳහා අවකාශීය ගැඹුර-නැණවත් සම්මුතිය එක් කරමු.
43classMultiDConvHeadAttention(MultiHeadAttention):
51def\_\_init\_\_(self,heads:int,d\_model:int,dropout\_prob:float=0.1):52super().\_\_init\_\_(heads,d\_model,dropout\_prob)
බහු-ප්රධාන අවධානය විමසුම නිර්මාණය කරනු ඇත, ප්රධාන සහ අගය ප්රක්ෂේපනය මොඩියුල self.query``self.key , සහ self.value .
අපිඔවුන් එක් එක් කිරීමට අවකාශීය ගැඹුර-නැණවත් convolution ස්ථරය ඒකාබද්ධ හා වෙනුවට self.query``self.key , සහ self.value .
59self.query=nn.Sequential(self.query,SpatialDepthWiseConvolution(self.d\_k))60self.key=nn.Sequential(self.key,SpatialDepthWiseConvolution(self.d\_k))61self.value=nn.Sequential(self.value,SpatialDepthWiseConvolution(self.d\_k))