Back to Annotated Deep Learning Paper Implementations

කණ්ඩායම්සාමාන්යකරණය

docs/si/normalization/group_norm/index.html

latest9.3 KB
Original Source

homenormalizationgroup_norm

[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​=σi​1​(xi​−μi​)

කණ්ඩායමනියෝජනය x කරන ටෙන්සරය කොහේද i , තනි අගයක දර්ශකය වේ. නිදසුනක් ලෙස, එය 2D රූප i=(iN​,iC​,iH​,iW​) වන විට කණ්ඩායම, විශේෂාංග නාලිකාව, සිරස් ඛණ්ඩාංක සහ තිරස් ඛණ්ඩාංක තුළ රූපය සුචිගත කිරීම සඳහා 4-d දෛශිකයකි. μi​ σi​ ඒවා මධ්යන්ය හා සම්මත අපගමනය වේ.

μi​σi​​=m1​k∈Si​∑​xk​=m1​k∈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​​=γiC​​x^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()

Trending Research Paperslabml.ai