Back to Annotated Deep Learning Paper Implementations

ස්නායුකජාලයක දැනුම ආසවනය කිරීම

docs/si/distillation/index.html

latest15.1 KB
Original Source

homedistillation

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

#

ස්නායුකජාලයක දැනුම ආසවනය කිරීම

මෙය ස්නායුක ජාලයක දැනුම ආසවනය කරන කඩදාසි PyTorch ක්රියාත්මක කිරීම/නිබන්ධනයකි.

එයපුහුණු විශාල ජාලයක දැනුම භාවිතා කරමින් කුඩා ජාලයක් පුහුණු කිරීමේ ක්රමයකි; එනම් විශාල ජාලයෙන් දැනුම ආසවනය කිරීම.

විධිමත්කිරීමක් සහිත විශාල ආකෘතියක් හෝ ආකෘති සමූහයක් (ඩ්රොප් අවුට් භාවිතා කරමින්) දත්ත සහ ලේබල් මත කෙලින්ම පුහුණු කරන විට කුඩා ආකෘතියකට වඩා හොඳ සාමාන්යකරණය කරයි. කෙසේ වෙතත්, විශාල ආකෘතියක් ආධාරයෙන් වඩා හොඳ සාමාන්යකරණය කිරීම සඳහා කුඩා ආකෘතියක් පුහුණු කළ හැකිය. කුඩා ආකෘති නිෂ්පාදනය වඩා හොඳ වේ: වේගවත්, අඩු ගණනය, අඩු මතකය.

පුහුණුආකෘතියක නිමැවුම් සම්භාවිතාවන් ලේබල් වලට වඩා වැඩි තොරතුරු ලබා දෙන්නේ එය ශුන්ය නොවන සම්භාවිතාවන් වැරදි පංතිවලට පවරන බැවිනි. මෙම සම්භාවිතාවන් අපට පවසන්නේ නියැදියකට ඇතැම් පංතිවලට අයත් වීමේ අවස්ථාවක් ඇති බවයි. නිදසුනක් වශයෙන්, ඉලක්කම් වර්ගීකරණය කිරීමේදී, ඉලක්කම් 7 හි රූපයක් ලබා දුන් විට, සාමාන්යකරණය කරන ලද ආකෘතියක් _7_ට වැඩි සම්භාවිතාවක් සහ කුඩා නමුත් ශුන්ය නොවන සම්භාවිතාව 2 දක්වා ලබා දෙනු ඇත, අනෙක් ඉලක්කම් වලට පාහේ ශුන්ය සම්භාවිතාව පවරයි. ආසවනය කුඩා ආකෘතියක් වඩා හොඳින් පුහුණු කිරීම සඳහා මෙම තොරතුරු භාවිතා කරයි.

මෘදුඉලක්ක

සම්භාවිතාවන්සාමාන්යයෙන් ගණනය කරනු ලබන්නේ සොෆ්ට්මැක්ස් මෙහෙයුමකින්,

qi​=∑j​exp(zj​)exp(zi​)​

පන්තියසඳහා qi​ සම්භාවිතාව i කොතැනද සහ zi​ පිවිසුම වේ.

හරස්එන්ට්රොපිය හෝ කේඑල් අපසරනය අවම කිරීම සඳහා අපි කුඩා ආකෘතිය පුහුණු කරමු එහි නිමැවුම් සම්භාවිතා ව්යාප්තිය සහ විශාල ජාලයේ නිමැවුම් සම්භාවිතා ව්යාප්තිය (මෘදු ඉලක්ක) අතර.

මෙහිඇති එක් ගැටළුවක් නම් විශාල ජාලය විසින් වැරදි පන්ති සඳහා පවරා ඇති සම්භාවිතාවන් බොහෝ විට ඉතා කුඩා වන අතර අලාභයට දායක නොවීමයි. ඒ නිසා ඔවුන් උෂ්ණත්වය යෙදීමෙන් සම්භාවිතාව මෘදු කරයි T,

qi​=∑j​exp(Tzj​​)exp(Tzi​​)​

සඳහාඉහළ අගයන් මෘදු සම්භාවිතාව ඇති T කරනු ඇත.

පුහුණු

කුඩාආකෘතිය පුහුණු කිරීමේදී සැබෑ ලේබල් පුරෝකථනය කිරීම සඳහා දෙවන පාඩු පදය එක් කිරීමට කඩදාසි යෝජනා කරයි. පාඩු පද දෙකේ බර තැබූ එකතුව ලෙස අපි සංයුක්ත අලාභය ගණනය කරමු: මෘදු ඉලක්ක සහ සත්ය ලේබල්.

