docs/si/activations/fta/index.html
[View code on Github](https://github.com/labmlai/annotated_deep_learning_paper_implementations/tree/master/labml_nn/activations/fta/ init.py)
මෙය PyTorch ක්රියාත්මක කිරීම/නිබන්ධනයකි නොපැහැදිලි ටයිලිං සක්රීය කිරීම්: අන්තර්ජාලය හරහා විරල නිරූපණ ඉගෙන ගැනීම සඳහා සරල ප්රවේශයකි.
නොපැහැදිලි ටයිල් සක්රිය කිරීම් යනු බින්නිං මත පදනම් වූ විරල ක්රියාකාරිත්වයේ ආකාරයකි.
බින්ටින් යනු කාල අන්තරයන් මත පදනම්ව පරිමාණ අගයක් බඳුනකට වර්ගීකරණය කිරීමයි. බින්ටින් කිරීමේ එක් ගැටළුවක් නම්, එය බොහෝ අගයන් සඳහා ශුන්ය අනුක්රමික ලබා දෙයි (බදුන් මායිමේ හැර). අනෙක බින් කාල පරතරයන් විශාල නම් බින්නිං නිරවද්යතාව නැති වීමයි.
වෙළෙඳ ගිවිසුමක් මෙම අවාසි ජය. ටයිල් ඇක්ටිවේෂන් වලදී මෙන් දැඩි සීමාවන් වෙනුවට FTA බඳුන් අතර මෘදු මායිම් භාවිතා කරයි. මෙය සියලු හෝ පුළුල් පරාසයක අගයන් සඳහා ශුන්ය නොවන අනුක්රමික ලබා දෙයි. තවද එය අර්ධ අගයන් වලින් අල්ලා ගන්නා බැවින් නිරවද්යතාව නැති නොවේ.
cටයිල් දෛශිකය,
c=(l,l+δ,l+2δ,…,u−2δ,u−δ)
ආදාන පරාසය[l,u] කොතැනද,δ බින් ප්රමාණයu−l වන අතර එය බෙදියδ හැකිය.
ටයිල් සක්රිය කිරීම වේ,
ϕ(z)=1−I+(max(c−z,0)+max(z−δ−c))
ආදානය ධනාත්මක සහ0 වෙනත් ආකාරයකින්1 නම් ලබා දෙන දර්ශක ශ්රිතයI+(⋅) කොහේද?
එය දුෂ්කර සීමාවන් ඇති බැවින් ටයිල් සක්රිය කිරීම ශුන්ය අනුක්රමික ලබා දෙන බව සලකන්න.
මෙම නොපැහැදිලි දර්ශකයක් කාර්යය,
Iη,+(x)=I+(η−x)x+I+(x−η)
එය රේඛීයව සිට10≤x<η කවදාද0 දක්වා වැඩි වන අතර එය සමාන1 වේη≤x. ηයනු අධි-පරාමිතියකි.
බඳුන් අතර මෘදු මායිම් නිර්මාණය කිරීමට FTA මෙය භාවිතා කරයි.
ϕη(z)=1−Iη,+(max(c−z,0)+max(z−δ−c,0))
ට්රාන්ස්ෆෝමරයක් තුළ FTA භාවිතා කරන සරල අත්හදා බැලීමක් මෙන්න.
61importtorch62fromtorchimportnn
65classFTA(nn.Module):
lower_limit පහළ සීමාව වේ lupper_limit ඉහළ සීමාව වේ udelta බඳුනේ ප්රමාණය δeta සීමාවල මෘදු η බව detemines බව පරාමිතිය වේ.70def\_\_init\_\_(self,lower\_limit:float,upper\_limit:float,delta:float,eta:float):
77super().\_\_init\_\_()
දෛශිකටයිල් කිරීම ආරම්භ කරන්න c=(l,l+δ,l+2δ,…,u−2δ,u−δ)
80self.c=nn.Parameter(torch.arange(lower\_limit,upper\_limit,delta),requires\_grad=False)
ආදානදෛශිකය බඳුන් සංඛ්යාවට සමාන සාධකයක් මගින් පුළුල් වේ δu−l
82self.expansion\_factor=len(self.c)
δ
84self.delta=delta
η
86self.eta=eta
Iη,+(x)=I+(η−x)x+I+(x−η)
88deffuzzy\_i\_plus(self,x:torch.Tensor):
94return(x\<=self.eta)\*x+(x\>self.eta)
96defforward(self,z:torch.Tensor):
ප්රමාණයේතවත් මානයක් එක් කරන්න 1. අපි මෙය බඳුන් බවට පුළුල් කරන්නෙමු.
99z=z.view(\*z.shape,1)
ϕη(z)=1−Iη,+(max(c−z,0)+max(z−δ−c,0))
102z=1.-self.fuzzy\_i\_plus(torch.clip(self.c-z,min=0.)+torch.clip(z-self.delta-self.c,min=0.))
මුල්මානයන් ගණනට නැවත හැඩගස්වා ගන්න. අවසාන මානයන් ප්රමාණය බඳුන් ගණන අනුව පුළුල් δu−lවේ,.
106returnz.view(\*z.shape[:-2],-1)
109def\_test():
113fromlabml.loggerimportinspect
ආරම්භකරන්න
116a=FTA(-10,10,2.,0.5)
මුද්රණය c
118inspect(a.c)
බඳුන්ගණන මුද්රණය කරන්න δu−l
120inspect(a.expansion\_factor)
ආදානය z
123z=torch.tensor([1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.,10.,11.])
මුද්රණය z
125inspect(z)
මුද්රණය ϕη(z)
127inspect(a(z))128129130if\_\_name\_\_=='\_\_main\_\_':131\_test()