程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Pytorch BCE 损失不会因词义消歧任务而减少大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Pytorch BCE 损失不会因词义消歧任务而减少?

开发过程中遇到Pytorch BCE 损失不会因词义消歧任务而减少的问题如何解决?下面主要结合日常开发的经验,给出你关于Pytorch BCE 损失不会因词义消歧任务而减少的解决方法建议,希望对你解决Pytorch BCE 损失不会因词义消歧任务而减少有所启发或帮助;

我正在执行词义消歧,并为前 30 万个最常见的英语单词创建了自己的词汇表。我的模型非常简单,其中句子中的每个单词(它们各自的索引值)都通过一个嵌入层,该嵌入层嵌入了单词并对结果嵌入进行了平均。然后将平均嵌入发送到一个线性层,如下面的模型所示。

class TesTingClassifIEr(nn.ModulE):
  def __init__(self,vocabSize,features,embeddingDim):
      super(TesTingClassifIEr,self).__init__()
      self.embeddings = nn.Embedding(vocabSize,embeddingDim)
      self.linear = nn.linear(features,2)
      self.sigmoID = nn.SigmoID()

  def forWARD(self,inputs):
      embeds = self.embeddings(inputs)
      avged = torch.mean(embeds,dim=-1)
      output = self.linear(avged)
      output = self.sigmoID(output)
      return output

我将 bceloss 作为损失函数运行,将 SGD 作为优化器运行。我的问题是,随着训练的进行,我的损失几乎没有减少,几乎就像它以非常高的损失收敛一样。我尝试了不同的学习率(0.0001、0.001、0.01 和 0.1),但我遇到了同样的问题。

我的训练函数如下:

def Train_model(model,optimizer,lossFunction,batchSize,epochs,isRnnModel,TrainDataLoader,valIDDataLoader,earlyStop = false,maxPatIEnce = 1
):

  valIDationAcc = []
  patIEnceCounter = 0
  stopTraining = false
  model.Train()

  # Train network
  for epoch in range(epochs):
    losses = []
    if(stopTraining):
      break

    for inputs,labels in tqdm(TrainDataLoader,position=0,leave=TruE):

      optimizer.zero_grad()

      # PreDict and calculate loss
      preDiction = model(inputs)
      loss = lossFunction(preDiction,labels)
      losses.append(loss)

      # BACkWARD propagation
      loss.BACkWARD()

      # Readjust weights
      optimizer.step()

    print(sum(losses) / len(losses))
    curValIDAcc = check_accuracy(valIDDataLoader,model,isRnnModel) # check accuracy on valIDation set
    curTrainAcc = check_accuracy(TrainDataLoader,isRnnModel)
    print("Epoch",epoch + 1,"Training accuracy",curTrainAcc,"ValIDation accuracy:",curValIDAcC)

    # Control early stopPing
    if(earlyStop):
      if(patIEnceCounter == 0):
        if(len(valIDationAcC) > 0 and curValIDAcc < valIDationAcc[-1]):
          benchmark = valIDationAcc[-1]
          patIEnceCounter += 1
          print("PatIEnce counter",patIEnceCounter)
      
      elif(patIEnceCounter == maxPatIEncE):
        print("EARLY Stop. PatIEnce level:",patIEnceCounter)
        stopTraining = True

      else:
        if(curValIDAcc < benchmark):
          patIEnceCounter += 1
          print("PatIEnce counter",patIEnceCounter)
        
        else:
          benchmark = curValIDAcc
          patIEnceCounter = 0

      valIDationAcc.append(curValIDAcC)

批量大小为 32(训练集包含 8000 行),词汇量大小为 300k,嵌入维度为 24。我尝试向网络添加更多线性层,但没有任何区别。即使经过多次训练,训练集和验证集的预测准确率仍保持在 50% 左右(这太可怕了)。非常感谢任何帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

大佬总结

以上是大佬教程为你收集整理的Pytorch BCE 损失不会因词义消歧任务而减少全部内容,希望文章能够帮你解决Pytorch BCE 损失不会因词义消歧任务而减少所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。