Back to Annotated Deep Learning Paper Implementations

අංක ගණිත දත්ත කට්ටලය

docs/si/experiments/arithmetic_dataset.html

latest11.3 KB
Original Source

homeexperiments

View code on Github

#

මෙය ජෝර්ජස් හාරික් (@gharik)විසින් කරන ලද කේතය මත පදනම් වේ.

11importrandom12importstring13fromtypingimportList1415importtorch16fromlabml.loggerimportText17fromtorch.utils.dataimportDataLoader,Dataset1819fromlabmlimportmonit,logger,tracker20fromlabml.configsimportoption21fromlabml\_nn.experiments.nlp\_autoregressionimportNLPAutoRegressionConfigs,transpose\_batch

#

අංකගණිත දත්ත කට්ටලය

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

එයපදනම් වී ඇත්තේ චරිත මට්ටමේ ටෝකනීකරණය මත ය.

24classArithmeticDataset(Dataset):

#

  • seq_len යනු ජනනය කරන ලද ගණිත ගැටළු වල අනුක්රමික දිගයි. මෙම දිග දක්වා අපි හැකි තරම් ගැටළු පුරවන්නෙමු: max_digits: යනු ඔපෙරන්ඩ් සංඛ්‍යාවේ උපරිම ඉලක්කම් සංඛ්‍යාව වේ: n_sequences: යනු එපෝච් එකකට අනුක්‍රම ගණන

වේ

34def\_\_init\_\_(self,seq\_len:int,max\_digits:int,n\_sequences:int):

#

41self.n\_sequences=n\_sequences42self.max\_digits=max\_digits43self.seq\_len=seq\_len

#

නූලටටෝකන් හැඳුනුම්පත

45self.itos=list(string.digits+'xe =\n?+;')

#

අක්ෂරටෝකන් හැඳුනුම්පතට

47self.stoi={c:ifori,cinenumerate(self.itos)}

#

ඉලක්කම් n_digit ගණන සහිත පූර්ණ සංඛ්යාවක් ජනනය කරයි

49@staticmethod50defmake\_int(n\_digits:int):

#

54res=055foriinrange(n\_digits):56d=random.randrange(1,11)ifi==0elserandom.randrange(0,11)57res=res\*10+d5859returnres

#

සඳහාක්රියාකාරිත්වය ජනනය කරයි x + y . උදාහරණයක් ලෙස 11+29 එය ජනනය කිරීම සඳහා 1e0+9e0+0e0=10e0 1e0+2e0+1e0=4e0 .

61@staticmethod62defget\_add\_explanation(x:int,y:int):

#

69carry=070e=071explanation=[]72whilex\>0ory\>0orcarry\>0:73rx,ry=x%10,y%1074total=rx+ry+carry75explanation.append(f"{rx}e{e}+{ry}e{e}+{carry}e{e}=={total}e{e}")76x,y,carry=x//10,y//10,total//1077e+=17879return' '.join(explanation)

#

පූර්වපැහැදිලි කිරීමක් සමඟ ගැටළුවක් ඇති කරන්න හෝ නැත

workingsහා පිළිතුරු සමග අංක ගණිතමය එකතු කිරීමේ ගැටලුවක් නිර්මාණය කරයි.

82defmake\_add\_problem(self):

#

86x=self.make\_int(n\_digits=random.randrange(1,self.max\_digits+1))87y=self.make\_int(n\_digits=random.randrange(1,self.max\_digits+1))8889explanation=self.get\_add\_explanation(x,y)90returnf"x={x}+{y}; {explanation} x=={x+y}\n"

#

අංකගණිතමය ගැටළුව සහ පිළිතුරු ලබා ගන්න. මෙය ඇගයීම සඳහා භාවිතා වේ.

92defget\_qa(self):

#

96x=self.make\_int(n\_digits=random.randrange(1,self.max\_digits+1))97y=self.make\_int(n\_digits=random.randrange(1,self.max\_digits+1))9899returnf'x={x}+{y};',f'{x+y}'

#

බහුගැටළු ජනනය කර ඒවා අනුපිළිවෙලකට ඇසුරුම් කරන්න.

101defget\_packed\_math\_input(self):

#

105s\_enc=[]106whilelen(s\_enc)\<=self.seq\_len:107s\_part=self.make\_add\_problem()108s\_part\_enc=self.encode('?'+s\_part)109s\_enc=s\_enc+s\_part\_enc110returns\_enc

#

දීඇති නූලක් කේතනය කරන්න

112defencode(self,s:str):

#

116return[self.stoi[c]forcins]

#

ටෝකන්හැඳුනුම්පත් ලැයිස්තුවක් විකේතනය කරන්න

118defdecode(self,arr:List[int]):

#

122return''.join([self.itos[c]forcinarr])

#

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

124def\_\_getitem\_\_(self,idx:int):

#

128s=torch.tensor(self.get\_packed\_math\_input())129returns[:self.seq\_len],s[1:self.seq\_len+1]

#

එපෝච්එකකට අනුපිළිවෙලවල් ගණන

131def\_\_len\_\_(self):

#

