构建用于图像分类的卷积神经网络是我第一次涉足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)'
我真的很希望能够灵活地对更大批量进行训练,同时仍然能够对单个图像进行分类。
我的问题与此处的其他问题非常相似,例如Training in batches but testing individual data item in Tensorflow?和Tensorflow: Layer size dependent on batch size?,但由于我缺乏tf经验,因此我无法在代码中实现建议的解决方案。
我已经根据用于MNIST数据库https://www.tensorflow.org/tutorials/estimators/cnn#train_eval_mnist的tensorflow网站上给出的示例编写了用于图像分类的训练和推理代码。我的代码使用tf.estimators https://www.tensorflow.org/guide/estimators高级tensorflow API。上面询问和回答的类似问题的解决方案建议修改tf.placeholders,我不(知道)在使用它。我已经在下面复制了用于输入函数和模型函数的代码。我确定我需要发布更多信息,但这也是我问过的第一个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)