Sagemaker管道|将字符串列表作为参数传递



Sagemaker Pipeline只有用于单个值(字符串、浮点值等(的Parameter类,但我如何处理最好用列表表示的参数(例如,从具有许多功能的文件中选择用于训练的功能列表(?

背景:通常,根据使用特性名称(例如数据帧panda的列名(的最佳实践,这些名称之间应该没有空格。

基本情况

绕过您的问题,您可以使用字符串作为参数,其中每个元素都是一个单独的功能。

features = "feature_0 feature_1 feature_2"

然后,将其与ParameterString一起正常使用。

如果不能这样做,我建议在名称之间插入一个特定的分隔模式,而不是空格,然后将整个字符串拆分到功能列表中

此时,在训练脚本中,您将参数传递给ArgumentParser,您可以将其配置为将空格分隔的字符串重新处理为单个单词的列表。

import argparse
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument(
"--features",
nargs="*",
type=str,
default=[]
)
args, _ = parser.parse_known_args()

额外案例

如果在将参数传递给管道组件(例如,预处理器(时,字符串被错误地直接解释为列表,则可以使用输入重新解释函数对后者进行重新解释。

import itertools
def decode_list_of_strings_input(str_input: str) -> []:
str_input = [s.split() for s in str_input]
return list(itertools.chain.from_iterable(str_input))

以下是使用此代码的示例:

features = ['a b c']
features = decode_list_of_strings_input(features)
print(features)
>>> ['a', 'b', 'c']

最新更新