Back to Annotated Deep Learning Paper Implementations

උත්පාදකඅහිතකර ජාල (GAN)

docs/si/gan/original/index.html

latest6.2 KB
Original Source

homeganoriginal

[View code on Github](https://github.com/labmlai/annotated_deep_learning_paper_implementations/tree/master/labml_nn/gan/original/ init.py)

#

උත්පාදකඅහිතකර ජාල (GAN)

මෙය Generative Aversarial Networkක්රියාත්මක කිරීමයි.

උත්පාදකයන්ත්රය, දත්ත බෙදා හැරීමට ගැලපෙන සාම්පල G(zz;θg​) ජනනය කරන අතර වෙනස්කම් කරන්නා, වඩා දත්ත වලින් xx පැමිණි සම්භාවිතාව D(xx;θg​) ලබා දෙයි G.

වටිනාකම්ක්රියාකාරිත්වය සහිත ක්රීඩක දෙකක මිනි-මැක්ස් ක්රීඩාවක් සඳහා අපි පුහුණු D කරමු V(G,D). G

Gmin​Dmax​V(D,G)=Exx∼pdata​(xx)​[logD(xx)]+Ezz∼pzz​(zz)​[log(1−D(G(zz))]

pdata​(xx) යනු දත්ත වලට වඩා සම්භාවිතා බෙදා හැරීම වන අතර pzz​(zz) සම්භාවිතා ව්යාප්තිය zzවන අතර එය ගවුසියානු ශබ්දයට සකසා ඇත.

මෙමගොනුව පාඩු කාර්යයන් අර්ථ දක්වයි. මෙන්න උත්පාදක යන්ත්රය සහ වෙනස්කම් කරන්නා සඳහා බහු ස්ථර perceptron දෙකක් සහිත MNIST උදාහරණයකි.

34importtorch35importtorch.nnasnn36importtorch.utils.data37importtorch.utils.data3839fromlabml\_helpers.moduleimportModule

#

වෙනස්කම්කරන්නාගේ පාඩුව

වෙනස්කම්කරන්නා ශ්රේණිය මතට නැග්විය යුතුය,

∇θd​​m1​i=1∑m​[logD(xx(i))+log(1−D(G(zz(i))))]

m කුඩා කණ්ඩායම් ප්රමාණය (i) වන අතර කුඩා කණ්ඩායමේ සාම්පල දර්ශකය සඳහා භාවිතා කරයි. xx වෙතින් සාම්පල වන pdata​ අතර zz ඒවා සාම්පල pz​වේ.

42classDiscriminatorLogitsLoss(Module):

#

57def\_\_init\_\_(self,smoothing:float=0.2):58super().\_\_init\_\_()

#

අපිභාවිතා කරමු PyTorch ද්විමය ක්රොස් එන්ට්රොපි නැතිවීම −∑[ylog(y^​)+(1−y)log(1−y^​)], එනම් ලේබල් සහ y^​ අනාවැකි y කොහේද යන්නයි. සෘණලකුණ සටහන් කරන්න. අපි සිට සමාන ලේබල් භාවිතා 1 කරන pdata​ අතර xx xx සිට 0 සමාන ලේබල් pG​. එවිට මේවායේ එකතුව මතට බැස යාම ඉහත ශ්රේණීය මත නැඟීම හා සමාන වේ.

BCEWithLogitsLoss සොෆ්ට්මැක්ස් සහ ද්විමය හරස් එන්ට්රොපි නැතිවීම ඒකාබද්ධ කරයි.

69self.loss\_true=nn.BCEWithLogitsLoss()70self.loss\_false=nn.BCEWithLogitsLoss()

#

අපිලේබල් සුමටනය භාවිතා කරන්නේ එය සමහර අවස්ථාවලදී වඩා හොඳින් ක්රියා කරන බව පෙනෙන බැවිනි

73self.smoothing=smoothing

#

ලේබලබෆර් ලෙස ලියාපදිංචි කර ඇති අතර නොපසුබට උත්සාහය සකසා False ඇත.

76self.register\_buffer('labels\_true',\_create\_labels(256,1.0-smoothing,1.0),False)77self.register\_buffer('labels\_false',\_create\_labels(256,0.0,smoothing),False)

#

logits_true සිට පිවිසුම් logits_false වන D(xx(i)) අතර සිට පිවිසුම් වේ D(G(zz(i)))

79defforward(self,logits\_true:torch.Tensor,logits\_false:torch.Tensor):

#

84iflen(logits\_true)\>len(self.labels\_true):85self.register\_buffer("labels\_true",86\_create\_labels(len(logits\_true),1.0-self.smoothing,1.0,logits\_true.device),False)87iflen(logits\_false)\>len(self.labels\_false):88self.register\_buffer("labels\_false",89\_create\_labels(len(logits\_false),0.0,self.smoothing,logits\_false.device),False)9091return(self.loss\_true(logits\_true,self.labels\_true[:len(logits\_true)]),92self.loss\_false(logits\_false,self.labels\_false[:len(logits\_false)]))

#

උත්පාදකනැතිවීම

උත්පාදකයන්ත්රය අනුක්රමික මතට බැස යා යුතුය,

∇θg​​m1​i=1∑m​[log(1−D(G(zz(i))))]

95classGeneratorLogitsLoss(Module):

#

105def\_\_init\_\_(self,smoothing:float=0.2):106super().\_\_init\_\_()107self.loss\_true=nn.BCEWithLogitsLoss()108self.smoothing=smoothing

#

අපිසමාන ලේබල් භාවිතා කරමු xx සිට pG​. එවිට මෙම අලාභය මත බැස යාම ඉහත ශ්රේණියෙන් බැස යාම හා සමාන වේ. 1

112self.register\_buffer('fake\_labels',\_create\_labels(256,1.0-smoothing,1.0),False)

#

114defforward(self,logits:torch.Tensor):115iflen(logits)\>len(self.fake\_labels):116self.register\_buffer("fake\_labels",117\_create\_labels(len(logits),1.0-self.smoothing,1.0,logits.device),False)118119returnself.loss\_true(logits,self.fake\_labels[:len(logits)])

#

සුමටලේබල සාදන්න

122def\_create\_labels(n:int,r1:float,r2:float,device:torch.device=None):

#

126returntorch.empty(n,1,requires\_grad=False,device=device).uniform\_(r1,r2)

Trending Research Paperslabml.ai