首页 文章

将tf.image.decode_jpeg添加到Keras创建的图形中

提问于
浏览
1

我想尝试使用Keras Sequential模型来训练一个图像分类问题的预测 . 我的训练集是18K图像455x255,它可能太大而无法放入内存中,因此我想使用某种批处理管道 .

在我最初的tensorflow实现中,我有这个代码,类似于MNIST tensorflow example

如何将此管道提供给Sequential模型,以创建类似Keras cifa10_cnn example的内容

with tf.name_scope('input'):
  # Input data
  images_initializer = tf.placeholder(
    dtype=tf.string,
    shape=[len_all_filepaths])
  labels_initializer = tf.placeholder(
    dtype=tf.int32,
    shape=[len_all_filepaths])
  input_images = tf.Variable(
    images_initializer, trainable=False, collections=[])
  input_labels = tf.Variable(
    labels_initializer, trainable=False, collections=[])

  image, label = tf.train.slice_input_producer(
    [input_images, input_labels], num_epochs=FLAGS.num_epochs)

  # process path and string tensor into an image and a label
  file_contents = tf.read_file(image)
  image_contents  = tf.image.decode_jpeg(file_contents, channels=NUM_CHANNELS)
  image_contents.set_shape([None, None, NUM_CHANNELS])

  # Rotate if necessary
  rotated_image_contents, = tf.py_func(rotate, [image_contents], [tf.uint8])
  rotated_image_contents.set_shape([IMAGE_HEIGHT, IMAGE_WIDTH, NUM_CHANNELS])
  rotated_image_contents = tf.image.per_image_whitening(rotated_image_contents)

  images, labels = tf.train.batch(
    [rotated_image_contents, label],
    batch_size=FLAGS.batch_size,
    num_threads=16,
    capacity=3 * FLAGS.batch_size
  )


# Build a Graph that computes predictions from the inference model.
logits = model.inference(images, len(correct_labels))

# Add to the Graph the Ops for loss calculation.
loss = model.loss(logits, labels)

# Add to the Graph the Ops that calculate and apply gradients.
train_op = model.training(loss, FLAGS.learning_rate)

...

1 回答

  • 0

    我认为Keras的ImageDataGenerator已经为您进行了批处理 . 我不明白为什么具有指定批量大小的Keras datagen.fit()和标准生成器不适用于您的用例 .

相关问题