def post_init(self): """ Initialize offset tensors """ cond_lead, r_off = vconv.output_offsets(self.wavenet_vc['beg_grcc'], self.vc) assert r_off == 0 self.register_buffer('cond_lead', torch.tensor(cond_lead)) if self.vc == self.wavenet_vc['end_grcc']: skip_lead = 0 else: skip_lead, r_off = vconv.output_offsets(self.vc.child, self.wavenet_vc['end_grcc']) assert r_off == 0 self.register_buffer('skip_lead', torch.tensor(skip_lead)) self.register_buffer('left_wing_size', torch.tensor(self.vc.l_wing_sz))
def init_leads(self): """ Update skip_lead and cond_lead to reflect changed geometry or chunk size. Call this after vconv.compute_inputs is called """ cond_lead, r_off = vconv.output_offsets(self.wavenet_vc['beg_grcc'], self.vc) assert r_off == 0 if self.vc == self.wavenet_vc['end_grcc']: skip_lead = 0 else: skip_lead, r_off = vconv.output_offsets( self.vc.child, self.wavenet_vc['end_grcc']) assert r_off == 0 self.leads[0] = cond_lead self.leads[1] = skip_lead self.leads[2] = self.vc.l_wing_sz self.leads[3] = 0 self.global_rf = self.vc.in_len() self.local_rf = self.vc.filter_size()
def __init__(self, n_in_chan, n_out_chan, filter_sz, stride=1, do_res=True, parent_vc=None, name=None): super(ConvReLURes, self).__init__() self.n_in = n_in_chan self.n_out = n_out_chan self.conv = nn.Conv1d(n_in_chan, n_out_chan, filter_sz, stride, padding=0, bias=True) self.relu = nn.ReLU() self.name = name # self.bn = nn.BatchNorm1d(n_out_chan) self.vc = vconv.VirtualConv(filter_info=filter_sz, stride=stride, parent=parent_vc, name=name) self.do_res = do_res if self.do_res: if stride != 1: print('Stride must be 1 for residually connected convolution', file=stderr) raise ValueError l_off, r_off = vconv.output_offsets(self.vc, self.vc) self.register_buffer('residual_offsets', torch.tensor([l_off, r_off])) netmisc.xavier_init(self.conv)