Back to Annotated Deep Learning Paper Implementations

කෝරාදත්ත කට්ටලය මත ප්රස්තාරය අවධානය ජාලය (GAT) පුහුණු

docs/si/graphs/gat/experiment.html

latest16.1 KB
Original Source

homegraphsgat

View code on Github

#

කෝරාදත්ත කට්ටලය මත ප්රස්තාරය අවධානය ජාලය (GAT) පුහුණු

13fromtypingimportDict1415importnumpyasnp16importtorch17fromtorchimportnn1819fromlabmlimportlab,monit,tracker,experiment20fromlabml.configsimportBaseConfigs,option,calculate21fromlabml.utilsimportdownload22fromlabml\_helpers.deviceimportDeviceConfigs23fromlabml\_helpers.moduleimportModule24fromlabml\_nn.graphs.gatimportGraphAttentionLayer25fromlabml\_nn.optimizers.configsimportOptimizerConfigs

#

කෝරා දත්ත කට්ටලය

කෝරා දත්ත කට්ටලය පර්යේෂණ පත්රිකා දත්ත කට්ටලයකි. සෑම කඩදාසි සඳහාම අපට ද්විමය අංග දෛශිකයක් ලබා දී ඇති අතර එය වචන ඇති බව පෙන්නුම් කරයි. සෑම කඩදාසියක්ම පන්ති 7 න් එකකට වර්ගීකරණය කර ඇත. දත්ත කට්ටලයට උපුටා දැක්වීමේ ජාලය ද ඇත.

පත්රිකා යනු ප්රස්ථාරයේ නෝඩ් වන අතර දාර උපුටා දැක්වීම් වේ.

කර්තව්යය වන්නේ නෝඩ් 7 පන්ති වලට විශේෂාංග දෛශික සහ උපුටා දැක්වීමේ ජාලය ආදානය ලෙස වර්ගීකරණය කිරීමයි.

28classCoraDataset:

#

එක්එක් නෝඩය සඳහා ලේබල

43labels:torch.Tensor

#

පන්තිනාම කට්ටලයක් සහ අද්විතීය පූර්ණ සංඛ්යා දර්ශකය

45classes:Dict[str,int]

#

සියලුමනෝඩ් සඳහා විශේෂාංග වාහකයන්

47features:torch.Tensor

#

දාරයේතොරතුරු සමඟ සම්බන්ධ වීමේ අනුකෘතිය. adj_mat[i][j] සිට දාරයක් තිබේ True``i නම් j .

50adj\_mat:torch.Tensor

#

දත්තකට්ටලය බාගන්න

52@staticmethod53def\_download():

#

57ifnot(lab.get\_data\_path()/'cora').exists():58download.download\_file('https://linqs-data.soe.ucsc.edu/public/lbc/cora.tgz',59lab.get\_data\_path()/'cora.tgz')60download.extract\_tar(lab.get\_data\_path()/'cora.tgz',lab.get\_data\_path())

#

දත්තකට්ටලය පූරණය කරන්න

62def\_\_init\_\_(self,include\_edges:bool=True):

#

දාරඇතුළත් කළ යුතුද යන්න. මෙම අපි උපුටා දැක්වීමේ ජාලය නොසලකා නම් කොපමණ නිරවද්යතාව අහිමි වේ පරීක්ෂා වේ.

69self.include\_edges=include\_edges

#

බාගතදත්ත කට්ටලය

72self.\_download()

#

කඩදාසිහැඳුනුම්පත්, විශේෂාංග දෛශික සහ ලේබල කියවන්න

75withmonit.section('Read content file'):76content=np.genfromtxt(str(lab.get\_data\_path()/'cora/cora.content'),dtype=np.dtype(str))

#

උපුටාදැක්වීම් පූරණය කරන්න, එය නිඛිල යුගල ලැයිස්තුවකි.

78withmonit.section('Read citations file'):79citations=np.genfromtxt(str(lab.get\_data\_path()/'cora/cora.cites'),dtype=np.int32)

#

විශේෂාංගදෛශික ලබා ගන්න

82features=torch.tensor(np.array(content[:,1:-1],dtype=np.float32))

#

විශේෂාංගදෛශික සාමාන්යකරණය කරන්න

84self.features=features/features.sum(dim=1,keepdim=True)

#

පන්තිනාම ලබා ගන්න සහ ඒ එක් එක් සඳහා අද්විතීය පූර්ණ සංඛ්යාවක් පවරන්න

87self.classes={s:ifori,sinenumerate(set(content[:,-1]))}

#

එමලේබල් එම නිඛිල ලෙස ලබා ගන්න

89self.labels=torch.tensor([self.classes[i]foriincontent[:,-1]],dtype=torch.long)

#

කඩදාසිහැඳුනුම්පත් ලබා ගන්න

92paper\_ids=np.array(content[:,0],dtype=np.int32)

