def test_lecun_init_torch(): torch = pytest.importorskip("torch") nseed = args.seed random.seed(nseed) torch.manual_seed(nseed) numpy.random.seed(nseed) os.environ["CHAINER_SEED"] = str(nseed) import e2e_asr_attctc_th as m model = m.Loss(m.E2E(40, 5, args), 0.5) b = model.predictor.ctc.ctc_lo.bias.data.numpy() assert numpy.all(b == 0.0) w = model.predictor.ctc.ctc_lo.weight.data.numpy() numpy.testing.assert_allclose(w.mean(), 0.0, 1e-2, 1e-2) numpy.testing.assert_allclose(w.var(), 1.0 / w.shape[1], 1e-2, 1e-2) for name, p in model.named_parameters(): print(name) data = p.data.numpy() if "embed" in name: numpy.testing.assert_allclose(data.mean(), 0.0, 5e-2, 5e-2) numpy.testing.assert_allclose(data.var(), 1.0, 5e-2, 5e-2) elif "predictor.dec.decoder.0.bias_ih" in name: assert data.sum() == data.size // 4 elif "predictor.dec.decoder.1.bias_ih" in name: assert data.sum() == data.size // 4 elif data.ndim == 1: assert numpy.all(data == 0.0) else: numpy.testing.assert_allclose(data.mean(), 0.0, 5e-2, 5e-2) numpy.testing.assert_allclose( data.var(), 1.0 / numpy.prod(data.shape[1:]), 5e-2, 5e-2)
def test_lecun_init_chainer(): nseed = args.seed random.seed(nseed) numpy.random.seed(nseed) os.environ["CHAINER_SEED"] = str(nseed) import e2e_asr_attctc as m model = m.Loss(m.E2E(40, 5, args), 0.5) b = model.predictor.ctc.ctc_lo.b.data assert numpy.all(b == 0.0) w = model.predictor.ctc.ctc_lo.W.data numpy.testing.assert_allclose(w.mean(), 0.0, 1e-2, 1e-2) numpy.testing.assert_allclose(w.var(), 1.0 / w.shape[1], 1e-2, 1e-2) for name, p in model.namedparams(): print(name) data = p.data if "lstm0/upward/b" in name: assert data.sum() == data.size // 4 elif "lstm1/upward/b" in name: assert data.sum() == data.size // 4 elif "embed" in name: numpy.testing.assert_allclose(data.mean(), 0.0, 5e-2, 5e-2) numpy.testing.assert_allclose(data.var(), 1.0, 5e-2, 5e-2) elif data.ndim == 1: assert numpy.all(data == 0.0) else: numpy.testing.assert_allclose(data.mean(), 0.0, 5e-2, 5e-2) numpy.testing.assert_allclose( data.var(), 1.0 / numpy.prod(data.shape[1:]), 5e-2, 5e-2)
def load_pretrained(self, src_dict, idim, odim, args, train_batch, train_reader): dst_dict = self.state_dict() for k, v in src_dict.items(): assert k in dst_dict, k + " not found" dst_dict[k] = v self.load_state_dict(dst_dict) tgt_dict = self.state_dict() for k, v in src_dict.items(): assert (tgt_dict[k] == v).all() if args.verbose > 0: import e2e_asr_attctc_th as base init = base.Loss(base.E2E(idim, odim, args), args.mtlalpha) init.load_state_dict(src_dict) init.eval() self.predictor.eval() # test first batch prediction equality with open_kaldi_feat(train_batch[0], train_reader) as data: init_ctc, init_att, init_acc = init.predictor(data) re_ctc, re_att, re_acc = self.predictor(data, supervised=True) print("init: ", init_ctc, init_att, init_acc) print("re: ", re_ctc, re_att, re_acc) np.testing.assert_almost_equal(init_ctc.data[0], re_ctc.data[0]) np.testing.assert_almost_equal(init_att.data[0], re_att.data[0]) np.testing.assert_almost_equal(init_acc, re_acc) return self