ආසවනයසඳහා දත්ත සමුදාය _මාරු කට්ටලය_ලෙස හැඳින්වේ, සහ කඩදාසි එකම පුහුණු දත්ත භාවිතා යෝජනා කරයි.

අපගේඅත්හදා බැලීම

අපිCIFA-10 දත්ත කට්ටලය මත පුහුණු කරමු. ඩ්රොප් අවුට් සමඟ 14,728,266 පරාමිතීන් ඇති විශාල ආකෘතියක් අපි පුහුණු කරන අතර එය වලංගු කිරීමේ කට්ටලය මත 85% ක නිරවද්යතාවයක් ලබා දෙයි. 437,034 පරාමිතීන් සහිත කුඩා ආකෘතියක් 80% ක නිරවද්යතාවයක් ලබා දෙයි.

ඉන්පසුඅපි කුඩා ආකෘතිය විශාල ආකෘතියෙන් ආසවනය සමඟ පුහුණු කරන අතර එය 82% ක නිරවද්යතාවයක් ලබා දෙයි; නිරවද්යතාවයේ 2% වැඩි වීමක්.

74importtorch75importtorch.nn.functional76fromtorchimportnn7778fromlabmlimportexperiment,tracker79fromlabml.configsimportoption80fromlabml\_helpers.train\_validimportBatchIndex81fromlabml\_nn.distillation.largeimportLargeModel82fromlabml\_nn.distillation.smallimportSmallModel83fromlabml\_nn.experiments.cifar10importCIFAR10Configs

#

වින්යාසකිරීම්

මෙයසියලු දත්ත සමුදාය ආශ්රිත වින්යාසයන්, ප්රශස්තකරණය සහ පුහුණු ලූපයක් නිර්වචනය කරන සිට CIFAR10Configs විහිදේ.

86classConfigs(CIFAR10Configs):

#

කුඩාආකෘතිය

94model:SmallModel

#

විශාලආකෘතිය

96large:LargeModel

#

මෘදුඉලක්ක සඳහා KL අපසරනය අලාභය

98kl\_div\_loss=nn.KLDivLoss(log\_target=True)

#

සැබෑලේබල් නැතිවීම සඳහා හරස් එන්ට්රොපි අලාභය

100loss\_func=nn.CrossEntropyLoss()

#

උෂ්ණත්වය, T

102temperature:float=5.

#

මෘදුඉලක්ක අහිමි වීම සඳහා බර.

මෘදුඉලක්ක මගින් නිපදවන ලද අනුක්රමික පරිමාණයට ලක් T21​වේ. මේ සඳහා වන්දි ගෙවීම සඳහා කඩදාසි යෝජනා කරන්නේ මෘදු ඉලක්ක අලාභය සාධකයක් මගින් පරිමාණය කිරීමයි T2

108soft\_targets\_weight:float=100.

#

සැබෑලේබලය හරස් එන්ට්රොපිය අඞු කිරීමට සඳහා සිරුරේ බර

110label\_loss\_weight:float=0.5

#

පුහුණුව/වලංගුකිරීමේ පියවර

ආසවනයඇතුළත් කිරීම සඳහා අභිරුචි පුහුණුව/වලංගු කිරීමේ පියවරක් අපි අර්ථ දක්වන්නෙමු

112defstep(self,batch:any,batch\_idx:BatchIndex):

#

කුඩාආකෘතිය සඳහා පුහුණුව/ඇගයීම් මාදිලිය

120self.model.train(self.mode.is\_train)

#

ඇගයීම්මාදිලියේ විශාල ආකෘතිය

122self.large.eval()

#

උපාංගයවෙත දත්ත ගෙනයන්න

125data,target=batch[0].to(self.device),batch[1].to(self.device)

#

පුහුණුප්රකාරයේදී ගෝලීය පියවර (සැකසූ සාම්පල ගණන) යාවත්කාලීන කරන්න

128ifself.mode.is\_train:129tracker.add\_global\_step(len(data))

#

නිමැවුම්පිවිසුම් ලබා ගන්න, vi​, විශාල ආකෘතියෙන්

132withtorch.no\_grad():133large\_logits=self.large(data)

#

ප්රතිදානපිවිසුම් ලබා ගන්න, zi​, කුඩා ආකෘතියෙන්

136output=self.model(data)

#

මෘදුඉලක්ක pi​=∑j​exp(Tvj​​)exp(Tvi​​)​

140soft\_targets=nn.functional.log\_softmax(large\_logits/self.temperature,dim=-1)

#

කුඩාආකෘතියේ උෂ්ණත්වය සකස් කළ සම්භාවිතාව qi​=∑j​exp(Tzj​​)exp(Tzi​​)​

