0

我在同一个 Colab 笔记本中训练多个模型来比较一些结果。我编写了一个函数来避免重复代码,并在 model_name.fit() 的回调列表中添加了 WandbCallback()。

def generic_FE_trainer(model_name, checkpoint_filename, min_lr=1e-7):
    earlystop = callbacks.EarlyStopping(monitor="val_loss",
                                    patience=11, 
                                    verbose=1)
    lr_reduction = callbacks.ReduceLROnPlateau(monitor='val_accuracy', 
                                           patience=5, 
                                           verbose=1, 
                                           factor=0.8, 
                                           min_lr=min_lr)
    checkpoint_dir = os.path.join(save_dir, checkpoint_filename)
    if not os.path.exists(checkpoint_dir):
        os.makedirs(checkpoint_dir)
    checkpoint = callbacks.ModelCheckpoint(filepath=os.path.join(checkpoint_dir, checkpoint_filename+'.h5'), 
                                           monitor="val_loss",
                                           verbose=1,
                                           save_best_only=True,
                                           save_weights_only=False)
    return model_name.fit(train_gen, 
                          epochs=40,
                          batch_size=4,
                          verbose=1,
                          callbacks=[earlystop, checkpoint, lr_reduction, WandbCallback()],
                          validation_data=val_gen)

我用类似下面的代码来调用它们,但是我的项目仪表板将两者的数据放在同一个图表上,我在其中附加了一个时期的图表(尽管它不是特别有用)作为示例显示。

history1 = generic_FE_trainer(model1, 'model1')
history2 = generic_FE_trainer(model2, 'model2')

wandb 时代

这对我的所有指标都是一样的,那么我怎样才能让 wandb 分别绘制这些图表呢?如果可能的话,我希望它们处于不同的运行状态。

4

1 回答 1

0

再次使用w = wandb.init()以产生一个新进程,并确保传入reinit=True. 因为第一次运行永远不会结束,所以这些时期在这里相连。要结束运行,请使用w.finish().

所以在这里,不同的运行会产生

w = wandb.init(reinit=True)
history1 = generic_FE_trainer(model1, 'model1')
w.finish()
wandb.init()
history2 = generic_FE_trainer(model2, 'model2')
于 2022-02-14T03:05:31.997 回答