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

View Run

13import torch
14from torch import nn
15
16from labml import experiment
17from labml.configs import option
18from labml_helpers.module import Module
19from labml_nn.graphs.gat.experiment import Configs as GATConfigs
20from labml_nn.graphs.gatv2 import GraphAttentionV2Layer

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

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

23class GATv2(Module):
  • in_features node එකක් මතම ඊට අදාල විශේෂාංග සංඛ්යාව වේ
  • n_hidden පළමු ප්රස්තාරය අවධානය ස්ථරය ලක්ෂණ සංඛ්යාව වේ
  • n_classes යනු පන්ති ගණන
  • n_heads ප්රස්ථාර අවධානය ස්ථර වල හිස් ගණන
  • dropout අතහැර දැමීමේ සම්භාවිතාව
  • share_weights සත්ය ලෙස සකසා ඇත්නම්, සෑම දාරයකම ප්රභවයට සහ ඉලක්කගත නෝඩයට එකම අනුකෘතිය යොදනු ලැබේ
30    def __init__(self, in_features: int, n_hidden: int, n_classes: int, n_heads: int, dropout: float,
31                 share_weights: bool = True):
40        super().__init__()

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

43        self.layer1 = GraphAttentionV2Layer(in_features, n_hidden, n_heads,
44                                            is_concat=True, dropout=dropout, share_weights=share_weights)

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

46        self.activation = nn.ELU()

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

48        self.output = GraphAttentionV2Layer(n_hidden, n_classes, 1,
49                                            is_concat=False, dropout=dropout, share_weights=share_weights)

හැලීම

51        self.dropout = nn.Dropout(dropout)
  • x හැඩයේ ලක්ෂණ දෛශික වේ [n_nodes, in_features]
  • adj_mat යනු ආකෘතියේ අනුකෘතියේ අනුකෘතිය [n_nodes, n_nodes, n_heads] හෝ [n_nodes, n_nodes, 1]
53    def forward(self, x: torch.Tensor, adj_mat: torch.Tensor):

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

60        x = self.dropout(x)

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

62        x = self.layer1(x, adj_mat)

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

64        x = self.activation(x)

හැලීම

66        x = self.dropout(x)

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

68        return self.output(x, adj_mat)

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

අත්හදාබැලීම GAT අත්හදා බැලීමට සමාන වන නමුත් GATV2 ආකෘතිය සමඟ අපි එකම වින්යාස දිගු කර ආකෘතිය වෙනස් කරමු.

71class Configs(GATConfigs):

දාරවලප්රභවය සහ ඉලක්කගත නෝඩ් සඳහා බර බෙදා ගත යුතුද යන්න

80    share_weights: bool = False

ආකෘතියසකසන්න

82    model: GATv2 = 'gat_v2_model'

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

85@option(Configs.model)
86def gat_v2_model(c: Configs):
90    return GATv2(c.in_features, c.n_hidden, c.n_classes, c.n_heads, c.dropout, c.share_weights).to(c.device)
93def main():

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

95    conf = Configs()

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

97    experiment.create(name='gatv2')

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

99    experiment.configs(conf, {

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

101        'optimizer.optimizer': 'Adam',
102        'optimizer.learning_rate': 5e-3,
103        'optimizer.weight_decay': 5e-4,
104
105        'dropout': 0.7,
106    })

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

109    with experiment.start():

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

111        conf.run()

115if __name__ == '__main__':
116    main()