#

කඩදාසිහැඳුනුම්පතේ සිට දර්ශකය දක්වා සිතියම

94ids\_to\_idx={id\_:ifori,id\_inenumerate(paper\_ids)}

#

හිස්adjacency න්යාසය - අනන්යතා අනුකෘතියක්

97self.adj\_mat=torch.eye(len(self.labels),dtype=torch.bool)

#

මෙමadjacency න්යාසය තුළ උපුටා දැක්වීම් සලකුණු

100ifself.include\_edges:101foreincitations:

#

කඩදාසිදර්ශක යුගලය

103e1,e2=ids\_to\_idx[e[0]],ids\_to\_idx[e[1]]

#

අපිසමමිතික ප්රස්තාරය ඉදි, එහිදී කඩදාසි i යොමු කඩදාසි නම් j අපි සිට i adge තැනින් j මෙන්ම සිට අද්දර j කිරීමට i.

107self.adj\_mat[e1][e2]=True108self.adj\_mat[e2][e1]=True

#

ප්රස්තාරයඅවධානය ජාලය (GAT)

මෙමප්රස්තාර අවධානය ජාලය ප්රස්තාරය අවධානය ස්ථරදෙකක් ඇත.

111classGAT(Module):

#

  • in_features node එකක් මතම ඊට අදාල විශේෂාංග සංඛ්යාව වේ
  • n_hidden පළමු ප්රස්තාරය අවධානය ස්ථරය ලක්ෂණ සංඛ්යාව වේ
  • n_classes යනු පන්ති ගණන
  • n_heads ප්රස්ථාර අවධානය ස්ථර වල හිස් ගණන
  • dropout අතහැර දැමීමේ සම්භාවිතාව
118def\_\_init\_\_(self,in\_features:int,n\_hidden:int,n\_classes:int,n\_heads:int,dropout:float):

#

126super().\_\_init\_\_()

#

අපිහිස් concatenate එහිදී පළමු ප්රස්තාරය අවධානය ස්ථරය

129self.layer1=GraphAttentionLayer(in\_features,n\_hidden,n\_heads,is\_concat=True,dropout=dropout)

#

පළමුප්රස්ථාර අවධානය ස්ථරයෙන් පසු සක්රිය කිරීමේ කාර්යය

131self.activation=nn.ELU()

#

අපිහිස් සාමාන්යය එහිදී අවසන් ප්රස්තාරය අවධානය ස්ථරය

133self.output=GraphAttentionLayer(n\_hidden,n\_classes,1,is\_concat=False,dropout=dropout)

#

හැලීම

135self.dropout=nn.Dropout(dropout)

#

  • x හැඩයේ ලක්ෂණ දෛශික වේ [n_nodes, in_features]
  • adj_mat යනු ආකෘතියේ අනුකෘතියේ අනුකෘතිය [n_nodes, n_nodes, n_heads] හෝ [n_nodes, n_nodes, 1]
137defforward(self,x:torch.Tensor,adj\_mat:torch.Tensor):

#

ආදානයටඅතහැර දැමීම යොදන්න

144x=self.dropout(x)

#

පළමුප්රස්ථාර අවධානය ස්ථරය

146x=self.layer1(x,adj\_mat)

#

සක්රියකිරීමේ කාර්යය

148x=self.activation(x)

#

හැලීම

150x=self.dropout(x)

#

පිවිසුම්සඳහා ප්රතිදාන ස්ථරය (සක්රිය කිරීමකින් තොරව)

152returnself.output(x,adj\_mat)

#

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

155defaccuracy(output:torch.Tensor,labels:torch.Tensor):

#

159returnoutput.argmax(dim=-1).eq(labels).sum().item()/len(labels)

#

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

162classConfigs(BaseConfigs):

#

ආකෘතිය

168model:GAT

#

පුහුණුකිරීමට නෝඩ් ගණන

170training\_samples:int=500

#

ආදානයේනෝඩයකට විශේෂාංග ගණන

172in\_features:int

#

පළමුප්රස්තාරයේ අවධානය ස්ථරයේ විශේෂාංග ගණන

174n\_hidden:int=64

#

හිස්ගණන

176n\_heads:int=8

#

වර්ගීකරණයසඳහා පන්ති ගණන

178n\_classes:int

#

අතහැරදැමීමේ සම්භාවිතාව

180dropout:float=0.6

#

උපුටාදැක්වීමේ ජාලය ඇතුළත් කළ යුතුද යන්න

182include\_edges:bool=True

#

දත්තකට්ටලය

184dataset:CoraDataset

#

පුහුණුපුනරාවර්තන ගණන

186epochs:int=1\_000

#

පාඩුශ්රිතය

188loss\_func=nn.CrossEntropyLoss()

#

පුහුණුකිරීමට උපාංගය

