def __init__(self, classes=65): super(SuperEvent, self).__init__() self.classes = classes self.dropout = nn.Dropout(0.7) self.add_module('d', self.dropout) self.super_event = tsf.TSF(3) self.add_module('sup', self.super_event) self.super_event2 = tsf.TSF(3) self.add_module('sup2', self.super_event2) # we have 2xD*3 # we want to learn a per-class weighting # to take 2xD*3 to D*3 self.cls_wts = nn.Parameter(torch.Tensor(classes)) self.sup_mat = nn.Parameter(torch.Tensor(1, classes, 1024)) stdv = 1./np.sqrt(1024+1024) self.sup_mat.data.uniform_(-stdv, stdv) self.per_frame = nn.Conv3d(1024, classes, (1,1,1)) self.per_frame.weight.data.uniform_(-stdv, stdv) self.per_frame.bias.data.uniform_(-stdv, stdv) self.add_module('pf', self.per_frame)
def __init__(self, inp, classes=8): super(Hierarchy, self).__init__() self.classes = classes self.dropout = nn.Dropout() self.add_module('d', self.dropout) self.super_event = tsf.TSF(3) self.add_module('sup', self.super_event) self.super_event2 = tsf.TSF(3) self.add_module('sup2', self.super_event2) # we have 2xD # we want to learn a per-class weighting # to take 2xD to D self.cls_wts = nn.Parameter(torch.Tensor(classes)) self.sup_mat = nn.Parameter(torch.Tensor(1, classes, inp)) stdv = 1. / np.sqrt(inp + inp) self.sup_mat.data.uniform_(-stdv, stdv) self.sub_event1 = TGM(inp, 16, 5, c_in=1, c_out=8, soft=False) self.sub_event2 = TGM(inp, 16, 5, c_in=8, c_out=8, soft=False) self.sub_event3 = TGM(inp, 16, 5, c_in=8, c_out=8, soft=False) self.h = nn.Conv1d(inp + 1 * inp + classes, 512, 1) self.classify = nn.Conv1d(512, classes, 1) self.inp = inp