docs/si/normalization/group_norm/index.html
[View code on Github](https://github.com/labmlai/annotated_deep_learning_paper_implementations/tree/master/labml_nn/normalization/group_norm/ init.py)
මෙය සමූහ සාමාන්යකරණය කිරීමේ කඩදාසි PyTorch ක්රියාත්මක කිරීමයි.
කණ්ඩායම් සාමාන්යකරණය ප්රමාණවත් තරම් විශාල කණ්ඩායම් ප්රමාණ සඳහා හොඳින් ක්රියා කරන නමුත් කුඩා කණ්ඩායම් ප්රමාණ සඳහා හොඳින් නොවේ, මන්ද එය කණ්ඩායමට වඩා සාමාන්යකරණය කරයි. උපාංගවල මතක ධාරිතාව නිසා විශාල කණ්ඩායම් ප්රමාණ සහිත විශාල ආකෘති පුහුණු කිරීම කළ නොහැක.
මෙමලිපිය සමූහ සාමාන්යකරණය හඳුන්වා දෙයි, එය කණ්ඩායමක් ලෙස එකට විශේෂාංග සමූහයක් සාමාන්යකරණය කරයි. මෙය පදනම් වී ඇත්තේ SIFT සහ HOG වැනි සම්භාව්ය ලක්ෂණ කණ්ඩායම් අනුව ලක්ෂණ බව නිරීක්ෂණය කිරීම මත ය. විශේෂාංග නාලිකා කණ්ඩායම් වලට බෙදීමට සහ එක් එක් කණ්ඩායම තුළ ඇති සියලුම නාලිකා වෙන වෙනම සාමාන්යකරණය කිරීමට ලිපිය යෝජනා කරයි.
සියලුමසාමාන්යකරණ ස්ථර පහත දැක්වෙන ගණනය කිරීම් මගින් අර්ථ දැක්විය හැකිය.
x^i=σi1(xi−μi)
කණ්ඩායමනියෝජනය x කරන ටෙන්සරය කොහේද i , තනි අගයක දර්ශකය වේ. නිදසුනක් ලෙස, එය 2D රූප i=(iN,iC,iH,iW) වන විට කණ්ඩායම, විශේෂාංග නාලිකාව, සිරස් ඛණ්ඩාංක සහ තිරස් ඛණ්ඩාංක තුළ රූපය සුචිගත කිරීම සඳහා 4-d දෛශිකයකි. μi σi ඒවා මධ්යන්ය හා සම්මත අපගමනය වේ.
μiσi=m1k∈Si∑xk=m1k∈Si∑(xk−μi)2+ϵ
Si යනු දර්ශකය සඳහා මධ්යන්ය හා සම්මත අපගමනය ගණනය කරනු ලබන දර්ශක iසමූහයයි. m සියලු දෙනාටම එක හා සමාන Si වන කට්ටලයේ ප්රමාණය iවේ.
කණ්ඩායම් සාමාන්යකරණය, ස්ථර සාමාන්යකරණයසහඅවස්ථාසාමාන්යකරණයසඳහා අර්ථ දැක්වීම වෙනස් වේ. Si
Si={k∣kC=iC}
එකමවිශේෂාංග නාලිකාව බෙදා ගන්නා අගයන් එකට සාමාන්යකරණය වේ.
Si={k∣kN=iN}
කණ්ඩායමේඑකම නියැදියක අගයන් එකට සාමාන්යකරණය වේ.
Si={k∣kN=iN,kC=iC}
එකමනියැදියක සහ එකම විශේෂාංග නාලිකාවේ අගයන් එකට සාමාන්යකරණය වේ.
Si={k∣kN=iN,⌊C/GkC⌋=⌊C/GiC⌋}
කණ්ඩායම් G ගණන කොතැනද සහ C නාලිකා ගණන වේ.
සමූහසාමාන්යකරණය එකම නියැදියක සහ එකම නාලිකා සමූහයේ අගයන් සාමාන්යකරණය කරයි.
මෙන්න CIFAR තියෙන්නේ 10 උදාහරණයක් සාමාන්යකරණය භාවිතා කරන වර්ගීකරණය ආකෘතිය .
85importtorch86fromtorchimportnn8788fromlabml\_helpers.moduleimportModule
91classGroupNorm(Module):
groups යනු කණ්ඩායම් ගණන විශේෂාංග වලට බෙදා ඇතchannels යනු ආදානයේ ඇති විශේෂාංග ගණනeps සංඛ්යාත්මක ස්ථායිතාව Var[x(k)]+ϵ සඳහා භාවිතා වේ ϵaffine සාමාන්යකරණය කළ අගය පරිමාණය කර මාරු කළ යුතුද යන්නයි96def\_\_init\_\_(self,groups:int,channels:int,\*,97eps:float=1e-5,affine:bool=True):
104super().\_\_init\_\_()105106assertchannels%groups==0,"Number of channels should be evenly divisible by the number of groups"107self.groups=groups108self.channels=channels109110self.eps=eps111self.affine=affine
පරිමාණයසහ මාරුව β සඳහා γ සහ පරාමිතීන් සාදන්න
113ifself.affine:114self.scale=nn.Parameter(torch.ones(channels))115self.shift=nn.Parameter(torch.zeros(channels))
x හැඩයේ ආතන්ය [batch_size, channels, *] වේ. * ඕනෑම සංඛ්යාවක් (සමහරවිට 0) මානයන් දක්වයි. උදාහරණයක් ලෙස, රූපයක් (2D) සංකෝචනය තුළ මෙය වනු ඇත [batch_size, channels, height, width]
117defforward(self,x:torch.Tensor):
මුල්හැඩය තබා ගන්න
125x\_shape=x.shape
කණ්ඩායම්ප්රමාණය ලබා ගන්න
127batch\_size=x\_shape[0]
විශේෂාංගගණන සමාන බව තහවුරු කර ගැනීම සඳහා සනීපාරක්ෂාව පරීක්ෂා කරන්න
129assertself.channels==x.shape[1]
නැවතහැඩගස්වා ගන්න [batch_size, groups, n]
132x=x.view(batch\_size,self.groups,-1)
අවසානමානය හරහා මධ්යන්යය ගණනය කරන්න; එනම් එක් එක් නියැදිය සහ නාලිකා කණ්ඩායම සඳහා මාධ්යයන් E[x(iN,iG)]
136mean=x.mean(dim=[-1],keepdim=True)
අවසානමානය හරහා වර්ග කළ මධ්යන්යය ගණනය කරන්න; එනම් එක් එක් නියැදිය සහ නාලිකා කණ්ඩායම සඳහා මාධ්යයන් E[x(iN,iG)2]
139mean\_x2=(x\*\*2).mean(dim=[-1],keepdim=True)
එක්එක් නියැදිය සහ විශේෂාංග කණ්ඩායම සඳහා විචලතාව Var[x(iN,iG)]=E[x(iN,iG)2]−E[x(iN,iG)]2
142var=mean\_x2-mean\*\*2
සාමාන්යකරන්න x^(iN,iG)=Var[x(iN,iG)]+ϵx(iN,iG)−E[x(iN,iG)]
147x\_norm=(x-mean)/torch.sqrt(var+self.eps)
නාලිකාවඅනුව පරිමාණය සහ මාරුව yiC=γiCx^iC+βiC
151ifself.affine:152x\_norm=x\_norm.view(batch\_size,self.channels,-1)153x\_norm=self.scale.view(1,-1,1)\*x\_norm+self.shift.view(1,-1,1)
මුල්පිටපතට නැවත හැඩගස්වා නැවත පැමිණීම
156returnx\_norm.view(x\_shape)
සරලපරීක්ෂණය
159def\_test():
163fromlabml.loggerimportinspect164165x=torch.zeros([2,6,2,4])166inspect(x.shape)167bn=GroupNorm(2,6)168169x=bn(x)170inspect(x.shape)
174if\_\_name\_\_=='\_\_main\_\_':175\_test()