如何在张量流中输入feed_dict我自己的图像数据

时间:2017-11-08 14:57:24

标签: tensorflow

我有以下代码:

files = (glob.glob("*.jpg"))
q = tf.train.string_input_producer(files)
reader = tf.WholeFileReader()
file_name, content = reader.read(q)
image = tf.image.decode_jpeg(content, channels=3)
image = tf.cast(image, tf.float32)
resized_image = tf.image.resize_images(image, [110, 110])
image_batch = tf.train.batch([resized_image], batch_size=5)

如何使用image_batch训练模型?如何将image_batch提供的图像提供给模型,即feed_dict

1 个答案:

答案 0 :(得分:0)

tf.train.batch已经让你退缩了。此API(称为输入管道)允许您将输入作为张量传输,而无需在会话中手动输入numpy数组。

您可以使用image_batch来构建模型,就像它是占位符一样。例如,建立一个卷积网络:

files = (glob.glob("_data/*.jpg"))
q = tf.train.string_input_producer(files)
reader = tf.WholeFileReader()
file_name, content = reader.read(q)
image = tf.image.decode_jpeg(content, channels=3)
image = tf.cast(image, tf.float32)
resized_image = tf.image.resize_images(image, [110, 110])
image_batch = tf.train.batch([resized_image], batch_size=5)
# >>> image_batch
# Tensor("batch:0", shape=(5, 110, 110, 3), dtype=float32)

weights = tf.Variable(tf.truncated_normal([3, 3, 3, 10], stddev=0.01))
biases = tf.Variable(tf.constant(0.01, shape = [10]))
layer = tf.nn.conv2d(image_batch, weights, strides=[1, 1, 1, 1], padding='SAME')
pool = tf.layers.max_pooling2d(layer, 2, 2)
flat = tf.reshape(pool, [-1, 55 * 55 * 10])

通常,您希望同时阅读示例标签,并使用它们来定义损失函数并对其进行优化。在会话中,您只需运行ops,就像已经定义了占位符一样:

with tf.Session() as sess:
  coord = tf.train.Coordinator()
  threads = tf.train.start_queue_runners(coord=coord)

  sess.run(tf.global_variables_initializer())
  computed_weights = sess.run(flat)
  # computed_weights: (5, 30250) array

  coord.request_stop()
  coord.join(threads)

请注意,为了输入数据,必须启动协调器。 您可以使用此管道执行许多操作,请参阅this blog-postofficial tensorflow tutorial