Skip to main content
 首页 » 编程设计

python之Tensorflow 的计算时间在非常简单的 "for loop"中逐渐变慢

2025年05月04日24xiaohuochai

我在 tensorflow 上有一个很奇怪的问题。我将我的问题简化为以下版本:

我只是用tensorflow语言写了一个简单的矩阵乘法,然后把这个矩阵乘法放在一个“for循环”中(当然你也可以把其他复杂的函数放在for循环中,结论是一样的)。

我设置了10000次迭代,打印每次循环的耗时,然后可以观察到耗时在逐渐增加。(我希望每次循环的时间都一样,但是没有。)

import tensorflow as tf 
import numpy as np 
import datetime   
 
graph=tf.Graph() 
with graph.as_default():   
    with tf.device("/gpu:0"): 
        a=np.arange(10).reshape(1,-1) 
        b=np.arange(100).reshape(10,10) 
        A = tf.placeholder(tf.float32, [1,10]) 
        B = tf.placeholder(tf.float32, [10,10]) 
 
 
        sess = tf.InteractiveSession() 
 
        for step in range(10000): 
            starttime = datetime.datetime.now()   
 
            RESULT = tf.matmul(A,B) 
            RESULT=sess.run(RESULT,feed_dict={A: a, B: b}) 
 
            endtime = datetime.datetime.now()   
            print(endtime-starttime) 

一开始,程序打印出如下结果:

0:00:00.003058 
0:00:00.003216 
0:00:00.003195 
0:00:00.003213 
0:00:00.003653 
0:00:00.003599 
0:00:00.003297 
0:00:00.003172 
0:00:00.003235 
0:00:00.004374 
0:00:00.003442 
0:00:00.003387 
0:00:00.003290 

几秒钟后,我得到了这个:

0:00:00.011470 
0:00:00.013232 
0:00:00.013088 
0:00:00.015906 
0:00:00.012659 
0:00:00.012914 
0:00:00.012562 
0:00:00.011941 
0:00:00.013575 
0:00:00.012251 
0:00:00.013759 
0:00:00.012534 
0:00:00.011859 
 
... 
 
0:00:00.031062 
0:00:00.031676 
0:00:00.031388 
0:00:00.031349 
0:00:00.032476 
0:00:00.031337 
0:00:00.031147 
0:00:00.031121 
0:00:00.030795 
0:00:00.031143 
0:00:00.031277 
0:00:00.031015 
0:00:00.034139 
0:00:00.032749 

这意味着计算正在变慢。谁能告诉我为什么?非常感谢。

请您参考如下方法:

每次执行循环时,您都在创建一个新操作。 (tf.matmul)

因此,您的 tensorflow 图正在失控。

在 tensorflow 中,您创建一次操作(例如:tf.matmul(A,B)),然后使用 sess.run 多次执行此操作(例如:sess.run(RESULT, feed_dict={A: ai , B: bi}.

创建一个操作就像编写一个函数或创建一个处理单元,您只需创建一次,然后就可以将它用于许多输入。