Back to Annotated Deep Learning Paper Implementations

ස්වයංක්රීයප්රතිගාමී එන්එල්පී ආකෘති පුහුණුකරු

docs/si/experiments/nlp_autoregression.html

latest15.0 KB
Original Source

homeexperiments

View code on Github

#

ස්වයංක්රීයප්රතිගාමී එන්එල්පී ආකෘති පුහුණුකරු

11fromtypingimportCallable1213importtorch14importtorch.nnasnn15fromtorch.utils.dataimportDataLoader,RandomSampler1617fromlabmlimportlab,monit,logger,tracker18fromlabml.configsimportoption19fromlabml.loggerimportText20fromlabml\_helpers.datasets.textimportTextDataset,SequentialDataLoader,SequentialUnBatchedDataset,TextFileDataset21fromlabml\_helpers.deviceimportDeviceConfigs22fromlabml\_helpers.metrics.accuracyimportAccuracy23fromlabml\_helpers.moduleimportModule24fromlabml\_helpers.train\_validimportTrainValidConfigs,hook\_model\_outputs,BatchIndex25fromlabml\_nn.optimizers.configsimportOptimizerConfigs

#

හරස්එන්ට්රොපි නැතිවීම

28classCrossEntropyLoss(Module):

#

33def\_\_init\_\_(self):34super().\_\_init\_\_()35self.loss=nn.CrossEntropyLoss()

#

37defforward(self,outputs,targets):38returnself.loss(outputs.view(-1,outputs.shape[-1]),targets.view(-1))

#

පුහුණුකරුමානකරණ

එන්එල්පීස්වයංක්රීය-ප්රතිගාමී කාර්ය පුහුණුව සඳහා මූලික වින්යාසයන් මෙයට ඇත. සියලුම ගුණාංග වින්යාසගත කළ හැකිය.

41classNLPAutoRegressionConfigs(TrainValidConfigs):

#

ප්රශස්තකරණය

52optimizer:torch.optim.Adam

#

පුහුණුඋපාංගය

54device:torch.device=DeviceConfigs()

#

ස්වයංක්රීයප්රතිගාමී ආකෘතිය

57model:Module

#

පෙළදත්ත කට්ටලය

59text:TextDataset

#

කණ්ඩායම්ප්රමාණය

61batch\_size:int=16

#

අනුක්රමයේදිග, හෝ සන්දර්භය ප්රමාණය

63seq\_len:int=512

#

වචනමාලාවේ ටෝකන් ගණන

65n\_tokens:int

#

ටෝකනයිසර්

67tokenizer:Callable='character'

#

නියැදීම්ආරම්භ කිරීමට පෙළ විමසුම (නිදර්ශනය සඳහා)

70prompt:str

#

නියැදීමේදීටෝකන් බෙදුම්කරු (අක්ෂර මට්ටමේ ටෝකනීකරණය සඳහා හිස්)

72prompt\_separator:str

#

වරින්වර ආකෘති සුරැකීමට යන්න

75is\_save\_models=True

#

පාඩුශ්රිතය

78loss\_func=CrossEntropyLoss()

#

නිරවද්යතාශ්රිතය

80accuracy=Accuracy()

#

ආදර්ශකාවැද්දීමේ ප්රමාණය

82d\_model:int=512

#

ශ්රේණියේක්ලිපින්

84grad\_norm\_clip:float=1.0

#

පුහුණුදත්ත පැටවුම

87train\_loader:DataLoader='shuffled\_train\_loader'

#

වලංගුදත්ත පැටවුම

89valid\_loader:DataLoader='shuffled\_valid\_loader'

#

දත්තකාරකයන් ආදේශ කිරීම සමඟ මාරු වේ

92dataloader\_shuffle\_with\_replacement:bool=False

#

ආදර්ශපරාමිතීන් සහ අනුක්රමික ලඝු-සටහන යන්න (එක් එක් එක් එක් එක් වරක්). මේවා ස්ථරයකට සාරාංශගත සංඛ්යාන වේ, නමුත් එය තවමත් ඉතා ගැඹුරු ජාල සඳහා බොහෝ දර්ශක වලට හේතු විය හැකිය.

97is\_log\_model\_params\_grads:bool=False

#

ආදර්ශසක්රිය කිරීම් ලොග් කළ යුතුද යන්න (එක් එක් ඊපෝච් එකකට වරක්). මේවා ස්ථරයකට සාරාංශගත සංඛ්යාන වේ, නමුත් එය තවමත් ඉතා ගැඹුරු ජාල සඳහා බොහෝ දර්ශක වලට හේතු විය හැකිය.

