Performance 在循环中使用TensorFlow输入函数时性能不佳

Performance 在循环中使用TensorFlow输入函数时性能不佳,performance,opencv,machine-learning,tensorflow,neural-network,Performance,Opencv,Machine Learning,Tensorflow,Neural Network,我目前正在训练一组大约10000张包含十个时代的图片。我的问题是关于以下代码: file_contents = cv2.imread(shuffle_image_list[i],3) resized_image = cv2.resize(file_contents, (72,72), interpolation = cv2.INTER_AREA) data = np.array(resized_image)

我目前正在训练一组大约10000张包含十个时代的图片。我的问题是关于以下代码:

            file_contents = cv2.imread(shuffle_image_list[i],3)
            resized_image = cv2.resize(file_contents, (72,72), interpolation = cv2.INTER_AREA) 
            data = np.array(resized_image)
            flattened = data.flatten() 

            #image_batch, label_batch = tf.train.batch([resized_image, shuffle_label_list[i]], batch_size=batch_size) # does train.batch take individual images or final tensors
            #if(i>batch_size):
                #print(label_batch.eval())
            print(str(i))
            imageArr.append(flattened)
            labelArr.append(int(shuffle_label_list[i]))
            if i % 100 == 0:
                print("....... " + str(i))
                _, c = sess.run([optimizer, cost], feed_dict={x: imageArr, y: labelArr})
                epoch_loss += c
                imageArr = []
                labelArr = []
在这里,我将100张一小批的图像输入神经网络。代码最初得到一个字符串,文件内容。然后该字符串被解码成jpg。但是,当我使用TensorFlow的函数时,比如tf.decode_jpeg和tf.reforme()等,速度会有所不同。当使用TensorFlow函数来完成相同的图像解码任务时,它在训练过程中开始得很快,然后在第一个历元之后变得非常缓慢

为了更好地理解这一点,使用OpenCV,我可以在大约1小时30分钟内对整个模型进行10个阶段的训练。然而,使用TensorFlow的函数,花了12个多小时才通过第一个历元,在第二个历元的中途,我在看到它的进展后停止了训练过程

我不确定这是否与网络减速的概念有关。我只是用TensorFlow函数替换OpenCV函数来解码图像和读取文件。为什么OpenCV和TensorFlow之间存在如此巨大的速度差异?为什么TensorFlow的函数会随着代码的进行而变慢?这会对模型的准确性产生任何影响吗


注意:我唯一更改的功能是在顶部。两个版本中我都没有使用tf.train.batch。唯一改变的是从文件内容到数据.flatte(),再到相应的tensorflow函数的代码行。

我怀疑您在为循环调用外部
的每次迭代中调用了
tf.train.batch()
,因此tensorflow图随着每次迭代而增长。有关如何修复此问题的讨论,请参阅。抱歉,我忘了提及,我没有使用tf.train.batch,我将更新问题。您能展示“相应的TensorFlow函数”的代码是什么样子吗?我怀疑无论您调用什么(例如,
tf.decode\u jpeg()
),如果您在循环中调用它,它将与.Yes,tf.decode\u jpeg和tf.readfile中的问题具有相同的基本问题。为什么它会有与该问题相同的潜在问题?调用这些函数会将节点添加到图形中。每次向图形中添加一个或多个节点并调用
sess.run()
,TensorFlow都会在图形的当前大小中线性工作。如果您有一个循环,在每次迭代中添加恒定数量的节点,那么很不幸,您最终会做迭代次数为二次的工作,这解释了为什么您的程序会变慢。在循环外部调用
tf.decode\u jpeg()
tf.read\u file()
,每次使用feed/placeholder传入一个新文件名。