docs/si/normalization/batch_channel_norm/index.html
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σ^CX⋅,C,⋅,⋅−μ^C+βC
කොහෙද,
μ^Cσ^C2⟵(1−r)μ^C+rBHW1b,h,w∑Xb,c,h,w⟵(1−r)σ^C2+rBHW1b,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():
පළමුහා අවසාන මානයන් හරහා මධ්යන්යය ගණනය කරන්න; BHW1b,h,w∑Xb,c,h,w
139mean=x.mean(dim=[0,2])
පළමුහා අවසාන මානයන් හරහා චතුරස්රාකාර මධ්යන්යය ගණනය කරන්න; BHW1b,h,w∑Xb,c,h,w2
142mean\_x2=(x\*\*2).mean(dim=[0,2])
එක්එක් ලක්ෂණය සඳහා විචලතාව BHW1b,h,w∑(Xb,c,h,w−μ^C)2
145var=mean\_x2-mean\*\*2
ඝාතීයවෙනස්වන සාමාන්යය යාවත්කාලීන
μ^Cσ^C2⟵(1−r)μ^C+rBHW1b,h,w∑Xb,c,h,w⟵(1−r)σ^C2+rBHW1b,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
සාමාන්යකරන්න σ^CX⋅,C,⋅,⋅−μ^C
158x\_norm=(x-self.exp\_mean.view(1,-1,1))/torch.sqrt(self.exp\_var+self.eps).view(1,-1,1)
පරිමාණයසහ මාරුව γCσ^CX⋅,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=γiGx^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)