මෙයඋපාංගය සඳහා වින්යාස නිර්මාණය කරයි, එවිට අපට වින්යාස අගයක් පසු කිරීමෙන් උපාංගය වෙනස් කළ හැකිය

193device:torch.device=DeviceConfigs()

#

ප්රශස්තකරණය

195optimizer:torch.optim.Adam

#

පුහුණුලූපය

දත්තසමුදාය කුඩා බැවින් අපි පූර්ණ කණ්ඩායම් පුහුණුව කරන්නෙමු. අප නියැදිය හා පුහුණු කිරීමට නම්, එක් එක් පුහුණු පියවර සඳහා නෝඩ් කට්ටලයක් සාම්පල ලබා ගත යුතු අතර එම තෝරාගත් නෝඩ් හරහා විහිදෙන දාර සමඟ.

197defrun(self):

#

විශේෂාංගදෛශික උපාංගයට ගෙනයන්න

207features=self.dataset.features.to(self.device)

#

ලේබලඋපාංගයට ගෙනයන්න

209labels=self.dataset.labels.to(self.device)

#

උපකරණයටඅනුකෘතිය ගෙන යන්න

211edges\_adj=self.dataset.adj\_mat.to(self.device)

#

හිස්සඳහා හිස් තෙවන මානයක් එක් කරන්න

213edges\_adj=edges\_adj.unsqueeze(-1)

#

අහඹුදර්ශක

216idx\_rand=torch.randperm(len(labels))

#

පුහුණුවසඳහා නෝඩ්

218idx\_train=idx\_rand[:self.training\_samples]

#

වලංගුකිරීම සඳහා නෝඩ්

220idx\_valid=idx\_rand[self.training\_samples:]

#

පුහුණුලූපය

223forepochinmonit.loop(self.epochs):

#

පුහුණුමාදිලියට ආකෘතිය සකසන්න

225self.model.train()

#

සියලුමඅනුක්රමික ශුන්ය කරන්න

227self.optimizer.zero\_grad()

#

ආකෘතියතක්සේරු කරන්න

229output=self.model(features,edges\_adj)

#

පුහුණුනෝඩ් සඳහා අලාභය ලබා ගන්න

231loss=self.loss\_func(output[idx\_train],labels[idx\_train])

#

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

233loss.backward()

#

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

235self.optimizer.step()

#

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

237tracker.add('loss.train',loss)

#

නිරවද්යතාවයලොග් කරන්න

239tracker.add('accuracy.train',accuracy(output[idx\_train],labels[idx\_train]))

#

වලංගුකිරීම සඳහා ඇගයීමේ ප්රකාරයට සකසන්න

242self.model.eval()

#

අනුක්රමිකගණනය කිරීමට අවශ්ය නැත

245withtorch.no\_grad():

#

ආකෘතියනැවත ඇගයීමට ලක් කරන්න

247output=self.model(features,edges\_adj)

#

වලංගුකිරීමේ නෝඩ් සඳහා අලාභය ගණනය කරන්න

249loss=self.loss\_func(output[idx\_valid],labels[idx\_valid])

#

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

251tracker.add('loss.valid',loss)

#

නිරවද්යතාවයලොග් කරන්න

253tracker.add('accuracy.valid',accuracy(output[idx\_valid],labels[idx\_valid]))

#

ලොග්සුරකින්න

256tracker.save()

#

කෝරාදත්ත කට්ටලය සාදන්න

259@option(Configs.dataset)260defcora\_dataset(c:Configs):

#

264returnCoraDataset(c.include\_edges)

#

පන්තිගණන ලබා ගන්න

268calculate(Configs.n\_classes,lambdac:len(c.dataset.classes))

#

ආදානයේවිශේෂාංග ගණන

270calculate(Configs.in\_features,lambdac:c.dataset.features.shape[1])

#

GATආකෘතිය සාදන්න

273@option(Configs.model)274defgat\_model(c:Configs):

#

278returnGAT(c.in\_features,c.n\_hidden,c.n\_classes,c.n\_heads,c.dropout).to(c.device)

#

වින්යාසගතකළ හැකි ප්රශස්තකරණය

281@option(Configs.optimizer)282def\_optimizer(c:Configs):

#

286opt\_conf=OptimizerConfigs()287opt\_conf.parameters=c.model.parameters()288returnopt\_conf

#

291defmain():

#

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

293conf=Configs()

#

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

295experiment.create(name='gat')

#

වින්යාසයන්ගණනය කරන්න.

297experiment.configs(conf,{

#

ආදම්ප්රශස්තකරණය

299'optimizer.optimizer':'Adam',300'optimizer.learning\_rate':5e-3,301'optimizer.weight\_decay':5e-4,302})

#

අත්හදාබැලීම ආරම්භ කර නරඹන්න

305withexperiment.start():

#

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

307conf.run()

#

311if\_\_name\_\_=='\_\_main\_\_':312main()

Trending Research Paperslabml.ai