【问题标题】:When fitting a model with a test set in Sagemaker, is there a way to receive the predictions of the test set?在 Sagemaker 中用测试集拟合模型时,有没有办法接收测试集的预测?
【发布时间】:2020-04-16 03:23:20
【问题描述】:

我正在使用 Sagemaker 训练模型,特别是 DeepAR 图像,并将训练集和测试集作为 fit 函数的输入。 示例代码:

image_name = sagemaker.amazon.amazon_estimator.get_image_uri(region, "forecasting-deepar", "latest")
estimator = sagemaker.estimator.Estimator(
    sagemaker_session=sagemaker_session,
    image_name=image_name,
    role=role,
    train_instance_count=1,
    train_instance_type=train_instance_type,
    base_job_name=job_name,
    output_path=s3_output_path
)

data_channels = {
    "train": s3_train_path,
    "test": s3_test_path
}

estimator.fit(inputs=data_channels, wait=True, job_name=model_name)

我在训练结果的最后看到了一些测试结果指标,但我希望得到实际预测以进行分析。测试结果指标示例:

[12/25/2019 13:02:26 INFO 139821722212160] #test_score (algo-1, RMSE): 819.800852342
[12/25/2019 13:02:26 INFO 139821722212160] #test_score (algo-1, mean_wQuantileLoss): 0.33004057
[12/25/2019 13:02:26 INFO 139821722212160] #test_score (algo-1, wQuantileLoss[0.1]): 0.12110487
[12/25/2019 13:02:26 INFO 139821722212160] #test_score (algo-1, wQuantileLoss[0.2]): 0.20682412
[12/25/2019 13:02:26 INFO 139821722212160] #test_score (algo-1, wQuantileLoss[0.3]): 0.2760827
[12/25/2019 13:02:26 INFO 139821722212160] #test_score (algo-1, wQuantileLoss[0.4]): 0.3326178
[12/25/2019 13:02:26 INFO 139821722212160] #test_score (algo-1, wQuantileLoss[0.5]): 0.37820518
[12/25/2019 13:02:26 INFO 139821722212160] #test_score (algo-1, wQuantileLoss[0.6]): 0.41009128
[12/25/2019 13:02:26 INFO 139821722212160] #test_score (algo-1, wQuantileLoss[0.7]): 0.42785496
[12/25/2019 13:02:26 INFO 139821722212160] #test_score (algo-1, wQuantileLoss[0.8]): 0.42626995
[12/25/2019 13:02:26 INFO 139821722212160] #test_score (algo-1, wQuantileLoss[0.9]): 0.3913141

我发现最好的办法是根本不上传测试集,而是单独运行batch_transform 作业来获取测试预测。 Docs 对估算器 output_path 的说法含糊不清:

用于保存训练结果(模型工件和输出文件)的 S3 位置

不确定其中包括什么。 有没有办法获得测试集的预测? 提前致谢!

【问题讨论】:

    标签: python amazon-s3 amazon-sagemaker


    【解决方案1】:

    SageMaker 训练作业是一个自动化包装器,可让您的代码在本地模式下运行。当您的代码需要一个文件时,它可以从本地磁盘获取它。当模型保存文件时,它会保存到本地磁盘。 SageMaker 负责将需要作为输入的数据从 S3 复制到本地磁盘,然后将您作为输出写入的数据复制回 S3。您提供的渠道为 SageMaker 提供了 S3 中用于复制的位置。频道名称为本地磁盘中的文件夹名称。

    如果您的代码正在写出预测,它们将被复制到 S3,您将能够处理它们。如果您使用的是 AWS 内置算法,该算法使用他们的 Docker 映像来运行 DeepAR 算法,它将不会写出预测。

    你有两个选择:

    • 编写您自己的代码来包装 DeepAR 算法,并在您的代码中将最后一次迭代后的预测写入输出文件夹。
    • 更简单地说,使用测试数据运行批量预测 API。

    在这两种情况下,最好将数据分成 组,因为用作验证数据的测试数据的得分并不能很好地估计性能你的模型在新的看不见的数据上。如果你这样做了,对测试数据运行批量预测就更有意义了。

    【讨论】:

    • DeepAR 没有写出预测是有原因的吗?我同意这些选项,目前使用的是 2 之一。关于拆分数据,不确定我是否理解为什么要使用 3 个组。我在日志中看到,如果我没记错的话,只有在训练模型之后才会使用测试数据,如果是这样的话,两组(一组用于训练,第二组用于评估)就足够了。
    • 我基于的日志 - 没有测试:[01/02/2020 14:52:47 INFO 140454633060160] No test data passed, skipping evaluation. 有测试:[01/02/2020 17:31:26 INFO 140715580856128] Evaluating model accuracy on testset using 100 samples 文档中是否有任何参考测试集用作验证?
    猜你喜欢
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多