මෙය 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()