Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def convert_batch(batch, backend="pytorch", is_cuda=False, idim=5, odim=5):
ilens = np.array([x[1]['output'][1]['shape'][0] for x in batch])
olens = np.array([x[1]['output'][0]['shape'][0] for x in batch])
xs = [np.random.randint(0, idim, ilen).astype(np.int32) for ilen in ilens]
ys = [np.random.randint(0, odim, olen).astype(np.int32) for olen in olens]
is_pytorch = backend == "pytorch"
if is_pytorch:
xs = pad_list([torch.from_numpy(x).long() for x in xs], idim)
ilens = torch.from_numpy(ilens).long()
ys = pad_list([torch.from_numpy(y).long() for y in ys], -1)
if is_cuda:
xs = xs.cuda()
ilens = ilens.cuda()
ys = ys.cuda()
else:
if is_cuda:
xp = importlib.import_module('cupy')
xs = [chainer.Variable(xp.array(x)) for x in xs]
ys = [chainer.Variable(xp.array(y)) for y in ys]
ilens = xp.array(ilens)
else:
xs = [chainer.Variable(x) for x in xs]
ys = [chainer.Variable(y) for y in ys]
return xs, ilens, ys
def prepare_inputs(idim, odim, ilens, olens, spk_embed_dim=None,
device=torch.device('cpu')):
xs = [np.random.randint(0, idim, l) for l in ilens]
ys = [np.random.randn(l, odim) for l in olens]
ilens = torch.LongTensor(ilens).to(device)
olens = torch.LongTensor(olens).to(device)
xs = pad_list([torch.from_numpy(x).long() for x in xs], 0).to(device)
ys = pad_list([torch.from_numpy(y).float() for y in ys], 0).to(device)
labels = ys.new_zeros(ys.size(0), ys.size(1))
for i, l in enumerate(olens):
labels[i, l - 1:] = 1
batch = {
"xs": xs,
"ilens": ilens,
"ys": ys,
"labels": labels,
"olens": olens,
}
if spk_embed_dim is not None:
batch["spembs"] = torch.FloatTensor(np.random.randn(len(ilens), spk_embed_dim)).to(device)
return batch
def prepare_inputs(idim, odim, ilens, olens, spk_embed_dim=None,
device=torch.device('cpu')):
xs = [np.random.randint(0, idim, l) for l in ilens]
ys = [np.random.randn(l, odim) for l in olens]
ilens = torch.LongTensor(ilens).to(device)
olens = torch.LongTensor(olens).to(device)
xs = pad_list([torch.from_numpy(x).long() for x in xs], 0).to(device)
ys = pad_list([torch.from_numpy(y).float() for y in ys], 0).to(device)
labels = ys.new_zeros(ys.size(0), ys.size(1))
for i, l in enumerate(olens):
labels[i, l - 1:] = 1
batch = {
"xs": xs,
"ilens": ilens,
"ys": ys,
"labels": labels,
"olens": olens,
}
if spk_embed_dim is not None:
batch["spembs"] = torch.FloatTensor(np.random.randn(len(ilens), spk_embed_dim)).to(device)
return batch
def prepare_inputs(mode, num_encs=2, is_cuda=False):
ilens_list = [[20, 15] for _ in range(num_encs)]
olens = [4, 3]
np.random.seed(1)
assert len(ilens_list[0]) == len(ilens_list[1]) == len(olens)
xs_list = [[np.random.randn(ilen, 40).astype(np.float32) for ilen in ilens] for ilens in ilens_list]
ys = [np.random.randint(1, 5, olen).astype(np.int32) for olen in olens]
ilens_list = [np.array([x.shape[0] for x in xs], dtype=np.int32) for xs in xs_list]
if mode == "pytorch":
ilens_list = [torch.from_numpy(ilens).long() for ilens in ilens_list]
xs_pad_list = [pad_list([torch.from_numpy(x).float() for x in xs], 0) for xs in xs_list]
ys_pad = pad_list([torch.from_numpy(y).long() for y in ys], -1)
if is_cuda:
xs_pad_list = [xs_pad.cuda() for xs_pad in xs_pad_list]
ilens_list = [ilens.cuda() for ilens in ilens_list]
ys_pad = ys_pad.cuda()
return xs_pad_list, ilens_list, ys_pad
else:
raise ValueError("Invalid mode")
def prepare_inputs(mode, num_encs=2, is_cuda=False):
ilens_list = [[20, 15] for _ in range(num_encs)]
olens = [4, 3]
np.random.seed(1)
assert len(ilens_list[0]) == len(ilens_list[1]) == len(olens)
xs_list = [[np.random.randn(ilen, 40).astype(np.float32) for ilen in ilens] for ilens in ilens_list]
ys = [np.random.randint(1, 5, olen).astype(np.int32) for olen in olens]
ilens_list = [np.array([x.shape[0] for x in xs], dtype=np.int32) for xs in xs_list]
if mode == "pytorch":
ilens_list = [torch.from_numpy(ilens).long() for ilens in ilens_list]
xs_pad_list = [pad_list([torch.from_numpy(x).float() for x in xs], 0) for xs in xs_list]
ys_pad = pad_list([torch.from_numpy(y).long() for y in ys], -1)
if is_cuda:
xs_pad_list = [xs_pad.cuda() for xs_pad in xs_pad_list]
ilens_list = [ilens.cuda() for ilens in ilens_list]
ys_pad = ys_pad.cuda()
return xs_pad_list, ilens_list, ys_pad
else:
raise ValueError("Invalid mode")
def convert_batch(batch, backend="pytorch", is_cuda=False, idim=40, odim=5, num_inputs=2):
ilens_list = [np.array([x[1]['input'][idx]['shape'][0] for x in batch]) for idx in range(num_inputs)]
olens = np.array([x[1]['output'][0]['shape'][0] for x in batch])
xs_list = [[np.random.randn(ilen, idim).astype(np.float32) for ilen in ilens_list[idx]] for idx in
range(num_inputs)]
ys = [np.random.randint(1, odim, olen).astype(np.int32) for olen in olens]
is_pytorch = backend == "pytorch"
if is_pytorch:
xs_list = [pad_list([torch.from_numpy(x).float() for x in xs_list[idx]], 0) for idx in range(num_inputs)]
ilens_list = [torch.from_numpy(ilens_list[idx]).long() for idx in range(num_inputs)]
ys = pad_list([torch.from_numpy(y).long() for y in ys], -1)
if is_cuda:
xs_list = [xs_list[idx].cuda() for idx in range(num_inputs)]
ilens_list = [ilens_list[idx].cuda() for idx in range(num_inputs)]
ys = ys.cuda()
return xs_list, ilens_list, ys
def convert_batch(batch, backend="pytorch", is_cuda=False, idim=40, odim=5, num_inputs=2):
ilens_list = [np.array([x[1]['input'][idx]['shape'][0] for x in batch]) for idx in range(num_inputs)]
olens = np.array([x[1]['output'][0]['shape'][0] for x in batch])
xs_list = [[np.random.randn(ilen, idim).astype(np.float32) for ilen in ilens_list[idx]] for idx in
range(num_inputs)]
ys = [np.random.randint(1, odim, olen).astype(np.int32) for olen in olens]
is_pytorch = backend == "pytorch"
if is_pytorch:
xs_list = [pad_list([torch.from_numpy(x).float() for x in xs_list[idx]], 0) for idx in range(num_inputs)]
ilens_list = [torch.from_numpy(ilens_list[idx]).long() for idx in range(num_inputs)]
ys = pad_list([torch.from_numpy(y).long() for y in ys], -1)
if is_cuda:
xs_list = [xs_list[idx].cuda() for idx in range(num_inputs)]
ilens_list = [ilens_list[idx].cuda() for idx in range(num_inputs)]
ys = ys.cuda()
return xs_list, ilens_list, ys
ys_pad (torch.Tensor): batch of padded character id sequence tensor (B, Lmax)
Returns:
att_ws (ndarray): attention weights with the following shape,
1) multi-head case => attention weights (B, H, Lmax, Tmax),
2) other case => attention weights (B, Lmax, Tmax).
"""
ys = [y[y != self.ignore_id] for y in ys_pad]
hlens = list(map(int, hlens))
blank = ys[0].new([self.blank])
ys_in = [torch.cat([blank, y], dim=0) for y in ys]
ys_in_pad = pad_list(ys_in, self.blank)
olength = ys_in_pad.size(1)
att_w = None
att_ws = []
self.att[0].reset()
eys = self.dropout_emb(self.embed(ys_in_pad))
z_list, c_list = self.zero_state(eys)
for i in six.moves.range(olength):
att_c, att_w = self.att[0](hs_pad, hlens, self.dropout_dec[0](z_list[0]), att_w)
ey = torch.cat((eys[:, i, :], att_c), dim=1)
_, (z_list, c_list) = self.rnn_forward(ey, (z_list, c_list))
att_ws.append(att_w)
ys = [y[y != self.ignore_id] for y in ys_pad] # parse padded ys
# hlen should be list of integer
hlen = list(map(int, hlen))
self.loss = None
# prepare input and output word sequences with sos/eos IDs
eos = ys[0].new([self.eos])
sos = ys[0].new([self.sos])
ys_in = [torch.cat([sos, y], dim=0) for y in ys]
ys_out = [torch.cat([y, eos], dim=0) for y in ys]
# padding for ys with -1
# pys: utt x olen
ys_in_pad = pad_list(ys_in, self.eos)
ys_out_pad = pad_list(ys_out, self.ignore_id)
# get length info
olength = ys_out_pad.size(1)
# initialization
c_list = [self.zero_state(hs_pad)]
z_list = [self.zero_state(hs_pad)]
for _ in six.moves.range(1, self.dlayers):
c_list.append(self.zero_state(hs_pad))
z_list.append(self.zero_state(hs_pad))
att_w = None
att_ws = []
self.att.reset() # reset pre-computation of h
# pre-computation of embedding
eys = self.dropout_emb(self.embed(ys_in_pad)) # utt x olen x zdim