නොපැහැදිලි ටයිල් සක්රීය කිරීම් (FTA)

Open In Colab

මෙය PyTorch ක්රියාත්මක කිරීම/නිබන්ධනයකි නොපැහැදිලි ටයිලිං සක්රීය කිරීම්: අන්තර්ජාලය හරහා විරල නිරූපණ ඉගෙන ගැනීම සඳහා සරල ප්රවේශයකි.

නොපැහැදිලි ටයිල් සක්රිය කිරීම් යනු බින්නිං මත පදනම් වූ විරල ක්රියාකාරිත්වයේ ආකාරයකි.

බින්ටින් යනු කාල අන්තරයන් මත පදනම්ව පරිමාණ අගයක් බඳුනකට වර්ගීකරණය කිරීමයි. බින්ටින් කිරීමේ එක් ගැටළුවක් නම්, එය බොහෝ අගයන් සඳහා ශුන්ය අනුක්රමික ලබා දෙයි (බදුන් මායිමේ හැර). අනෙක බින් කාල පරතරයන් විශාල නම් බින්නිං නිරවද්යතාව නැති වීමයි.

වෙළෙඳ ගිවිසුමක් මෙම අවාසි ජය. ටයිල් ඇක්ටිවේෂන් වලදී මෙන් දැඩි සීමාවන් වෙනුවට FTA බඳුන් අතර මෘදු මායිම් භාවිතා කරයි. මෙය සියලු හෝ පුළුල් පරාසයක අගයන් සඳහා ශුන්ය නොවන අනුක්රමික ලබා දෙයි. තවද එය අර්ධ අගයන් වලින් අල්ලා ගන්නා බැවින් නිරවද්යතාව නැති නොවේ.

ටයිල් ඇක්ටිවේෂන්

ටයිල් දෛශිකය,

ආදාන පරාසය කොතැනද, බින් ප්රමාණය වන අතර එය බෙදිය හැකිය.

ටයිල් සක්රිය කිරීම වේ,

ආදානය ධනාත්මක සහ වෙනත් ආකාරයකින් නම් ලබා දෙන දර්ශක ශ්රිතය කොහේද?

එය දුෂ්කර සීමාවන් ඇති බැවින් ටයිල් සක්රිය කිරීම ශුන්ය අනුක්රමික ලබා දෙන බව සලකන්න.

නොපැහැදිලි ටයිල් ක්රියාකාරකම්

මෙම නොපැහැදිලි දර්ශකයක් කාර්යය,

එය රේඛීයව සිට කවදාද දක්වා වැඩි වන අතර එය සමාන වේ. යනු අධි-පරාමිතියකි.

බඳුන් අතර මෘදු මායිම් නිර්මාණය කිරීමට FTA මෙය භාවිතා කරයි.

ට්රාන්ස්ෆෝමරයක් තුළ FTA භාවිතා කරන සරල අත්හදා බැලීමක් මෙන්න.

61import torch
62from torch import nn

නොපැහැදිලිටයිල් සක්රීය කිරීම් (FTA)

65class FTA(nn.Module):
  • lower_limit පහළ සීමාව වේ
  • upper_limit ඉහළ සීමාව වේ
  • delta බඳුනේ ප්රමාණය
  • eta සීමාවල මෘදු බව detemines බව පරාමිතිය වේ.
70    def __init__(self, lower_limit: float, upper_limit: float, delta: float, eta: float):
77        super().__init__()

දෛශිකටයිල් කිරීම ආරම්භ කරන්න

80        self.c = nn.Parameter(torch.arange(lower_limit, upper_limit, delta), requires_grad=False)

ආදානදෛශිකය බඳුන් සංඛ්යාවට සමාන සාධකයක් මගින් පුළුල් වේ

82        self.expansion_factor = len(self.c)

84        self.delta = delta

86        self.eta = eta

නොපැහැදිලිදර්ශක ශ්රිතය

88    def fuzzy_i_plus(self, x: torch.Tensor):
94        return (x <= self.eta) * x + (x > self.eta)
96    def forward(self, z: torch.Tensor):

ප්රමාණයේතවත් මානයක් එක් කරන්න . අපි මෙය බඳුන් බවට පුළුල් කරන්නෙමු.

99        z = z.view(*z.shape, 1)

102        z = 1. - self.fuzzy_i_plus(torch.clip(self.c - z, min=0.) + torch.clip(z - self.delta - self.c, min=0.))

මුල්මානයන් ගණනට නැවත හැඩගස්වා ගන්න. අවසාන මානයන් ප්රමාණය බඳුන් ගණන අනුව පුළුල් වේ,.

106        return z.view(*z.shape[:-2], -1)

FTAමොඩියුලය පරීක්ෂා කිරීමට කේතය

109def _test():
113    from labml.logger import inspect

ආරම්භකරන්න

116    a = FTA(-10, 10, 2., 0.5)

මුද්රණය

118    inspect(a.c)

බඳුන්ගණන මුද්රණය කරන්න

120    inspect(a.expansion_factor)

ආදානය

123    z = torch.tensor([1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9., 10., 11.])

මුද්රණය

125    inspect(z)

මුද්රණය

127    inspect(a(z))
128
129
130if __name__ == '__main__':
131    _test()