我想为我在管道中执行的函数添加
argparse
元组。为了简单起见,我将跳过读取数据和其他与主题不太相关的步骤。看起来像这样:
def model_train_sales(X_train, order: tuple, seasonal_order: tuple):
model = sm.tsa.SARIMAX(X_train['sales'], order=order, seasonal_order=seasonal_order)
results = model.fit()
return model, results
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--order", type=tuple)
parser.add_argument("--seasonal_order", type=tuple)
args = parser.parse_args()
model, results = model_train_sales(X_train['sales'], order=args.order,
seasonal_order=args.seasonal_order)
此时一切都很好,但是当你开始构建管道时,解析变量的类型不同了。
from azure.ai.ml import command
from azure.ai.ml import Input, Output
demo_model_training_component = command(
name='my sarima pipeline',
display_name='my description',
description='A long description.',
inputs={
"order": Input(type='<TYPE>'),
"seasonal_order": Input(type='<TYPE>'),
},
outputs=dict(
df = Output(type="uri_folder", mode="rw_mount")
),
code = feature_creation_src_dir,
command = """python sarima_model.py \
--order ${{inputs.order}} --seasonal_order ${{inputs.seasonal_order}} \
--df ${{outputs.df}}
""",
environment = f"{pipeline_job_env.name}"{pipeline_job_env.version}",
)
这里我在不确定应该是哪种类型的地方签了
<TYPE>
。我知道类型有限,要么是string
,integer
,number
,要么是bool
。
有什么方法可以解析其中的元组吗?或者唯一的方法是分别解析
p, d, q
和 P, D, Q, S
并将它们组合成主函数中的元组?
不能传递
tuple
类型对象,仅支持 Input
、dict
、str
、bool
、int
和 float
。
但是,您可以将其作为字符串传递并在
main.py
中将其转换为元组。
在主函数中将其作为字符串给出。
def model_train_sales(X_train, order: tuple, seasonal_order: tuple):
model = sm.tsa.SARIMAX(X_train['sales'], order=order, seasonal_order=seasonal_order)
results = model.fit()
return model, results
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--order", type=str)
parser.add_argument("--seasonal_order", type=str)
print("\n")
print("------------------------------------------------\n")
result_tuple = tuple(args.order.split(','))
print(result_tuple)
print("\n")
print("------------------------------------------------\n")
args = parser.parse_args()
model, results = model_train_sales(X_train['sales'], order=args.order,
seasonal_order=args.seasonal_order)
接下来,将其作为带有逗号分隔值的字符串在命令作业中传递。
from azure.ai.ml import command
from azure.ai.ml import Input, Output
demo_model_training_component = command(
name='my sarima pipeline',
display_name='my description',
description='A long description.',
inputs={
"order": "p,d,q",
"seasonal_order": "P,D,Q,S",
},
outputs=dict(
df = Output(type="uri_folder", mode="rw_mount")
),
code = feature_creation_src_dir,
command = """python sarima_model.py \
--order ${{inputs.order}} --seasonal_order ${{inputs.seasonal_order}} \
--df ${{outputs.df}}
""",
environment = f"{pipeline_job_env.name}"{pipeline_job_env.version}",
)
输出:
和