Обучение партиями, но выполнение классификации отдельных изображений с использованием tf.estimators в Tensorflow - PullRequest
0 голосов
/ 26 октября 2018

Построение сверточной нейронной сети для классификации изображений было моей первой попыткой и в Python, и в Tensorflow.У меня есть большая база данных изображений для обучения, и мое приложение представляет собой быструю классификацию отдельных изображений в режиме реального времени.В настоящее время, чтобы выполнить вывод отдельных изображений, я должен сделать размер обучающей партии равным 1. Если я не (а размер обучающей партии равен 16), я получаю следующую ошибку:

ValueError: Cannot feed value of shape (1, 132, 128, 1) for Tensor 
'tf_reshape1:0', which has shape '(16, 132, 128, 1)'

Мне бы очень хотелось иметь возможность тренироваться на больших размерах партий, в то же время имея возможность классифицировать отдельные изображения.

Мой вопрос очень похож на другие, задаваемые здесь, например Обучение партиямино тестирование отдельного элемента данных в Tensorflow? и Tensorflow: размер слоя зависит от размера пакета? , но отсутствие опыта работы с tf означает, что я не могу внедрить предложенные решения в свой код.

Я написал свои обучающие и логические коды для классификации изображений, основываясь на примере, приведенном на веб-сайте tenorflow для классификации базы данных MNIST https://www.tensorflow.org/tutorials/estimators/cnn#train_eval_mnist. В моих кодах используются tf.estimators https://www.tensorflow.org/guide/estimators API-интерфейс тензорного потока высокого уровня.Решения для аналогичного вопроса, задаваемого и отвеченного выше, предполагают модификацию держателей tf.place, которые я не использую (сознательно).Я скопировал свой код для функции ввода и функции модели, которую я использую ниже.Я уверен, что мне нужно будет публиковать больше, но это также первый SO вопрос, который я задал, так что извиняюсь, если я забыл много вещей.

Обучение:

bead_classifier = tf.estimator.Estimator(
                 model_fn=bead_model_fn, 

model_dir=r'/tmp/trained_model')

# Train the model
train_input_fn = tf.estimator.inputs.numpy_input_fn(
  x={"x": training_imgs},
  y=training_labels,
  batch_size=16,
  num_epochs=None,
  shuffle=True)
bead_classifier.train(
  input_fn=train_input_fn,
  steps = 13000)
  hooks=[logging_hook])

Функция модели (только первые несколько слоев):

 def bead_model_fn(features, labels, mode):
  """Model function for CNN."""
  # Input Layer
  # Reshape X to 4-D tensor: [batch_size, width, height, channels]

input_layer = tf.reshape(features["x"], [-1, 132, 128, 1], name = 
'tf_reshape1')

  # Convolutional Layer #1

  conv1 = tf.layers.conv2d(
      inputs=input_layer,
      filters=4,
      kernel_size=[2, 2],
      padding="same",
      activation=tf.nn.relu)

  # Pooling Layer #1
  pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)

  # Convolutional Layer #2
  conv2 = tf.layers.conv2d(
      inputs=pool1,
      filters=8,
      kernel_size=[2, 2],
      padding="same",
      activation=tf.nn.relu)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...