102is\_log\_model\_activations:bool=False

#

ආරම්භකකරණය

104definit(self):

#

ට්රැකර්වින්යාසයන් සකසන්න

109tracker.set\_scalar("accuracy.\*",True)110tracker.set\_scalar("loss.\*",True)111tracker.set\_text("sampled",False)

#

මොඩියුලප්රතිදානයන් ලොග් කිරීමට කොක්කක් එක් කරන්න

113hook\_model\_outputs(self.mode,self.model,'model')

#

රාජ්යමොඩියුලයක් ලෙස නිරවද්යතාව එක් කරන්න. RNs සඳහා පුහුණුව සහ වලංගු කිරීම අතර රාජ්යයන් ගබඩා කිරීම අදහස් කරන බැවින් නම බොහෝ විට ව්යාකූල වේ. මෙය පුහුණුව සහ වලංගු කිරීම සඳහා නිරවද්යතා මෙට්රික් සංඛ්යාන වෙනම තබා ගනී.

118self.state\_modules=[self.accuracy]

#

වෙනත්ප්රමිතික ගණනය කිරීමට හා ලොග් කිරීමට අභිබවා යන්න

120defother\_metrics(self,output:torch.Tensor,target:torch.Tensor):

#

122pass

#

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

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

#

පුහුණු/evalමාදිලිය සකසන්න

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

#

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

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

#

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

136ifself.mode.is\_train:137tracker.add\_global\_step(data.shape[0]\*data.shape[1])

#

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

140withself.mode.update(is\_log\_activations=batch\_idx.is\_lastandself.is\_log\_model\_activations):

#

ආදර්ශප්රතිදානයන් ලබා ගන්න. ආර්එන්එස් භාවිතා කරන විට එය ප්රාන්ත සඳහා ටූල් එකක් නැවත ලබා දෙයි. මෙය තවම ක්රියාත්මක කර නැත 😜

144output,\*\_=self.model(data)

#

ගණනයකිරීම සහ ලොග් වීම

147loss=self.loss\_func(output,target)148tracker.add("loss.",loss)

#

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

151self.accuracy(output,target)152self.accuracy.track()153154self.other\_metrics(output,target)

#

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

157ifself.mode.is\_train:

#

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

159loss.backward()

#

ක්ලිප්අනුක්රමික

161torch.nn.utils.clip\_grad\_norm\_(self.model.parameters(),max\_norm=self.grad\_norm\_clip)

#

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

163self.optimizer.step()

#

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

165ifbatch\_idx.is\_lastandself.is\_log\_model\_params\_grads:166tracker.add('model',self.model)

#

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

168self.optimizer.zero\_grad()

#

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

171tracker.save()

#

පුහුණුවඅතරතුර වරින් වර සාම්පල ජනනය කිරීම සඳහා නියැදි කිරීමේ කාර්යය

173defsample(self):

#

විමසුමක්ආරම්භ කිරීම

179prompt=self.prompt

#

මුද්රණයසඳහා ප්රතිදානය එකතු කරන්න

181log=[(prompt,Text.subtle)]

#

සාම්පල25 ටෝකන

183foriinmonit.iterate('Sample',25):

#

විමසුමටෝකෙන්කරන්න

185data=self.text.text\_to\_i(prompt).unsqueeze(-1)186data=data.to(self.device)

#

ආදර්ශප්රතිදානය ලබා ගන්න

188output,\*\_=self.model(data)

#

ආදර්ශඅනාවැකිය ලබා ගන්න (කෑදර)

190output=output.argmax(dim=-1).squeeze()

#

විමසුමටඅනාවැකිය එක් කරන්න

192prompt+=self.prompt\_separator+self.text.itos[output[-1]]

#

ලොග්වීම සඳහා අනාවැකිය එක් කරන්න

194log+=[(self.prompt\_separator+self.text.itos[output[-1]],Text.value)]195196tracker.add({'sampled':prompt})

#

නියැදිප්රතිදානය මුද්රණය කරන්න

198logger.log(log)

#

පෙරනිමි ප්රශස්තිකරණ වින්යාසයන්

201@option(NLPAutoRegressionConfigs.optimizer)202def\_optimizer(c:NLPAutoRegressionConfigs):

#

