gram_ctc.py 文件源码

python
阅读 24 收藏 0 点赞 0 评论 0

项目:chainer-speech-recognition 作者: musyoku 项目源码 文件源码
def forward(self, inputs):
        xp = cuda.get_array_module(inputs[0])
        self.input_length = inputs[0]
        length_unigram = inputs[1]
        label_unigram = inputs[2]
        label_bigram = inputs[3]
        length_bigram = length_unigram
        xs = inputs[4:]

        if chainer.is_debug():
            # batch size check.
            assert len(xs[0]) == len(label_unigram)
            assert len(xs[0]) == len(self.input_length)
            assert len(xs[0]) == len(length_unigram)

            # length check.
            assert len(xs) >= xp.max(self.input_length)
            assert len(label_unigram[0]) >= xp.max(length_unigram)

            # unit check
            assert xs[0].shape[1] > xp.max(label_unigram)
            assert xs[0].shape[1] > xp.max(label_bigram)
            assert xs[0].shape[1] > self.blank_symbol

        self.path_length = length_unigram * 3 + 1

        yseq_shape = (len(xs),) + xs[0].shape
        self.yseq = _softmax(xp.vstack(xs).reshape(yseq_shape), xp)
        log_yseq = _log_matrix(self.yseq, xp, self.zero_padding)
        self.path = _label_to_path(label_unigram, label_bigram, self.blank_symbol, xp)
        self.prob_trans = _compute_transition_probability(log_yseq, self.input_length, 
            label_unigram, length_unigram, label_bigram, length_bigram, self.path, self.path_length, xp, self.zero_padding)

        loss = -_logsumexp(self.prob_trans[0], xp, axis=1)
        if self.reduce == 'mean':
            loss = utils.force_array(xp.mean(loss))
        return loss,
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号