Back to Annotated Deep Learning Paper Implementations

k-ළඟමඅසල්වැසියාගේ භාෂා ආකෘතිය තක්සේරු කරන්න

docs/si/transformers/knn/eval_knn.html

latest8.6 KB
Original Source

hometransformersknn

View code on Github

#

k-ළඟමඅසල්වැසියාගේ භාෂා ආකෘතිය තක්සේරු කරන්න

11fromtypingimportOptional,List1213importfaiss14importnumpyasnp15importtorch1617fromlabmlimportmonit,lab18fromlabml.loggerimportinspect19fromlabml\_nn.transformers.knn.train\_modelimportConfigs

#

k-NN ලබා ගැනීමට p(wt​,ct​)

මෙන්නඅපි විමසුම් f(ct​) ලෙස, යතුරු f(ci​) ලෙස සහ අගයන් wi​ ලෙස සඳහන් කරමු.

22defknn(queries:torch.Tensor,index:faiss.IndexFlatL2,keys\_store:np.ndarray,vals\_store:np.ndarray,n\_tokens:int):

#

ප්රති. ල නැවත හැඩගැස්වීම සඳහා විමසුම් වල හැඩය සුරකින්න

31queries\_shape=queries.shape

#

විමසුම්වල batch සහ sequence මානයන් සමතලා කරන්න

34queries=queries.view(-1,queries\_shape[-1])

#

f(ct​) ඒ අතර ළඟම අසල්වැසියන් 10 දෙනෙකු සොයා ගන්න f(ci​). distance FAISS විසින් ලබා දී ඇති දුර ප්රමාණය i වන අතර idx , එහි දර්ශකය keys_store වේ.

38distance,idx=index.search(queries.numpy(),10)

#

ලබාගන්න f(ci​)

41keys\_found=queries.new\_tensor(keys\_store[idx])

#

ලබාගන්න wi​

43vals\_found=torch.tensor(vals\_store[idx]).squeeze(-1)

#

සාමාන්යකරණයකරන ලද දෛශික අතර කොසයින් සමානතාවය ගණනය කිරීමට අපි යන්නෙමු

#

සාමාන්‍යකරන්න f(ci​)

48keys\_found\_n=keys\_found/torch.sqrt((keys\_found\*\*2).sum(-1,keepdims=True)+1e-10)

#

සාමාන්‍යකරන්න f(ct​)

50queries\_n=queries/torch.sqrt((queries\*\*2).sum(-1,keepdims=True)+1e-10)

#

තිත්නිෂ්පාදන, හෝ කොසයින් සමානකම ලබා ගන්න

53dot\_prod=(keys\_found\_n\*queries\_n.unsqueeze(1)).sum(-1)

#

ටෝකන්-නැණවත්පිවිසුම්

56logits\_token=dot\_prod.new\_zeros(queries.shape[0],n\_tokens)

#

ආසන්නතමඅසල්වැසියන් මත පදනම්ව ටෝකන් ලොග්ස් විසිරීම සහ රැස් කිරීම

58\_=logits\_token.scatter\_(dim=1,index=vals\_found,src=dot\_prod,reduce='add')

#

පිවිසුම්නැවත සකස් කරන්න

61logits\_token=logits\_token.reshape(queries\_shape[0],queries\_shape[1],-1)6263returnlogits\_token

#

වලංගුකිරීමේ අලාභය ගණනය කරන්න

අපි k-NN අනාවැකිය හා ට්රාන්ස්ෆෝමර් අනාවැකිය මත ඒකාබද්ධ වලංගු අහිමි ගණනය. k-NN ආකෘතියට ලබා දී ඇති බර ලබා දෙනු ලැබේ knn_weight . එය පඩි ලැයිස්තුවක් වන අතර අපි එක් එක් සඳහා වලංගු කිරීමේ අලාභය ගණනය කරමු.

66defvalidation\_loss(knn\_weights:List[float],last\_n:Optional[int],conf:Configs,index:faiss.IndexFlatL2,67keys\_store:np.ndarray,vals\_store:np.ndarray):

#

එක්එක් සඳහා පාඩු ලැයිස්තුව knn_weights

77losses=[[]for\_inknn\_weights]

#

