我有下面的代码,它从本地磁盘上的文件中读取一批10幅图像。
问题是代码运行速度似乎非常慢。它大约需要5-6分钟才能完成。包含图像的目录包含大约。25.000张照片。
代码是正确的还是我做了什么蠢事?
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
import tensorflow as tf
image_width = 202
image_height = 180
num_channels = 3
filenames = tf.train.match_filenames_once("./train/Resized/*.jpg")
def read_image(filename_queue):
image_reader = tf.WholeFileReader()
key, image_filename = image_reader.read(filename_queue)
image = tf.image.decode_jpeg(image_filename)
image.set_shape((image_height, image_width, 3))
return image
def input_pipeline(filenames, batch_size, num_epochs=None):
filename_queue = tf.train.string_input_producer(filenames, num_epochs=num_epochs, shuffle=True)
input_image = read_image(filename_queue)
min_after_dequeue = 10000
capacity = min_after_dequeue + 3 * batch_size
image_batch = tf.train.shuffle_batch(
[input_image], batch_size=batch_size, capacity=capacity,
min_after_dequeue=min_after_dequeue)
return image_batch
new_batch = input_pipeline(filenames, 10)
with tf.Session() as sess:
# Required to get the filename matching to run.
tf.global_variables_initializer().run()
# Coordinate the loading of image files.
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
b1 = sess.run(new_batch)
# Finish off the filename queue coordinator.
coord.request_stop()
coord.join(threads)发布于 2017-02-24 16:38:39
将min_after_dequeue减少到1000,并尝试一次。查看不同min_after_dequeue值的下列时间线。
dequeue = 2000 => 2.1 sec to finish
dequeue = 100 => 0.13 sec to finish
执行以下操作以获得时间线
from tensorflow.python.client import timeline
run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
run_metadata = tf.RunMetadata()
b1 = sess.run(new_batch,options=run_options,run_metadata=run_metadata)
# Create the Timeline object, and write it to a json
tl = timeline.Timeline(run_metadata.step_stats)
ctf = tl.generate_chrome_trace_format()
with open('timelinestack1.json', 'w') as f:
f.write(ctf)此外,确保您的所有图像都有相同的大小,如您提到的。否则,在set_shape()之前使用下面一行。
image = tf.image.resize_images(imaged, [224, 224])我希望我给出一个合理的答案。
https://stackoverflow.com/questions/42404567
复制相似问题