Tensorflow“不完整的形状”是什么意思?

问题描述 投票:5回答:1

我正在审查tensorflow日志,发现以下行:

4 ops no flops stats due to incomplete shapes. Consider passing run_meta to use run_time shapes.

此消息似乎来自following code

for op in graph.get_operations():
    try:
      stats = ops.get_stats_for_node_def(
          graph, op.node_def, REGISTERED_FLOP_STATS)
    except ValueError:
      # Catch Exception When shape is incomplete. Skip it.
      op_missing_shape += 1
      stats = None
  ......
  if op_missing_shape > 0 and not run_meta:
    sys.stderr.write('%d ops no flops stats due to incomplete shapes.\n' %
                     op_missing_shape)

在与GRU类似的情况下,日志中的这一行不会出现。所以我认为错误不是由批量大小引起的。你能解释一下它是什么吗?另外如何添加“run_meta”属性?谢谢。

tensorflow
1个回答
4
投票

'...由于形状不完整而没有翻牌统计数据'意味着你有一些变量的未知[形状]信息,例如:处理变量批量大小([无]形状)或tf.while_loop任意时间等时。

相应官方tfprof文档(source):

  • 必须知道RegisterStatistics('flops')的“形状”信息才能计算统计数据。如果形状仅在运行时已知,则建议传入-run_meta_path。 tfprof可以使用RunMetadata中的运行时形状信息填充缺少的形状。

至于RunMetadata,张量流中有一个tf.RunMetadata()操作,应该是你需要的。通常你把它传递给sess.run() op。

解决方案是在运行时传递RunMetadata,此时将定义所有形状。

# Generate the RunMetadata that contains the memory and timing information.
#
# Note: When run on GPU, a kernel is first scheduled (enqueued) and then
#       executed asynchronously. tfprof only tracks the execution time.
#
run_metadata = tf.RunMetadata()
with tf.Session() as sess:
  _ = sess.run(train_op,
               options=tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE),
               run_metadata=run_metadata)

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.