Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions openhgnn/config.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1559,3 +1559,24 @@ mini_batch_flag = True
emb_dim=20
hid_dim=64
batch_size=128

[HERO]
lr = 0.0025
patience = 60
nb_epochs = 500
hid_units = 256
hid_units2 = 128
out_ft = 256
g_dim = 64
g_equidim = 256
p_equidim = 256
edge_rate = 0.9
alpha = 100
beta = 500
gamma = 10
eta = 1
lambbda = 1
dataset = 'acm4GTN'
gpu = 1
mode = 0
save_dir = './saved_models'
55 changes: 55 additions & 0 deletions openhgnn/layers/Fully_connect.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np

class FullyConnect(nn.Module):
def __init__(self, in_ft, out_ft, act=nn.Identity(), drop_prob=0.0, isBias=False):
super().__init__()
self.fc = nn.Linear(in_ft, out_ft, bias=False)
if self.fc.bias is not None:
self.fc.bias.data.fill_(0.0)

if isBias:
self.bias = nn.Parameter(torch.empty(out_ft))
self.bias.data.fill_(0.0)
else:
self.register_parameter('bias', None)

self.act = act
self.drop_prob = drop_prob
self.isBias = isBias

for m in self.modules():
self.weights_init(m)

def weights_init(self, m):
if isinstance(m, nn.Linear):
torch.nn.init.xavier_uniform_(m.weight.data)
if m.bias is not None:
m.bias.data.fill_(0.0)


def forward(self, emb):
# emb (batch_size, ft)
emb = F.dropout(emb, self.drop_prob, training=self.training)
e = self.fc(emb) # (batch_size, d)
if self.isBias:
e += self.bias
return self.act(e)


class FullyConnect2(nn.Module):
def __init__(self, in_ft, hid_unit, out_ft, drop_prob=0.0, isBias=False):
super().__init__()
self.fc = FullyConnect(in_ft, hid_unit, act=nn.PReLU(), drop_prob=drop_prob,isBias=isBias)
self.fc2 = FullyConnect(hid_unit, out_ft, act=nn.PReLU(), drop_prob=drop_prob,isBias=isBias)
self.dense = FullyConnect(out_ft, 1, act=nn.Identity(), drop_prob=drop_prob,isBias=isBias)


def forward(self, emb):
# emb (batch_size, ft)
e = self.fc(emb) # (batch_size, d)
e2 = self.fc2(e)
out = self.dense(e2)
return out
52 changes: 52 additions & 0 deletions openhgnn/layers/Linear_layer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np

class Linear_layer(nn.Module):
def __init__(self, in_ft, out_ft, act=nn.PReLU(), drop_prob=0.0, isBias=False):
super().__init__()
self.linear = nn.Linear(in_ft, out_ft, bias=False)

# if isBias:
# self.bias = nn.Parameter(torch.empty(out_ft))
# self.bias.data.fill_(0.0)
# else:
# self.register_parameter('bias', None)

self.act = act
self.isBias = isBias
self.drop_prob = drop_prob

for m in self.modules():
self.weights_init(m)

def weights_init(self, m):
if isinstance(m, nn.Linear):
torch.nn.init.xavier_uniform_(m.weight.data)
if m.bias is not None:
m.bias.data.fill_(0.0)

def forward(self, emb):
# emb (batch_size, ft)
# emb = F.dropout(emb, self.drop_prob, training=self.training)
e = self.linear(emb) # (batch_size, d)
# if self.isBias:
# e += self.bias
e_out = self.act(e)
return e_out


class GNN(nn.Module):
def __init__(self, nb_rel, in_ft, out_ft, act=nn.PReLU(), drop_prob=0.5, isBias=False):
super().__init__()
self.encoder = nn.ModuleList()
for i in range(nb_rel):
self.encoder.append(GCN(in_ft, out_ft, act=act, isBias=isBias))

def forward(self, embs):
outs = []
for emb in embs: # emb (batch_size, ft)
outs.append(self.encoder(emb))
outs = torch.stack(outs, 0) # outs (nb_rel, batch_size, ft)
return outs
7 changes: 5 additions & 2 deletions openhgnn/layers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
from .AdapropT import *
from .AdapropI import *
from .rgcn_layer import *

from .Fully_connect import *
from .Linear_layer import *
__all__ = [
'HeteroEmbedLayer',
'GeneralLinear',
Expand All @@ -24,7 +25,9 @@
'AttConv',
'LSTMConv',
'AdapropT',
'AdapropI'
'AdapropI',
'Fully_connect',
'Linear_layer',
]

classes = __all__
Loading