TensorFlow C++ API中Session::Run的fetch_outputs与run_outputs区别
TensorFlow Session::Run中fetch_outputs与run_outputs的区别
嘿,这个问题问到点子上了!作为经常和TensorFlow C++ API打交道的人,我来给你把这两个参数的区别讲得明明白白:
核心区别概述
简单来说,这两个参数都是用来告诉TensorFlow要执行图中的哪些部分,但目的完全不同:
1. fetch_outputs:获取你需要的张量结果
- 这个参数接收的是
std::vector<Output>类型,里面放的是你想要获取具体值的节点输出。 - 当Session运行时,TensorFlow会计算这些
Output对应的张量,并把结果按顺序存入outputs指针指向的std::vector<Tensor>中。 - 典型场景:推理时获取模型的输出张量、训练时获取当前步的损失值/准确率张量等。
2. run_outputs:强制执行有副作用的操作
- 这个参数接收的是
std::vector<Operation>类型,里面放的是你只需要执行但不需要获取输出的操作节点。 - 这些操作通常带有副作用:比如更新变量的
Assign操作、训练时的优化器minimize操作、写入文件的操作等。你不需要它们的输出,只需要确保它们被执行。 - 典型场景:执行训练操作更新模型权重、执行变量初始化操作、执行数据写入操作等。
实际例子理解
举个训练时的常见场景:
假设你定义了一个优化器的训练操作
train_op(用来更新模型参数),还有一个损失张量loss_tensor(用来查看当前训练步的损失值)。调用Session::Run时:
fetch_outputs列表中加入loss_tensor对应的Outputrun_outputs列表中加入train_op对应的Operation
这样TensorFlow会先执行train_op(完成参数更新的副作用),同时计算loss_tensor的值并返回给你,一举两得。
补充说明
TensorFlow的执行是基于依赖图的:不管是fetch_outputs还是run_outputs里的节点,都会触发它们所有依赖的前置节点执行。区别只在于,前者会把计算结果返回给你,后者只执行操作不返回结果。
内容的提问来源于stack exchange,提问作者Summer_More_More_Tea
相关产品推荐
相关产品推荐

