උදාහරණයක්සාමාන්යකරණය

මෙය PyTorch ක්රියාත්මක කිරීම උදාහරණයක් සාමාන්යකරණය: වේගවත් ශෛලීකරණය සඳහා අතුරුදහන් වූ අමුද්රව්යය .

ශෛලිය මාරුවැඩි දියුණු කිරීම සඳහා උදාහරණයක් සාමාන්යකරණය හඳුන්වා දෙන ලදී. එය පදනම් වී ඇත්තේ අන්තර්ගත රූපයේ වෙනස මත ශෛලීකරණය රඳා නොතිබිය යුතු බව නිරීක්ෂණය කිරීම මත ය. “ප්රතිවිරුද්ධ සාමාන්යකරණය” වේ

මානරූප දර්ශකය , විශේෂාංග නාලිකාව සහ අවකාශීය පිහිටීම සහිත රූප සමූහයක් කොහේද?

සම්මුතිජාලයකට “ප්රතිවිරුද්ධ සාමාන්යකරණය” ඉගෙන ගැනීම දුෂ්කර බැවින්, මෙම ලිපිය මඟින් එය සිදු කරන උදාහරණයක් සාමාන්යකරණය හඳුන්වා දෙයි.

මෙන්න CIFAR තියෙන්නේ 10 උදාහරණයක් සාමාන්යකරණය භාවිතා කරන වර්ගීකරණය ආකෘතිය .

29import torch
30from torch import nn
31
32from labml_helpers.module import Module

උදාහරණයක්සාමාන්යකරණය ස්ථරය

උදාහරණයක්සාමාන්යකරණය ස්ථරය පහත සඳහන් පරිදි ආදාන normalizes:

ආදානය රූප නිරූපණ සමූහයක් වන විට, කණ්ඩායම් ප්රමාණය කොතැනද, නාලිකා ගණන, උස සහ පළල වේ. සහ . සමග affine පරිවර්තනය හා විකල්ප වේ.

35class InstanceNorm(Module):
  • channels යනු ආදානයේ ඇති විශේෂාංග ගණන
  • eps සංඛ්යාත්මක ස්ථායිතාව සඳහා භාවිතා වේ
  • affine සාමාන්යකරණය කළ අගය පරිමාණය කර මාරු කළ යුතුද යන්නයි
51    def __init__(self, channels: int, *,
52                 eps: float = 1e-5, affine: bool = True):
58        super().__init__()
59
60        self.channels = channels
61
62        self.eps = eps
63        self.affine = affine

පරිමාණයසහ මාරුව සඳහා සහ පරාමිතීන් සාදන්න

65        if self.affine:
66            self.scale = nn.Parameter(torch.ones(channels))
67            self.shift = nn.Parameter(torch.zeros(channels))

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

69    def forward(self, x: torch.Tensor):

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

77        x_shape = x.shape

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

79        batch_size = x_shape[0]

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

81        assert self.channels == x.shape[1]

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

84        x = x.view(batch_size, self.channels, -1)

අවසානමානය හරහා මධ්යන්යය ගණනය කරන්න, එනම් එක් එක් ලක්ෂණය සඳහා මාධ්යයන්

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

පළමුහා අවසාන මානයන් හරහා වර්ග කළ මධ්යන්යය ගණනය කරන්න; එනම් එක් එක් ලක්ෂණය සඳහා මාධ්යයන්

91        mean_x2 = (x ** 2).mean(dim=[-1], keepdim=True)

එක්එක් ලක්ෂණය සඳහා විචලතාව

93        var = mean_x2 - mean ** 2

සාමාන්‍යකරන්න

96        x_norm = (x - mean) / torch.sqrt(var + self.eps)
97        x_norm = x_norm.view(batch_size, self.channels, -1)

පරිමාණයසහ මාරුව

100        if self.affine:
101            x_norm = self.scale.view(1, -1, 1) * x_norm + self.shift.view(1, -1, 1)

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

104        return x_norm.view(x_shape)

සරලපරීක්ෂණය

107def _test():
111    from labml.logger import inspect
112
113    x = torch.zeros([2, 6, 2, 4])
114    inspect(x.shape)
115    bn = InstanceNorm(6)
116
117    x = bn(x)
118    inspect(x.shape)

122if __name__ == '__main__':
123    _test()