在Tensorflow中,fetches
的{{1}}参数有两个目的:它确保运行某些操作,并将值返回给python。我的问题是我需要多么关注,以避免返回我真正不需要的价值观。例如,假设操作tf.Session.run
取决于操作a
,以便在评估b
时a
也是如此。可以更快地完成
b
而非
a = sess.run([a])
因为后者会将a, _ = sess.run([a,b])
的输出从GPU复制到CPU只是为了丢弃它?如果python端只需要b
中的一小部分信息,那么根据a
制作张量通常是一个很好的做法,它仅具有所需要的并且取而代之而不是a
?或者我误解了这些GPU-CPU传输是如何工作的?我认为有可能分析在这些转移中花费了多少时间(例如,请参见此处的图表:https://github.com/tensorflow/tensorflow/issues/4526),但我还不了解该怎么做,我想知道如果我至少在正确地概念化事物,无论我的特定应用程序是否恰好在这里出现瓶颈。
答案 0 :(得分:0)
相对重要,因为python包装器必须从C ++张量内存转换为python numpy数组,从而进行复制操作。如果您正在获取大变量,那么时间可能并非微不足道,请考虑每次都必须转换1GB。