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

时间:2017-02-22 21:44:45

标签: performance opencv machine-learning tensorflow neural-network

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

            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个小批量的图像输送到神经网络。代码最初得到一个字符串,file_contents。然后该字符串被解码为jpg。但是,当我使用TensorFlow的函数(如tf.decode_jpeg和tf.reshape()等)时,速度会有所不同。当使用TensorFlow的功能完成相同的图像解码任务时,它会在训练过程中快速启动,然后在第一个纪元后变得非常慢。

为了正确看待这一点,使用OpenCV,我可以在1小时30分钟内训练整个模型10个时代。然而,使用TensorFlow的功能,花了12个多小时才能超过第一个时期,在第二个时期中途,我看到它正在取得进展后停止了训练过程。

我不确定这是否与网络减速的概念有关,如here所示。我只是用TensorFlow函数替换OpenCV函数来解码图像并读取文件。为什么OpenCV和TensorFlow之间存在明显的速度差异?为什么TensorFlow的功能会随着代码的进展而减慢?这会对模型的准确性产生影响吗?

注意:我改变的唯一功能是在顶部。我没有在任何一个版本中使用tf.train.batch。唯一被改变的是从file_contents到data.flatten()的代码行到相应的tensorflow函数。

0 个答案:

没有答案