207optimizer=OptimizerConfigs()208optimizer.parameters=c.model.parameters()209optimizer.optimizer='Adam'210optimizer.d\_model=c.d\_model211212returnoptimizer

#

ටෝකනගණන ලබා ගන්න

215@option(NLPAutoRegressionConfigs.n\_tokens)216def\_n\_tokens(c:NLPAutoRegressionConfigs):

#

220returnc.text.n\_tokens

#

මූලිකඉංග්රීසි ටෝකනයිසර්

මෙමඅත්හදා බැලීමේදී අපි චරිත මට්ටමේ ටෝකනයිසර් භාවිතා කරමු. සැකසීමෙන් ඔබට මාරු විය හැකිය,

'tokenizer': 'basic_english',

අත්හදාබැලීම ආරම්භ කිරීමේදී වින්යාස කිරීමේ ශබ්දකෝෂයේ.

223@option(NLPAutoRegressionConfigs.tokenizer)224defbasic\_english():

#

238fromtorchtext.dataimportget\_tokenizer239returnget\_tokenizer('basic\_english')

#

අක්ෂරමට්ටමේ ටෝකනයිසර්

242defcharacter\_tokenizer(x:str):

#

246returnlist(x)

#

අක්ෂරමට්ටමේ ටෝකනයිසර් වින්යාසය

249@option(NLPAutoRegressionConfigs.tokenizer)250defcharacter():

#

254returncharacter\_tokenizer

#

කුඩාෂේක්ස්පියර් දත්ත කට්ටලය

නොමැතිනම් එය url එකෙන් බාගත කරනු ඇත

257@option(NLPAutoRegressionConfigs.text)258deftiny\_shakespeare(c:NLPAutoRegressionConfigs):

#

264returnTextFileDataset(265lab.get\_data\_path()/'tiny\_shakespeare.txt',266c.tokenizer,267url='https://raw.githubusercontent.com/karpathy/char-rnn/master/data/tinyshakespeare/input.txt')

#

අනුක්රමිකපුහුණු දත්ත කාරකය

270@option(NLPAutoRegressionConfigs.train\_loader)271defsequential\_train\_loader(c:NLPAutoRegressionConfigs):

#

275returnSequentialDataLoader(text=c.text.train,276dataset=c.text,277batch\_size=c.batch\_size,278seq\_len=c.seq\_len)

#

අනුක්රමිකවලංගු දත්ත කාරකය

281@option(NLPAutoRegressionConfigs.valid\_loader)282defsequential\_valid\_loader(c:NLPAutoRegressionConfigs):

#

286returnSequentialDataLoader(text=c.text.valid,287dataset=c.text,288batch\_size=c.batch\_size,289seq\_len=c.seq\_len)

#

කණ්ඩායමසම්ප්රේෂණය

DataLoader පළමු මානය මත කණ්ඩායම් එකතු කරයි. අපි එය පළමුව අනුපිළිවෙලට සම්ප්රේෂණය කළ යුතුය.

292deftranspose\_batch(batch):

#

300transposed\_data=list(zip(\*batch))

#

දෙවනමානය ඔස්සේ කණ්ඩායම ගොඩගසන්න dim=1

302src=torch.stack(transposed\_data[0],dim=1)303tgt=torch.stack(transposed\_data[1],dim=1)304305returnsrc,tgt

#

මාරුකළ පුහුණු දත්ත පැටවුම

308@option(NLPAutoRegressionConfigs.train\_loader)309defshuffled\_train\_loader(c:NLPAutoRegressionConfigs):

#

313dataset=SequentialUnBatchedDataset(text=c.text.train,314dataset=c.text,315seq\_len=c.seq\_len)316sampler=RandomSampler(dataset,replacement=c.dataloader\_shuffle\_with\_replacement)317318returnDataLoader(dataset,319batch\_size=c.batch\_size,320collate\_fn=transpose\_batch,321sampler=sampler)

#

මාරුකළ වලංගු දත්ත පැටවුම

324@option(NLPAutoRegressionConfigs.valid\_loader)325defshuffled\_valid\_loader(c:NLPAutoRegressionConfigs):

#

329dataset=SequentialUnBatchedDataset(text=c.text.valid,330dataset=c.text,331seq\_len=c.seq\_len)332sampler=RandomSampler(dataset,replacement=c.dataloader\_shuffle\_with\_replacement)333334returnDataLoader(dataset,335batch\_size=c.batch\_size,336collate\_fn=transpose\_batch,337sampler=sampler)

Trending Research Paperslabml.ai