当前位置: 首页 > 知识库问答 >
问题:

输出评估损失后,每n批次,而不是时代与pytorch

丁雅逸
2023-03-14

我想在每个n批次之后输出它,而不是在每个纪元打印评估损失。

我每个时代大约有15万批。我想每50000批输出一次评估损失。

这可能吗?我正在使用pytorch和huggingface的预训练bert模型。

我的列车循环:

best_valid_loss = float('inf')
train_losses=[]
valid_losses=[]

for epoch in range(params['epochs']):
     
      print('\n Epoch {:} / {:}'.format(epoch + 1, params['epochs']))
      
      #train model
      train_loss = train(scheduler, optimizer)
      
      #evaluate model
      valid_loss = evaluate()
      
      #save the best model
      if valid_loss < best_valid_loss:
          best_valid_loss = valid_loss
          torch.save(model.state_dict(), model_file)
      
      # append training and validation loss
      train_losses.append(train_loss)
      valid_losses.append(valid_loss)
      
      print(f'\nTraining Loss: {train_loss:.3f}')
      print(f'Validation Loss: {valid_loss:.3f}')

共有1个答案

池恩
2023-03-14

如果要跳过例如某些列表的n元素,可以使用enumerate

n = 50000

for i,epoch in enumerate(some_list):
     if i%n == 0:
     
           print('\n Epoch {:} / {:}'.format(epoch + 1, params['epochs']))
           ...

  

但在您的情况下,您只能使用一个附加条件:

n = 50000

for epoch in range(params['epochs']):
     #train model
     train_loss = train(scheduler, optimizer)
     
     #evaluate model
     valid_loss = evaluate()
  
     #save the best model
     if valid_loss < best_valid_loss:
           best_valid_loss = valid_loss
           torch.save(model.state_dict(), model_file)
  
     # append training and validation loss
     train_losses.append(train_loss)
     valid_losses.append(valid_loss)
  
     ##
     # print every n cycles 
     if epoch%n == 0:
           print('\n Epoch {:} / {:}'.format(epoch + 1, params['epochs']))

           print(f'\nTraining Loss: {train_loss:.3f}')
           print(f'Validation Loss: {valid_loss:.3f}')
 类似资料:
  • 我每一步都能得到训练损失。但我确实想在tensorboard中的图'lossxx'中添加评估损失。怎么做?

  • 我正在编写一段代码,对给定的后缀表达式求值。每个操作数和运算符之间用空格分隔,最后一个运算符后跟空格和“x”。 例子: 内插表达式:(2*3 4)*(4*3 2) 后缀表达式:23*443*2*x “x”暗示表达的结束。 输入(后缀表达式)作为字符串由另一个函数给出,该函数将内缀表达式转换为后缀表达式。 后缀评估的功能是: 我给出的例子的输出应该是“140”,但我得到的是“6”。请帮我找出错误。

  • 我希望火花流的输出在翻转窗口的末端发送到水槽,而不是在批处理间隔。 我从一个Kafka流读取并输出到另一个Kafka流。 查询和写入输出的代码如下: 当我在一分钟的窗口内为一个特定用户发送多个记录时,我希望在一分钟结束时这些事件的总数。 但我在输出Kafka流上获得了多个输出,并在其中写入了间歇聚合。 如。 我将在一分钟内发送以下7条记录,但间隔一定时间。 我得到的结果是: 可以看到,输出在同一个

  • 问题内容: 我正在尝试对存储进行多次更改,但是直到所有更改完成后才进行渲染。我想用redux-thunk做到这一点。 这是我的动作创建者: 我像这样派遣我的异步动作创建者: 但是,这导致每次反应后都进行渲染。我是redux-thunk的新手,我从未使用过异步中间件,但我认为它可以在这里为我提供帮助。 问题答案: 有一些方法可以实现目标: 经典方式: 通常:动作描述 发生某事 的 事实 ,但没有指定

  • 我正在tf中编程一个模型。keras和运行模型。训练集上的evaluate()通常会产生约96%的准确率。我对测试集的评估通常很接近,大约93%。然而,当我手动预测时,模型通常不准确。这是我的代码: 我听说很多时候人们都有这个问题,那只是数据输入的问题。但我看不出这有什么问题,因为它几乎总是错误地预测(如果它是随机的,大约和你预期的一样多)。如何解决此问题? 编辑:以下是具体结果: 最后一个训练步

  • 我理解经典例子的问题 但我无法说服自己以下是有效的还是无效的 我知道'foo(i)'和'i'的求值顺序是不确定的,但是'评估'到底是什么意思?也就是说bar的第二个参数总是42,或者'i'的当前值可以在foo改变它之前被传入吗?