135returnself.n\_sequences

#

අංකගණිත කාර්ය අත්හදා බැලීමේ වින්යාසයන්

138classArithmeticAutoregression(NLPAutoRegressionConfigs):

#

ක්රියාකාරීපූර්ණ සංඛ්යාවකට උපරිම ඉලක්කම් ගණන

143max\_digits:int=4

#

එපෝච්එකකට පුහුණු අනුපිළිවෙල ගණන

145train\_sequences\_per\_epoch:int=2\*\*12

#

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

147train\_loader:DataLoader='arithmetic\_train\_loader'

#

ඇගයීමේගැටළු ගණන

149n\_tests:int=64

#

වලංගුදත්ත කට්ටලයක් අවශ්ය නොවේ

151validator=None

#

එපෝච්එකකට ඇගයීම් ක්රියාත්මක කිරීමට වාර ගණන

153inner\_iterations=4

#

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

155n\_tokens=len(ArithmeticDataset(1,1,1).itos)

#

ඇගයීම

ගැටළුසමූහයක් මත ආකෘතිය ඇගයීම සඳහා අපි නියැදි ශ්රිතය භාවිතා කරමු

[email protected]\_grad()158defsample(self):

#

පළමුඑපෝච් එකේ මඟ හරින්න

166ifself.training\_loop.idx\<1:167return

#

ගැටළුජනනය කිරීම සඳහා දත්ත කට්ටලයක් සාදන්න

170dataset=ArithmeticDataset(self.seq\_len,self.max\_digits,1)

#

ගැටළුසහ පිළිතුරු සමූහයක් ලබා ගන්න

172qa=[dataset.get\_qa()for\_inrange(self.n\_tests)]

#

ගැටළුපමණක් එකතු කරන්න

174questions=[p[0]forpinqa]

#

ආරම්භකටෝකනය පමණක් සහිත ටෙන්සරයක් සාදන්න

177data=torch.tensor([[dataset.stoi[p[0]]forpinquestions]])

#

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

179data=data.to(self.device)

#

සම්පූර්ණකර ඇති අනුක්රම ගණන

182finished=torch.zeros((len(questions),)).bool().to(self.device)

#

නවරේඛා අක්ෂරයෙහි ටෝකන් හැඳුනුම්පත - මෙය පිළිතුරේ අවසානය සලකුණු කරයි

184new\_line=dataset.stoi['\n']

#

නියැදිප්රති. ල

187results=[p[0]forpinquestions]

#

අනුක්රමිකදිග දක්වා නියැදිය

190foriinmonit.iterate('Sample',self.seq\_len-1):

#

සියලුමඅනුක්රමයන් සම්පූර්ණ කර ඇත්නම් අපි මෙය මඟ හරිමු

192iffinished.sum()==len(finished):193continue

#

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

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

#

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

198output=output[-1].argmax(dim=-1)

#

කුමනඅනුපිළිවෙලවල් අවසන් කර ඇත්දැයි සොයා ගන්න

201finished=finished|(output==new\_line)

#

සියල්ලඅවසන් වී ඇත්නම් මඟ හරින්න

203iffinished.sum()==len(finished):204continue

#

ප්රශ්නයසමඟ අභිබවා යන්න

207forj,pinenumerate(questions):208iflen(p)\>i+1:209output[j]=dataset.stoi[p[i+1]]

#

ආදානයටඊළඟ ටෝකනය එක් කරන්න

212data=torch.cat([data,output[None,:]],dim=0)

#

නියැදිප්රතිඵල ලබා ගන්න

215forj,cinenumerate(output):216results[j]+=dataset.itos[c]

#

ප්රතිඵලවලපිළිතුරෙන් පසු සියල්ල ඉවතලන්න

219results=[r.split('\n')[0]forrinresults]

#

නියැදියක්ලොග් කරන්න

222res\_sample=results[0].split(';')223logger.log([(res\_sample[0],Text.key),(';',Text.subtle),(';'.join(res\_sample[1:]),Text.none)])

#

පිළිතුරුලබා ගන්න

226results=[r.split('x==')[-1]forrinresults]

#

නිවැරදිපිළිතුරු ගණන ගණන් කරන්න

229correct=0230forr,\_qainzip(results,qa):231ifr==\_qa[1]:232correct+=1

#

ලකුණුලොග් කරන්න

235tracker.save('score',correct/len(results))

#

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

238@option(ArithmeticAutoregression.train\_loader)239defarithmetic\_train\_loader(c:ArithmeticAutoregression):

#

243returnDataLoader(ArithmeticDataset(c.seq\_len,c.max\_digits,c.train\_sequences\_per\_epoch),244batch\_size=c.batch\_size,245collate\_fn=transpose\_batch,246num\_workers=4)

#

ජනනයකරන ලද ගැටළු පරීක්ෂා කිරීම සඳහා කේතය

249def\_test():

#

253dataset=ArithmeticDataset(256,8,10)254255print(dataset.decode(dataset.get\_packed\_math\_input()))

#

259if\_\_name\_\_=='\_\_main\_\_':260\_test()

Trending Research Paperslabml.ai