def forward(self, inputs):
xp = cuda.get_array_module(inputs[0])
self.input_length = inputs[0]
# The length of path is (2 * label_length + 1)
self.path_length = 2 * inputs[1] + 1
batch_size = len(inputs[2])
yseq_shape = (len(inputs) - 3,) + inputs[3].shape
self.yseq = _softmax(xp.vstack(inputs[3::]).reshape(yseq_shape), xp)
log_yseq = self.log_matrix(self.yseq, xp)
self.path = _label_to_path(inputs[2], self.blank_symbol, xp)
self.prob_trans = self.calc_trans(self.path, log_yseq, xp)
loss = utils.force_array(xp.sum(
_logsumexp(self.prob_trans[0], xp, axis=1)))
loss /= -batch_size
return loss,
评论列表
文章目录