如果我有来自Google的训练过的Imagnet模型(inception-resnet-v2),该模型实际上给了我两个输出:logits
,以及一个名为end_points的列表,我可以在其中提取最终的预测层已经使用softmax激活执行,即称为predictions
的变量。但是,这并没有明确地给我一个我需要预测的类标签。为此,我要么必须在之后执行{/ 1}} 我在图表中定义了train_op,这样我就不会影响原始计算。
或者,我可以使用从图表中计算的label = tf.argmax(predictions, 1)
。
我的问题是,如果我选择第一种方法,是否会消耗更多内存并影响我的计算(就我可以使用的batch_size而言)?从图表中计算出必要的标签是否更安全,更好?
答案 0 :(得分:1)
发出多个.run
调用时,会缓存图表定义。如果您修改图形,它将需要重新编码并再次发送。因此,第一次运行修改后的图表时,graph_def.SerializeToString
可能会使用一些额外的内存,但在此之后不应影响.run
步骤。
相关逻辑位于session.py,请注意检查self._graph.version > self._current_version
def _extend_graph(self):
# Ensure any changes to the graph are reflected in the runtime.
with self._extend_lock:
if self._graph.version > self._current_version:
# pylint: disable=protected-access
graph_def, self._current_version = self._graph._as_graph_def(
from_version=self._current_version,
add_shapes=self._add_shapes)
# pylint: enable=protected-access
with errors.raise_exception_on_not_ok_status() as status:
tf_session.TF_ExtendGraph(
self._session, graph_def.SerializeToString(), status)
self._opened = True