එක්එක් කාණ්ඩයේ සාම්පල ගණන

79n\_samples=[]80withtorch.no\_grad():

#

වලංගුදත්ත හරහා නැවත

82fori,batchinmonit.enum("Validation",conf.validator.data\_loader,is\_children\_silent=True):

#

දත්තසහ ඉලක්ක ලේබල ලබා ගන්න

84data,target=batch[0].to(conf.device),batch[1].to(conf.device)

#

ආකෘතියධාවනය කර අනාවැකි ලබා ගන්න p(wt​,ct​)

86res=conf.model(data)

#

k-NN අනාවැකි ලබා ගන්න

88res\_knn=knn(conf.model.ff\_input.cpu(),index,keys\_store,vals\_store,conf.n\_tokens)89res\_knn=res\_knn.to(conf.device)

#

මෙය last_n ටෝකන සඳහා වන අලාභය පමණක් ගණනය කිරීමයි. මෙය වැදගත් වන්නේ ට්රාන්ස්ෆෝමර් ආකෘතියේ පළමු අනාවැකි (අනුක්රමය ඔස්සේ) දෙස බැලීමට අතීත ටෝකන ඉතා අල්පය.

94iflast\_n:95res=res[-last\_n:]96res\_knn=res\_knn[-last\_n:]97target=target[-last\_n:]

#

සාම්පලගණන

100n\_s=res.shape[0]\*data.shape[1]101n\_samples.append(n\_s)

#

එක්එක් සඳහා ලකුණු ගණනය කරන්න knn_weights .

104fori,cinenumerate(knn\_weights):

#

අලාභයගණනය කරන්න

106loss=conf.loss\_func(res\_knn\*c+(1-c)\*res,target)107losses[i].append(loss\*n\_s)108109returnlosses,n\_samples

#

දර්ශකයපූරණය කරන්න

112defload\_index(conf:Configs,n\_probe:int=8):

#

මානයන් f(ci​)

117d\_model=conf.transformer.d\_model

#

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

119data\_loader=conf.trainer.data\_loader

#

සන්දර්භයන්ගණන; එනම් පුහුණු දත්තවල ටෝකන ගණන us ණ එකක්. (f(ci​),wi​)

සඳහා i∈[2,T]

122n\_keys=data\_loader.data.shape[0]\*data\_loader.data.shape[1]-1

#

FAISSදර්ශකය පැටවීම

125withmonit.section('Load index'):126index=faiss.read\_index(str(lab.get\_data\_path()/'faiss.index'))

#

පරීක්ෂණසඳහා සෛල ගණන සකසන්න

128index.nprobe=n\_probe

#

මතකයසිතියම් ගත කළ අංකුර අරා පටවන්න

131keys\_store=np.memmap(str(lab.get\_data\_path()/'keys.npy'),dtype=np.float32,mode='r',shape=(n\_keys,d\_model))132vals\_store=np.memmap(str(lab.get\_data\_path()/'vals.npy'),dtype=np.int,mode='r',shape=(n\_keys,1))133134returnindex,keys\_store,vals\_store

#

137defmain():138fromlabml\_nn.transformers.knn.build\_indeximportload\_experiment

#

අත්හදාබැලීම පූරණය කරන්න. ආකෘතිය පුහුණුකිරීමෙන් ඔබ uuid ධාවනය සමඟ uuid ධාවනය කරන්න.

141conf=load\_experiment('4984b85c20bf11eb877a69c1a03717cd')

#

ඇගයීම්ප්රකාරයට ආකෘතිය සකසන්න

143conf.model.eval()

#

පැටවුම්දර්ශකය

146index,keys\_store,vals\_store=load\_index(conf)

#

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

149knn\_weights=[i/20foriinrange(10)]

#

වලංගුකිරීමේ අලාභය තක්සේරු කරන්න

151losses,n\_samples=validation\_loss(knn\_weights,None,conf,index,keys\_store,vals\_store)

#

එක්එක් සඳහා පාඩු ප්රතිදානය knn_weights කරන්න.

153inspect({c:np.sum(losses[i])/np.sum(n\_samples)fori,cinenumerate(knn\_weights)})154155156if\_\_name\_\_=='\_\_main\_\_':157main()

Trending Research Paperslabml.ai