බරප්රමිතිකරණය

මෙය PyTorch ක්රියාත්මක කිරීමකි බර ප්රමිතිකරණය කඩදාසි වලින් ක්ෂුද්ර කණ්ඩායම් පුහුණුව කණ්ඩායම-නාලිකා සාමාන්යකරණය සහ බර ප්රමිතිකරණය සමඟ . කණ්ඩායම්-නාලිකා සාමාන්යකරණය පිළිබඳ විචිත්රවත් ක්රියාත්මකකිරීමක් ද අප සතුව ඇත.

කණ්ඩායම්සාමාන්යකරණය සුමට අලාභ භූ දර්ශනයක් ලබා දෙන අතර තුරන් කිරීමේ තනිකම වළක්වයි . ඉවත් කිරීම singularities යනු නිෂ් less ල බවට පත්වන ජාලයේ නෝඩ් වේ (උදා: 0 සෑම විටම ලබා දෙන RelU).

කෙසේවෙතත්, කණ්ඩායම් ප්රමාණය ඉතා කුඩා වූ විට කණ්ඩායම් සාමාන්යකරණය හොඳින් ක්රියා නොකරයි, එය සිදුවන්නේ උපාංග මතක සීමාවන් නිසා විශාල ජාල පුහුණු කිරීමේදී ය. වඩා හොඳ විකල්පයක් ලෙස බැච්-චැනල් සාමාන්යකරණය සමඟ බර ප්රමිතිකරණය කඩදාසි හඳුන්වා දෙයි.

බරප්රමිතිකරණය: 1. අනුක්රමික සාමාන්යකරණය 2. භූ දර්ශනය සුමට කරයි (Lipschitz නියතය අඩු කිරීම) 3. තුරන් කිරීමේ තනිකම වළක්වයි

Lipschitzනියතය යනු ශ්රිතයක් ලකුණු දෙකක් අතර ඇති උපරිම බෑවුමයි. එනම්, ලිප්ස්චිට්ස් නියතය යනු තෘප්තිමත් වන කුඩාම අගය කොතැනද, කොතැනද යන්නයි.

ඉවත්කිරීම singularities වළක්වා එය යෙදවුම් සමාන ප්රතිදානයන් සංඛ්යා ලේඛන කරයි නිසා. එබැවින් යෙදවුම් සාමාන්යයෙන් බෙදා හරින තාක් කල් ප්රතිදානයන් සාමාන්යයට ආසන්නව පවතී. මෙය සෑම විටම සක්රිය ශ්රිතයේ ක්රියාකාරී පරාසයෙන් ඔබ්බට වැටීමෙන් නෝඩ් වල ප්රතිදානයන් වළක්වයි (උදා: සෑම විටම RelU සඳහා negative ණාත්මක ආදානය).

සාක්ෂි සඳහා කඩදාසි වෙත යොමු වන්න.

CIFA-10දත්ත වර්ගීකරණය කිරීම සඳහා බර ප්රමිතිකරණය භාවිතා කරන VGG ජාලයක් පුහුණු කිරීම සඳහා පුහුණු කේතය මෙන්න. මෙය බර ප්රමිතිකරණය සමඟ 2D- සම්මුති තට්ටුවක්භාවිතා කරයි.

Open In Colab View Run

49import torch

බරප්රමිතිකරණය

කොහෙද,

2D-සංවහනස්තරයක් සඳහා ප්රතිදාන නාලිකා ගණන () වන අතර ආදාන නාලිකා ගණන කර්නල් ප්රමාණය මෙන් ගුණයක් වේ (

)
52def weight_standardization(weight: torch.Tensor, eps: float):

ලබාගන්න , සහ කර්නල් හැඩය

71    c_out, c_in, *kernel_shape = weight.shape

නැවත හැඩගස්වන්න

73    weight = weight.view(c_out, -1)

ගණනයකරන්න

80    var, mean = torch.var_mean(weight, dim=1, keepdim=True)

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

83    weight = (weight - mean) / (torch.sqrt(var + eps))

මුල්හැඩයට ආපසු වෙනස් කර ආපසු යන්න

85    return weight.view(c_out, c_in, *kernel_shape)