for i, (x, y, x_lens, y_lens) in tqdm(enumerate(dataloader)): # x = x.to("cuda") x = x.to(device) outs, out_lens = model(x, x_lens) outs = F.softmax(outs, 1) outs = outs.transpose(1, 2) ys = [] offset = 0 for y_len in y_lens: ys.append(y[offset : offset + y_len]) offset += y_len out_strings, out_offsets = decoder.decode(outs, out_lens) y_strings = decoder.convert_to_strings(ys) for pred, truth in zip(out_strings, y_strings): trans, ref = pred[0], truth[0] cer += decoder.cer(trans, ref) / float(len(ref)) cer /= len(dataloader.dataset) model.train() return cer if __name__ == "__main__": with open("./labels.json") as f: vocabulary = json.load(f) vocabulary = "".join(vocabulary) model = GatedConv(vocabulary) if(not os.path.exists(save_path)): os.mkdir(save_path) model.to(device) train(model)
cer = 0 print("decoding") with torch.no_grad(): for i, (x, y, x_lens, y_lens) in tqdm(enumerate(dataloader)): x = x.to("cuda") outs, out_lens = model(x, x_lens) outs = F.softmax(outs, 1) outs = outs.transpose(1, 2) ys = [] offset = 0 for y_len in y_lens: ys.append(y[offset : offset + y_len]) offset += y_len out_strings, out_offsets = decoder.decode(outs, out_lens) y_strings = decoder.convert_to_strings(ys) for pred, truth in zip(out_strings, y_strings): trans, ref = pred[0], truth[0] cer += decoder.cer(trans, ref) / float(len(ref)) cer /= len(dataloader.dataset) model.train() return cer if __name__ == "__main__": with open("data_aishell/labels.json") as f: vocabulary = json.load(f) vocabulary = "".join(vocabulary) model = GatedConv(vocabulary) model.to("cuda") train(model)