143soft\_prob=nn.functional.log\_softmax(output/self.temperature,dim=-1)

#

මෘදුඉලක්ක අලාභය ගණනය කරන්න

146soft\_targets\_loss=self.kl\_div\_loss(soft\_prob,soft\_targets)

#

සැබෑලේබල් අලාභය ගණනය කරන්න

148label\_loss=self.loss\_func(output,target)

#

පාඩුදෙකේ බර තැබූ එකතුව

150loss=self.soft\_targets\_weight\*soft\_targets\_loss+self.label\_loss\_weight\*label\_loss

#

පාඩුලොග් කරන්න

152tracker.add({"loss.kl\_div.":soft\_targets\_loss,153"loss.nll":label\_loss,154"loss.":loss})

#

ගණනයකිරීම සහ ලොග් කිරීමේ නිරවද්යතාවය

157self.accuracy(output,target)158self.accuracy.track()

#

ආකෘතියපුහුණු කරන්න

161ifself.mode.is\_train:

#

අනුක්රමිකගණනය කරන්න

163loss.backward()

#

ප්රශස්තිකරණපියවර ගන්න

165self.optimizer.step()

#

සෑමයුගලයකම අවසාන කණ්ඩායමේ ආදර්ශ පරාමිතීන් සහ අනුක්රමික ලොග් කරන්න

167ifbatch\_idx.is\_last:168tracker.add('model',self.model)

#

අනුක්රමිකඉවත්

170self.optimizer.zero\_grad()

#

ලුහුබැඳඇති ප්රමිතික සුරකින්න

173tracker.save()

#

විශාලආකෘතියක් සාදන්න

176@option(Configs.large)177def\_large\_model(c:Configs):

#

181returnLargeModel().to(c.device)

#

කුඩාආකෘතියක් සාදන්න

184@option(Configs.model)185def\_small\_student\_model(c:Configs):

#

189returnSmallModel().to(c.device)

#

පුහුණු විශාල ආකෘතියක්පටවන්න

192defget\_saved\_model(run\_uuid:str,checkpoint:int):

#

197fromlabml\_nn.distillation.largeimportConfigsasLargeConfigs

#

ඇගයීම්ප්රකාරයේදී (පටිගත කිරීමක් නැත)

200experiment.evaluate()

#

විශාලආකෘති පුහුණු අත්හදා බැලීමේ වින්යාස ආරම්භ කරන්න

202conf=LargeConfigs()

#

සුරකිනලද වින්යාස පැටවීම

204experiment.configs(conf,experiment.load\_configs(run\_uuid))

#

ඉතිරිකිරීම/පැටවීම සඳහා ආකෘති සකසන්න

206experiment.add\_pytorch\_models({'model':conf.model})

#

පූරණයකිරීමට කුමන ධාවනය සහ මුරපොලක් සකසන්න

208experiment.load(run\_uuid,checkpoint)

#

අත්හදාබැලීම ආරම්භ කරන්න - මෙය ආකෘතිය පටවනු ඇත, සියල්ල සූදානම් කරන්න

210experiment.start()

#

ආකෘතියආපසු දෙන්න

213returnconf.model

#

ආසවනයසමඟ කුඩා ආකෘතියක් පුහුණු කරන්න

216defmain(run\_uuid:str,checkpoint:int):

#

සුරකිනලද ආකෘතිය පැටවීම

221large\_model=get\_saved\_model(run\_uuid,checkpoint)

#

අත්හදාබැලීම සාදන්න

223experiment.create(name='distillation',comment='cifar10')

#

වින්යාසයන්සාදන්න

225conf=Configs()

#

පටවනලද විශාල ආකෘතිය සකසන්න

227conf.large=large\_model

#

වින්යාසයන්පූරණය කරන්න

229experiment.configs(conf,{230'optimizer.optimizer':'Adam',231'optimizer.learning\_rate':2.5e-4,232'model':'\_small\_student\_model',233})

#

ඉතිරිකිරීම/පැටවීම සඳහා ආකෘතිය සකසන්න

235experiment.add\_pytorch\_models({'model':conf.model})

#

මුලසිටම අත්හදා බැලීම ආරම්භ කරන්න

237experiment.load(None,None)

#

අත්හදාබැලීම ආරම්භ කර පුහුණු ලූපය ක්රියාත්මක කරන්න

239withexperiment.start():240conf.run()

#

244if\_\_name\_\_=='\_\_main\_\_':245main('d46cd53edaec11eb93c38d6538aee7d6',1\_000\_000)

Trending Research Paperslabml.ai