在SageMaker到CloudWatch上定义度量



来自AWS Sagemaker文档,为了在cloudwatch中跟踪自定义ml算法(非内置(的指标,我读到我必须定义我的估计如下。

但我不知道如何更改我的训练脚本,以便在我的估计器中声明的度量定义可以获取这些值。

estimator =
Estimator(image_name=ImageName,
role='SageMakerRole', 
instance_count=1,
instance_type='ml.c4.xlarge',
k=10,
sagemaker_session=sagemaker_session,
metric_definitions=[
{'Name': 'train:error', 'Regex': 'Train_error=(.*?);'},
{'Name': 'validation:error', 'Regex': 'Valid_error=(.*?);'}
]
)

在我的训练代码中,我有

for epoch in range(1, args.epochs + 1):
total_loss = 0
model.train()
for step, batch in enumerate(train_loader):
b_input_ids = batch[0].to(device)
b_input_mask = batch[1].to(device)
b_labels = batch[2].to(device)
model.zero_grad()
outputs = model(b_input_ids, token_type_ids=None, attention_mask=b_input_mask, labels=b_labels)
loss = outputs[0]
total_loss += loss.item()
loss.backward() # Computes the gradients
torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0) # Clip for error prevention
# modified based on their gradients, the learning rate, etc.
optimizer.step() # Back Prop
logger.info("Average training loss: %fn", total_loss / len(train_loader))

在这里,我想要train:error来获取total_loss / len(train_loader),但我不确定如何分配。

您必须定义一个正则表达式来捕获该模式,请尝试以下操作:

{'Name': 'Average training loss', 'Regex': 'Average training loss = ([0-9.]+)'}

您可以尝试像这样的regex in工具,看看会发生什么。

相关内容

  • 没有找到相关文章

最新更新