如何提供分类器以在 Tensorflow 上进行训练

Posted

技术标签:

【中文标题】如何提供分类器以在 Tensorflow 上进行训练【英文标题】:How to feed the classifier to train on Tensorflow 【发布时间】:2018-03-27 05:54:30 【问题描述】:

我读取了将用于在数据集中训练我的分类器的图像,如下所示:

filename_strings = []
label_strings = []
for dirname, dirnames, filenames in os.walk('training'):
    for filename in filenames:
        filename_strings.append(dirname + '\\' + filename)
        label_strings.append(dirname)

filenames = tf.constant(filename_strings)
labels    = tf.constant(label_strings)
dataset = tf.contrib.data.Dataset.from_tensor_slices((filenames, labels))
dataset_train = dataset.map(_parse_function)

_parse_function:

# Reads an image from a file, decodes it into a dense tensor, and resizes it
# to a fixed shape.
def _parse_function(filename, label):
    image_string = tf.read_file(filename)
    image_decoded = tf.image.decode_png(image_string)
    image_resized = tf.image.resize_images(image_decoded, [28, 28])
    return image_decoded, label

但是现在我不能喂火车了。:

# Create the Estimator
mnist_classifier = tf.estimator.Estimator(
model_fn=cnn_model_fn, model_dir="/model")
# Set up logging for predictions
tensors_to_log = "probabilities": "softmax_tensor"
logging_hook = tf.train.LoggingTensorHook(
tensors=tensors_to_log, every_n_iter=50)

# Train the model
train_input_fn = tf.estimator.inputs.numpy_input_fn(
    x= "x": dataset_train ,
    y= dataset_train,
    batch_size=100,
    num_epochs=None,
    shuffle=True)
mnist_classifier.train(
    input_fn=train_input_fn,
    steps=200,
    hooks=[logging_hook])

我正在尝试遵循本教程A Guide to TF Layers: Building a Convolutional Neural Network ,但使用我自己的图像集。

我可以不直接使用数据集来提供训练步骤吗?我的意思是,我只有一个张量,其中包含每个图像的特征和标签。

【问题讨论】:

对于numpy_input_fn,您的数据集应在numpy 中,因此_parse_function 必须将图像作为numpy 数组返回 【参考方案1】:

您参考的教程将数据读入一个 numpy 数组(请参阅the code here)并使用tf.estimator.inputs.numpy_input_fn 传递输入。这是最简单的方法。

但是,如果您从一开始就喜欢使用张量,也可以使用custom input function。这是一个简单的例子:

def read_images(batch_size):
  # A stub. Should read the next batch, shuffle it, etc
  images = tf.zeros([batch_size, 28, 28, 1]) # 4-rank tensor
  labels = tf.ones([batch_size])             # 1-rank tensor (not one-hot encoded)
  return images, labels

def simple_input():
  x, labels = read_images(batch_size=10)
  return "x": x, labels

tensors_to_log = "probabilities": "softmax_tensor"
logging_hook = tf.train.LoggingTensorHook(tensors=tensors_to_log, every_n_iter=50)

classifier.train(input_fn=simple_input,
                 steps=10,
                 hooks=[logging_hook])

【讨论】:

以上是关于如何提供分类器以在 Tensorflow 上进行训练的主要内容,如果未能解决你的问题,请参考以下文章

如何编写自定义排序器以在 UI 中按名称对 springdoc swagger 标签进行排序?

获取预加载器以在按钮单击时显示

如何集成所有分类器以进行多标签 svm 分类

如何转换自定义矢量化器以预测分类?

Select2 自定义匹配器以在组标题匹配时保持选项打开

创建自定义导航栏渲染器以在 xamarin 表单 IOS 项目中添加自定义后退按钮图标