SageMaker: ClientError: .lst file missing in the train_lst channel. (customized image classification)

SageMaker: ClientError: .lst file missing in the train_lst channel. (customized image classification)

问题:

作业在 5 分钟后反复失败并出现错误

ClientError: .lst file missing in the train_lst channel.

上下文:

在 AWS 控制台中,我有一个图像的二元分类任务。根据指南,我在文件名中标记了 类。

最终我开始遇到错误,表明对于这个特定的算法,需要一个 .lst 文件来收集标签,因为 "Content Type" 被指定为图像,这显然需要一个 lst 文件。

示例数据:

我正在尝试匹配我在 Whosebug 和网上其他地方看到的示例。 trn_list.lst 的当前迭代如下所示:

292 \t 1 \t dog-292.jpeg
214 \t 1 \t dog-214.jpeg
290 \t 0 \t cat-290.jpeg
288 \t 1 \t dog-288.jpeg
160 \t 1 \t dog-160.jpeg
18 \t 0 \t cat-18.jpeg
215 \t 1 \t dog-215.jpeg
254 \t 1 \t dog-254.jpeg
53 \t 1 \t dog-53.jpeg
337 \t 0 \t cat-337.jpeg
284 \t 0 \t cat-284.jpeg
177 \t 1 \t dog-177.jpeg
192 \t 1 \t dog-192.jpeg
228 \t 0 \t cat-228.jpeg
305 \t 0 \t cat-305.jpeg
258 \t 1 \t dog-258.jpeg
75 \t 0 \t cat-75.jpeg
148 \t 0 \t cat-148.jpeg
268 \t 1 \t dog-268.jpeg
281 \t 1 \t dog-281.jpeg
24 \t 1 \t dog-24.jpeg
328 \t 1 \t dog-328.jpeg
99 \t 1 \t dog-99.jpeg

存储桶没有子文件夹,所以我只是将 .lst 放在

在一次迭代中,我允许创建 .lst 的 R 程序在写出时用实际制表符替换 \t。在其他迭代中,我将实际的分隔符 (\t) 留在了那里。好像没影响(?).

当您使用 SageMaker 训练作业时,您实际上是在将 Docker 图像部署到 EC2 实例集群。 Docker 有一个 python 文件,它是 运行 训练代码,与您在机器上训练它的方式类似。在训练代码中,当它希望找到数据(例如要训练的图像)和用于该训练的 meta-data 时,您指的是本地文件夹。

"magic" 是如何从 S3 获取数据以供本地训练实例使用。这是使用训练作业配置中的通道定义完成的。每个通道定义都会在训练实例上创建一个本地文件夹,并将数据从 S3 复制到该本地文件夹。您需要匹配名称以及 S3 位置和文件格式。

这是 SageMaker 中通道定义的文档:https://docs.aws.amazon.com/sagemaker/latest/dg/API_Channel.html

对于图像分类的built-in算法的具体示例,如果您使用图像格式进行训练,请指定trainvalidationtrain_lstvalidation_lst 个频道作为 CreateTrainingJob 请求的 InputDataConfig 参数的值。为训练和验证通道指定单独的图像数据(.jpg 或 .png 文件)。在每个 train_lst 和 validation_lst 通道中指定一个 .lst 文件。将所有四个频道的内容类型设置为 application/x-image.

在此处查看更多详细信息:https://docs.aws.amazon.com/sagemaker/latest/dg/image-classification.html#IC-inputoutput