Back to Annotated Deep Learning Paper Implementations

කණ්ඩායම-නාලිකාසාමාන්යකරණය

docs/si/normalization/batch_channel_norm/index.html

latest13.2 KB
Original Source

homenormalizationbatch_channel_norm

[View code on Github](https://github.com/labmlai/annotated_deep_learning_paper_implementations/tree/master/labml_nn/normalization/batch_channel_norm/ init.py)

#

කණ්ඩායම-නාලිකාසාමාන්යකරණය

මෙය PyTorch ක්රියාත්මක කිරීමකි කණ්ඩායම-නාලිකා සාමාන්යකරණය සහ බර ප්රමිතිකරණය සමඟ කඩදාසි මයික්රෝ-කණ්ඩායම් පුහුණුව වෙතින් කණ්ඩායම්-නාලිකා සාමාන්යකරණය . බර ප්රමිතිකරණය පිළිබඳ විකෘත ක්රියාත්මක කිරීමක්ද අප සතුව ඇත.

කණ්ඩායම්-නාලිකාසාමාන්යකරණය කණ්ඩායම් සාමාන්යකරණය සිදු කරන අතර පසුව නාලිකා සාමාන්යකරණය ( කණ්ඩායම් සාමාන්යකරණයටසමාන වේ. කණ්ඩායම් ප්රමාණය කුඩා වන විට කණ්ඩායම් සාමාන්යකරණය සඳහා ධාවන මධ්යන්යයක් සහ විචලතාව භාවිතා කරයි.

CIFA-10දත්ත වර්ගීකරණය කිරීම සඳහා බර ප්රමිතිකරණය භාවිතා කරන VGG ජාලයක් පුහුණු කිරීම සඳහා පුහුණු කේතය මෙන්න.

26importtorch27fromtorchimportnn2829fromlabml\_helpers.moduleimportModule30fromlabml\_nn.normalization.batch\_normimportBatchNorm

#

කණ්ඩායම-නාලිකාසාමාන්යකරණය

මෙයමුලින්ම කණ්ඩායම් සාමාන්යකරණය සිදු කරයි - එක්කෝ සාමාන්ය කණ්ඩායම් සම්මතය හෝ ඇස්තමේන්තුගත මධ්යන්ය හා විචලතාව සහිත කණ්ඩායම් නියමයක් (බහු කාණ්ඩවලට වඩා on ාතීය අර්ථය/විචලතාව). එවිට නාලිකා සාමාන්යකරණය සිදු කරන ලදී.

33classBatchChannelNorm(Module):

#

  • channels යනු ආදානයේ ඇති විශේෂාංග ගණන
  • groups යනු කණ්ඩායම් ගණන විශේෂාංග වලට බෙදා ඇත
  • eps සංඛ්යාත්මක ස්ථායිතාව Var[x(k)]+ϵ​ සඳහා භාවිතා වේ ϵ
  • momentum ඝාතීය වෙනස්වන සාමාන්යය ගනිමින් ගම්යතාව වේ
  • estimate කණ්ඩායම් සම්මතය සඳහා ධාවන මධ්යන්යය සහ විචලතාව භාවිතා කළ යුතුද යන්නයි
43def\_\_init\_\_(self,channels:int,groups:int,44eps:float=1e-5,momentum:float=0.1,estimate:bool=True):

#

52super().\_\_init\_\_()

#

ඇස්තමේන්තුගතකණ්ඩායම් සම්මතය හෝ සාමාන්ය කණ්ඩායම් සම්මතය භාවිතා කරන්න.

55ifestimate:56self.batch\_norm=EstimatedBatchNorm(channels,57eps=eps,momentum=momentum)58else:59self.batch\_norm=BatchNorm(channels,60eps=eps,momentum=momentum)

#

නාලිකාසාමාන්යකරණය

63self.channel\_norm=ChannelNorm(channels,groups,eps)

#

65defforward(self,x):66x=self.batch\_norm(x)67returnself.channel\_norm(x)

#

ඇස්තමේන්තුගතකණ්ඩායම් සාමාන්යකරණය

X∈RB×C×H×W ආදානය රූප නිරූපණ සමූහයක් B වන විට, කණ්ඩායම් ප්රමාණය කොතැනද, C නාලිකා ගණන, H උස සහ W පළල වේ. γ∈RC සහ β∈RC.

X˙⋅,C,⋅,⋅​=γC​σ^C​X⋅,C,⋅,⋅​−μ^​C​​+βC​

කොහෙද,

μ^​C​σ^C2​​⟵(1−r)μ^​C​+rBHW1​b,h,w∑​Xb,c,h,w​⟵(1−r)σ^C2​+rBHW1​b,h,w∑​(Xb,c,h,w​−μ^​C​)2​

ධාවනමධ්යන්යය සහ විචල්යයන් වේ. r ඝාතීය මධ්යන්යය ගණනය කිරීම සඳහා ගම්යතාව වේ.

70classEstimatedBatchNorm(Module):

#

  • channels යනු ආදානයේ ඇති විශේෂාංග ගණන
  • eps සංඛ්යාත්මක ස්ථායිතාව Var[x(k)]+ϵ​ සඳහා භාවිතා වේ ϵ
  • momentum ඝාතීය වෙනස්වන සාමාන්යය ගනිමින් ගම්යතාව වේ
  • estimate කණ්ඩායම් සම්මතය සඳහා ධාවන මධ්යන්යය සහ විචලතාව භාවිතා කළ යුතුද යන්නයි
91def\_\_init\_\_(self,channels:int,92eps:float=1e-5,momentum:float=0.1,affine:bool=True):

#

99super().\_\_init\_\_()100101self.eps=eps102self.momentum=momentum103self.affine=affine104self.channels=channels

#

නාලිකානැණවත් පරිවර්තන පරාමිතීන්

107ifself.affine:108self.scale=nn.Parameter(torch.ones(channels))109self.shift=nn.Parameter(torch.zeros(channels))

#

සඳහාටෙන්සර්ස් μ^​C​ සහ σ^C2​

112self.register\_buffer('exp\_mean',torch.zeros(channels))113self.register\_buffer('exp\_var',torch.ones(channels))

#

x හැඩයේ ආතන්ය [batch_size, channels, *] වේ. * ඕනෑම සංඛ්යාවක් (සමහරවිට 0) මානයන් දක්වයි. උදාහරණයක් ලෙස, රූපයක් (2D) සංකෝචනය තුළ මෙය වනු ඇත [batch_size, channels, height, width]

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

#

පැරණිහැඩය තබා ගන්න

123x\_shape=x.shape

#

කණ්ඩායම්ප්රමාණය ලබා ගන්න

125batch\_size=x\_shape[0]

#

විශේෂාංගගණන නිවැරදි බව තහවුරු කර ගැනීම සඳහා සනීපාරක්ෂාව පරීක්ෂා කරන්න

128assertself.channels==x.shape[1]

#

නැවතහැඩගස්වා ගන්න [batch_size, channels, n]

131x=x.view(batch\_size,self.channels,-1)

#

යාවත්කාලීනකිරීම μ^​C​ සහ σ^C2​ පුහුණු ප්රකාරයේදී පමණි

134ifself.training:

#

හරහා μ^​C​ පසුගාමී ප්රචාරණයක් නොමැත σ^C2​

136withtorch.no\_grad():

#

පළමුහා අවසාන මානයන් හරහා මධ්යන්යය ගණනය කරන්න; BHW1​b,h,w∑​Xb,c,h,w​

139mean=x.mean(dim=[0,2])

#

පළමුහා අවසාන මානයන් හරහා චතුරස්රාකාර මධ්යන්යය ගණනය කරන්න; BHW1​b,h,w∑​Xb,c,h,w2​

142mean\_x2=(x\*\*2).mean(dim=[0,2])

#

එක්එක් ලක්ෂණය සඳහා විචලතාව BHW1​b,h,w∑​(Xb,c,h,w​−μ^​C​)2

145var=mean\_x2-mean\*\*2

#

ඝාතීයවෙනස්වන සාමාන්යය යාවත්කාලීන

μ^​C​σ^C2​​⟵(1−r)μ^​C​+rBHW1​b,h,w∑​Xb,c,h,w​⟵(1−r)σ^C2​+rBHW1​b,h,w∑​(Xb,c,h,w​−μ^​C​)2​

153self.exp\_mean=(1-self.momentum)\*self.exp\_mean+self.momentum\*mean154self.exp\_var=(1-self.momentum)\*self.exp\_var+self.momentum\*var

#

සාමාන්‍යකරන්න σ^C​X⋅,C,⋅,⋅​−μ^​C​​

158x\_norm=(x-self.exp\_mean.view(1,-1,1))/torch.sqrt(self.exp\_var+self.eps).view(1,-1,1)

#

පරිමාණයසහ මාරුව γC​σ^C​X⋅,C,⋅,⋅​−μ^​C​​+βC​

163ifself.affine:164x\_norm=self.scale.view(1,-1,1)\*x\_norm+self.shift.view(1,-1,1)

#

මුල්පිටපතට නැවත හැඩගස්වා නැවත පැමිණීම

167returnx\_norm.view(x\_shape)

#

නාලිකාසාමාන්යකරණය

මෙය සමූහ සාමාන්යකරණයට සමාන වන නමුත් ඇෆයින් පරිණාමනය කණ්ඩායම් නැණවත් ලෙස සිදු කෙරේ.

170classChannelNorm(Module):

#

  • groups යනු කණ්ඩායම් ගණන විශේෂාංග වලට බෙදා ඇත
  • channels යනු ආදානයේ ඇති විශේෂාංග ගණන
  • eps සංඛ්යාත්මක ස්ථායිතාව Var[x(k)]+ϵ​ සඳහා භාවිතා වේ ϵ
  • affine සාමාන්යකරණය කළ අගය පරිමාණය කර මාරු කළ යුතුද යන්නයි
177def\_\_init\_\_(self,channels,groups,178eps:float=1e-5,affine:bool=True):

#

185super().\_\_init\_\_()186self.channels=channels187self.groups=groups188self.eps=eps189self.affine=affine

#

ඇෆයින්පරිවර්තනය සඳහා පරාමිතීන්.

මෙමපරිවර්තනයන් එක් කණ්ඩායමකට බව සලකන්න, කණ්ඩායම් සම්මතයේ මෙන් නොව, ඒවා පරිවර්තනය කරන නාලිකා අනුව පරිවර්තනය වේ.

194ifself.affine:195self.scale=nn.Parameter(torch.ones(groups))196self.shift=nn.Parameter(torch.zeros(groups))

#

x හැඩයේ ආතන්ය [batch_size, channels, *] වේ. * ඕනෑම සංඛ්යාවක් (සමහරවිට 0) මානයන් දක්වයි. උදාහරණයක් ලෙස, රූපයක් (2D) සංකෝචනය තුළ මෙය වනු ඇත [batch_size, channels, height, width]

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

#

මුල්හැඩය තබා ගන්න

207x\_shape=x.shape

#

කණ්ඩායම්ප්රමාණය ලබා ගන්න

209batch\_size=x\_shape[0]

#

විශේෂාංගගණන සමාන බව තහවුරු කර ගැනීම සඳහා සනීපාරක්ෂාව පරීක්ෂා කරන්න

211assertself.channels==x.shape[1]

#

නැවතහැඩගස්වා ගන්න [batch_size, groups, n]

214x=x.view(batch\_size,self.groups,-1)

#

අවසානමානය හරහා මධ්යන්යය ගණනය කරන්න; එනම් එක් එක් නියැදිය සහ නාලිකා කණ්ඩායම සඳහා මාධ්යයන් E[x(iN​,iG​)​]

218mean=x.mean(dim=[-1],keepdim=True)

#

අවසානමානය හරහා වර්ග කළ මධ්යන්යය ගණනය කරන්න; එනම් එක් එක් නියැදිය සහ නාලිකා කණ්ඩායම සඳහා මාධ්යයන් E[x(iN​,iG​)2​]

221mean\_x2=(x\*\*2).mean(dim=[-1],keepdim=True)

#

එක්එක් නියැදිය සහ විශේෂාංග කණ්ඩායම සඳහා විචලතාව Var[x(iN​,iG​)​]=E[x(iN​,iG​)2​]−E[x(iN​,iG​)​]2

224var=mean\_x2-mean\*\*2

#

සාමාන්‍යකරන්න x^(iN​,iG​)​=Var[x(iN​,iG​)​]+ϵ​x(iN​,iG​)​−E[x(iN​,iG​)​]​

229x\_norm=(x-mean)/torch.sqrt(var+self.eps)

#

කණ්ඩායම්අනුව පරිමාණය සහ මාරුව yiG​​=γiG​​x^iG​​+βiG​​

233ifself.affine:234x\_norm=self.scale.view(1,-1,1)\*x\_norm+self.shift.view(1,-1,1)

#

මුල්පිටපතට නැවත හැඩගස්වා නැවත පැමිණීම

237returnx\_norm.view(x\_shape)

Trending Research Paperslabml.ai