小胖有技能|AssemblyAI 在 PyTorch 中建立端到端的语音识别模型,利用( 五 )


小胖有技能|AssemblyAI 在 PyTorch 中建立端到端的语音识别模型,利用
文章图片
使用Comet.ml训练和监测实验
Comet.ml提供了一个平台 , 允许深度学习研究人员跟踪、比较、解释和优化他们的实验和模型 。 Comet.ml提高了AssemblyAI的工作效率 , 我们强烈建议团队使用这个平台进行任何类型的数据科学实验 。
Comet.ml非常容易设置 。 仅需几行代码即可工作 。
initializeexperimentobjectexperiment=Experiment(api_key=comet_api_key,project_name=project_name)experiment.set_name(exp_name)trackmetricsexperiment.log_metric('loss',loss.item)Comet.ml为你提供了一个非常高效的仪表板 , 你可以查看和跟踪模型的进度 。
小胖有技能|AssemblyAI 在 PyTorch 中建立端到端的语音识别模型,利用
文章图片
【小胖有技能|AssemblyAI 在 PyTorch 中建立端到端的语音识别模型,利用】你可以使用Comet来跟踪指标、代码、超参数、模型图等 。 Comet提供的一项非常方便的功能 , 能够将你的实验与许多其他实验进行比较 。
小胖有技能|AssemblyAI 在 PyTorch 中建立端到端的语音识别模型,利用
文章图片
Comet具有丰富的功能集 , 我们在这里不会全部介绍 , 但是我们强烈建议您使用它来提高生产率和健全性 。
下面是我们训练脚本的其余部分 。
classIterMeter(object):''''''keepstrackoftotaliterations''''''def__init__(self):self.val=0defstep(self):self.val+=1defget(self):returnself.valdeftrain(model,device,train_loader,criterion,optimizer,scheduler,epoch,iter_meter,experiment):model.traindata_len=len(train_loader.dataset)withexperiment.train:forbatch_idx,_datainenumerate(train_loader):spectrograms,labels,input_lengths,label_lengths=_dataspectrograms,labels=spectrograms.to(device),labels.to(device)optimizer.zero_gradoutput=model(spectrograms)#(batch,time,n_class)output=F.log_softmax(output,dim=2)output=output.transpose(0,1)#(time,batch,n_class)loss=criterion(output,labels,input_lengths,label_lengths)loss.backwardexperiment.log_metric('loss',loss.item,step=iter_meter.get)experiment.log_metric('learning_rate',scheduler.get_lr,step=iter_meter.get)optimizer.stepscheduler.stepiter_meter.stepifbatch_idx%100==0orbatch_idx==data_len:print('TrainEpoch:{}[{}/{}({:.0f}%)]tLoss:{:.6f}'.format(epoch,batch_idx*len(spectrograms),data_len,100.*batch_idx/len(train_loader),loss.item))deftest(model,device,test_loader,criterion,epoch,iter_meter,experiment):print('nevaluating…')model.evaltest_loss=0test_cer,test_wer=,withexperiment.test:withtorch.no_grad:forI,_datainenumerate(test_loader):spectrograms,labels,input_lengths,label_lengths=_dataspectrograms,labels=spectrograms.to(device),labels.to(device)output=model(spectrograms)#(batch,time,n_class)output=F.log_softmax(output,dim=2)output=output.transpose(0,1)#(time,batch,n_class)loss=criterion(output,labels,input_lengths,label_lengths)test_loss+=loss.item/len(test_loader)decoded_preds,decoded_targets=GreedyDecoder(output.transpose(0,1),labels,label_lengths)forjinrange(len(decoded_preds)):test_cer.append(cer(decoded_targets[j],decoded_preds[j]))test_wer.append(wer(decoded_targets[j],decoded_preds[j]))avg_cer=sum(test_cer)/len(test_cer)avg_wer=sum(test_wer)/len(test_wer)experiment.log_metric('test_loss',test_loss,step=iter_meter.get)experiment.log_metric('cer',avg_cer,step=iter_meter.get)experiment.log_metric('wer',avg_wer,step=iter_meter.get)print('Testset:Averageloss:{:.4f},AverageCER:{:4f}AverageWER:{:.4f}n'.format(test_loss,avg_cer,avg_wer))defmain(learning_rate=5e-4,batch_size=20,epochs=10,train_url=''train-clean-100'',test_url=''test-clean'',experiment=Experiment(api_key='dummy_key',disabled=True)):hparams={''n_cnn_layers'':3,''n_rnn_layers'':5,''rnn_dim'':512,''n_class'':29,''n_feats'':128,''stride'':2,''dropout'':0.1,''learning_rate'':learning_rate,''batch_size'':batch_size,''epochs'':epochs}experiment.log_parameters(hparams)use_cuda=torch.cuda.is_availabletorch.manual_seed(7)device=torch.device(''cuda''ifuse_cudaelse''cpu'')ifnotos.path.isdir(''./data''):os.makedirs(''./data'')train_dataset=torchaudio.datasets.LIBRISPEECH(''./data'',url=train_url,download=True)test_dataset=torchaudio.datasets.LIBRISPEECH(''./data'',url=test_url,download=True)kwargs={'num_workers':1,'pin_memory':True}ifuse_cudaelse{}train_loader=data.DataLoader(dataset=train_dataset,batch_size=hparams['batch_size'],shuffle=True,collate_fn=lambdax:data_processing(x,'train'),**kwargs)test_loader=data.DataLoader(dataset=test_dataset,batch_size=hparams['batch_size'],shuffle=False,collate_fn=lambdax:data_processing(x,'valid'),**kwargs)model=SpeechRecognitionModel(hparams['n_cnn_layers'],hparams['n_rnn_layers'],hparams['rnn_dim'],hparams['n_class'],hparams['n_feats'],hparams['stride'],hparams['dropout']).to(device)print(model)print('NumModelParameters',sum([param.nelement()forparaminmodel.parameters()]))optimizer=optim.AdamW(model.parameters,hparams['learning_rate'])criterion=nn.CTCLoss(blank=28).to(device)scheduler=optim.lr_scheduler.OneCycleLR(optimizer,max_lr=hparams['learning_rate'],steps_per_epoch=int(len(train_loader)),epochs=hparams['epochs'],anneal_strategy='linear')iter_meter=IterMeterforepochinrange(1,epochs+1):train(model,device,train_loader,criterion,optimizer,scheduler,epoch,iter_meter,experiment)test(model,device,test_loader,criterion,epoch,iter_meter,experiment)训练功能可在整个数据周期内训练模型 。 在每个时期之后 , 测试功能都会根据测试数据评估模型 。 它获取test_loss以及模型的cer和wer 。 你现在可以在Google合作实验室的GPU支持下开始运行训练脚本 。


推荐阅读