docs/si/gan/wasserstein/gradient_penalty/index.html
homeganwassersteingradient_penalty
[View code on Github](https://github.com/labmlai/annotated_deep_learning_paper_implementations/tree/master/labml_nn/gan/wasserstein/gradient_penalty/ init.py)
මෙය වොසර්ස්ටයින් GANs වැඩිදියුණු කළ පුහුණුවක්රියාත්මක කිරීමයි.
වෙනස්කොට සැලකීමේ ජාලයේ (විචාරක)ලිප්ස්චිට්ස් අවහිරතා බලාත්මක කිරීම සඳහා WGAN විසින් ක්ලිපින් බර යෝජනා කරයි. මෙය සහ L2 සම්මත ක්ලිපින් කිරීම, බර සාමාන්යකරණය කිරීම, L1, L2 බර ක්ෂය වීම වැනි වෙනත් බර බාධක ගැටළු ඇත:
කඩදාසි වැඩිදියුණු කරන ලද වොසර්ස්ටයින් GANS පුහුණුව Lipschitz අවහිරතා වැඩි දියුණු කිරීම සඳහා වඩා හොඳ ක්රමයක් යෝජනා කරයි.
LGP=λx^∼Px^E[(∥∇x^D(x^)∥2−1)2]
දpenalty λ ුවම් බර සහ කොහේද?
xzϵxx^∼Pr∼p(z)∼U[0,1]←Gθ(z)←ϵx+(1−ϵ)x
ඒතමයි අපි ශ්රේණියේ සම්මතය ∥∇x^D(x^)∥2 සමීපව තබා ගැනීමට උත්සාහ කරමු 1.
මෙමක්රියාත්මක කිරීමේදී අපි සකස් කළෙමු ϵ=1.
ශ්රේණියේද penalty ුවම භාවිතා කරන අත්හදා බැලීමක් සඳහා කේතය මෙන්න.
46importtorch47importtorch.autograd4849fromlabml\_helpers.moduleimportModule
52classGradientPenalty(Module):
x වේ x∼Pr
f වේ D(x)
x^←x අපි මෙම ක්රියාත්මක කිරීම ϵ=1 සඳහා සකස් කර ඇති බැවින්.
57defforward(self,x:torch.Tensor,f:torch.Tensor):
කණ්ඩායම්ප්රමාණය ලබා ගන්න
67batch\_size=x.shape[0]
සම්බන්ධයෙන්අනුක්රමික ගණනය කරන්න x. D(x) grad_outputs අපට අනුක්රමික අවශ්ය බැවින් ඒවාට සකසා ඇති අතර D(x), මෙම අලාභයේ බර සම්බන්ධයෙන් අනුක්රමික ගණනය කළ යුතු බැවින් අපි ප්රස්ථාරයක් නිර්මාණය කර රඳවා තබා ගත යුතුය.
73gradients,\*\_=torch.autograd.grad(outputs=f,74inputs=x,75grad\_outputs=f.new\_ones(f.shape),76create\_graph=True)
සම්මතයගණනය කිරීම සඳහා අනුක්රමික නැවත සකස් කරන්න
79gradients=gradients.reshape(batch\_size,-1)
සම්මතයගණනය කරන්න ∥∇x^D(x^)∥2
81norm=gradients.norm(2,dim=-1)
අලාභයආපසු ලබා දෙන්න (∥∇x^D(x^)∥2−1)2
83returntorch.mean((norm-1)\*\*2)