| 31 | } |
| 32 | |
| 33 | GraphNode* DenseSageEncoder(const std::string& prefix, GraphNode* hidden, |
| 34 | GraphNode* self_block, GraphNode* neigh_block, |
| 35 | int dim, bool is_act, double alpha) { |
| 36 | // self emb |
| 37 | auto* self_embed = HiddenLookup("", self_block, hidden); |
| 38 | // neighbor mean emb |
| 39 | auto* neigh_embed = MeanAggregator("", neigh_block, hidden); |
| 40 | |
| 41 | auto* self_fc = |
| 42 | deepx_core::FullyConnect(prefix + "_self_fc", self_embed, dim); |
| 43 | auto* neigh_fc = |
| 44 | deepx_core::FullyConnect(prefix + "_neigh_fc", neigh_embed, dim); |
| 45 | |
| 46 | auto* sage_embed = deepx_core::Concat("", {self_fc, neigh_fc}); |
| 47 | if (is_act) { |
| 48 | sage_embed = deepx_core::LeakyRelu("", sage_embed, alpha); |
| 49 | } |
| 50 | return sage_embed; |
| 51 | } |
| 52 | |
| 53 | GraphNode* GraphSageEncoder(const std::string& encoder_name, |
| 54 | const std::vector<GroupConfigItem3>& items, |
no test coverage detected