Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Kedro的何处执行节点输出的保存?_Python_Tensorflow_Kedro - Fatal编程技术网

Python 在Kedro的何处执行节点输出的保存?

Python 在Kedro的何处执行节点输出的保存?,python,tensorflow,kedro,Python,Tensorflow,Kedro,在Kedro中,我们可以通过管道传输不同的节点,并部分运行一些节点。当我们部分运行某些节点时,我们需要将节点的一些输入保存在某个位置,以便在运行另一个节点时,它可以访问前一个节点生成的数据。但是,我们应该在哪个文件中编写此代码-pipeline.py、run.py或nodes.py 例如,我试图将dir路径直接保存到变量名为“model_path”的DataCatalog pipeline.py中的代码段: # A mapping from a pipeline name to a ``

在Kedro中,我们可以通过管道传输不同的节点,并部分运行一些节点。当我们部分运行某些节点时,我们需要将节点的一些输入保存在某个位置,以便在运行另一个节点时,它可以访问前一个节点生成的数据。但是,我们应该在哪个文件中编写此代码-pipeline.py、run.py或nodes.py

例如,我试图将dir路径直接保存到变量名为“model_path”的DataCatalog

pipeline.py中的代码段:

    # A mapping from a pipeline name to a ``Pipeline`` object.
def create_pipelines(**kwargs) -> Dict[str, Pipeline]:
io = DataCatalog(dict(
    model_path=MemoryDataSet()
))

io.save('model_path', "data/06_models/model_test")
print('****', io.exists('model_path'))

pipeline = Pipeline([
    node(
        split_files,
        ["data_csv", "parameters"],
        ["train_filenames", "val_filenames", "train_labels", "val_labels"],
        name="splitting filenames"
    ),
    # node(
    #     create_and_train,
    #     ["train_filenames", "val_filenames", "train_labels", "val_labels", "parameters"],
    #     "model_path",
    #     name="Create Dataset, Train and Save Model"
    # ),
    node(
        validate_model,
        ["val_filenames", "val_labels", "model_path"],
        None,
        name="Validate Model",
    )

]).decorate(decorators.log_time, decorators.mem_profile)

return {
    "__default__": pipeline
}
但是,我在运行Kedro时遇到以下错误:

ValueError: Pipeline input(s) {'model_path'} not found in the DataCatalog

节点输入由Kedro从
DataCatalog
自动加载,然后传递给节点函数。因此,节点成功生成某些数据后,节点输出将保存到DataCatalog。默认情况下,DataCatalog配置取自
conf/base/catalog.yml

在您的示例中,
模型_路径
创建数据集、训练和保存模型
节点生成,然后由
验证模型
使用。如果在
conf/base/catalog.yml
中找不到所需的数据集定义,Kedro将尝试使用
MemoryDataSet
将此数据集存储在内存中。如果运行同时包含
Create Dataset…
Validate Model
节点的管道(假设没有出现其他问题),这将起作用。但是,当您试图单独运行
验证模型
节点时,Kedro会尝试从内存中读取
模型路径
数据集,而内存中不存在该数据集

因此,TLDR

要缓解此问题,您需要:

a) 通过向您的
conf/base/catalog.yml
中添加以下内容来持久化
model\u路径

model_path:
  type: TextLocalDataSet
  filepath: data/02_intermediate/model_path.txt
b) 运行
创建数据集、训练和保存模型
节点(及其依赖项)至少一次

完成a)和b)后,您应该能够分别开始运行
验证模型