def test_sortagrad_trainable_with_batch_bins(module): args = make_arg(sortagrad=1) idim = 20 odim = 5 dummy_json = make_dummy_json_st( 4, [10, 20], [10, 20], [10, 20], idim=idim, odim=odim ) if module == "pytorch": import espnet.nets.pytorch_backend.e2e_st as m else: raise NotImplementedError batch_elems = 2000 batchset = make_batchset(dummy_json, batch_bins=batch_elems, shortest_first=True) for batch in batchset: n = 0 for uttid, info in batch: ilen = int(info["input"][0]["shape"][0]) olen = int(info["output"][0]["shape"][0]) n += ilen * idim + olen * odim assert olen < batch_elems model = m.E2E(20, 5, args) for batch in batchset: loss = model(*convert_batch(batch, module, idim=20, odim=5)) if isinstance(loss, tuple): # chainer return several values as tuple loss[0].backward() # trainable else: loss.backward() # trainable with torch.no_grad(), chainer.no_backprop_mode(): in_data = np.random.randn(100, 20) model.translate(in_data, args, args.char_list)
def test_gradient_noise_injection(module): args = make_arg(grad_noise=True) args_org = make_arg() dummy_json = make_dummy_json_st(2, [10, 20], [10, 20], [10, 20], idim=20, odim=5) if module == "pytorch": import espnet.nets.pytorch_backend.e2e_st as m else: raise NotImplementedError batchset = make_batchset(dummy_json, 2, 2**10, 2**10, shortest_first=True) model = m.E2E(20, 5, args) model_org = m.E2E(20, 5, args_org) for batch in batchset: loss = model(*convert_batch(batch, module, idim=20, odim=5)) loss_org = model_org(*convert_batch(batch, module, idim=20, odim=5)) loss.backward() grad = [param.grad for param in model.parameters()][10] loss_org.backward() grad_org = [param.grad for param in model_org.parameters()][10] assert grad[0] != grad_org[0]
def test_sortagrad_trainable(module): args = make_arg(sortagrad=1) dummy_json = make_dummy_json_st(4, [10, 20], [10, 20], [10, 20], idim=20, odim=5) if module == "pytorch": import espnet.nets.pytorch_backend.e2e_st as m else: raise NotImplementedError batchset = make_batchset(dummy_json, 2, 2**10, 2**10, shortest_first=True) model = m.E2E(20, 5, args) for batch in batchset: loss = model(*convert_batch(batch, module, idim=20, odim=5)) if isinstance(loss, tuple): # chainer return several values as tuple loss[0].backward() # trainable else: loss.backward() # trainable with torch.no_grad(), chainer.no_backprop_mode(): in_data = np.random.randn(50, 20) model.translate(in_data, args, args.char_list)
def test_sortagrad_trainable_with_batch_frames(module): args = make_arg(sortagrad=1) idim = 20 odim = 5 dummy_json = make_dummy_json_st(4, [10, 20], [10, 20], [10, 20], idim=idim, odim=odim) if module == "pytorch": import espnet.nets.pytorch_backend.e2e_st as m else: raise NotImplementedError batch_frames_in = 50 batch_frames_out = 50 batchset = make_batchset(dummy_json, batch_frames_in=batch_frames_in, batch_frames_out=batch_frames_out, shortest_first=True) for batch in batchset: i = 0 o = 0 for uttid, info in batch: i += int(info['input'][0]['shape'][0]) o += int(info['output'][0]['shape'][0]) assert i <= batch_frames_in assert o <= batch_frames_out model = m.E2E(20, 5, args) for batch in batchset: loss = model(*convert_batch(batch, module, idim=20, odim=5)) if isinstance(loss, tuple): # chainer return several values as tuple loss[0].backward() # trainable else: loss.backward() # trainable with torch.no_grad(), chainer.no_backprop_mode(): in_data = np.random.randn(100, 20) model.translate(in_data, args, args.char_list)