我是TensorFlow的新手.我正在寻找有关图像识别的帮助,我可以在那里训练自己的图像数据集.
有没有训练新数据集的例子?
如果您对如何在TensorFlow中输入自己的数据感兴趣,可以查看本教程.
我也写与CS230的最佳做法指南在斯坦福这里.
tf.data
)和标签随着引进tf.data
的r1.4
,我们可以创建一个批处理图像没有占位符的,没有队列.步骤如下:
创建一个列表,其中包含图像的文件名和相应的标签列表
创建tf.data.Dataset
读取这些文件名和标签
预处理数据
从中创建一个迭代器tf.data.Dataset
将产生下一批
代码是:
# step 1 filenames = tf.constant(['im_01.jpg', 'im_02.jpg', 'im_03.jpg', 'im_04.jpg']) labels = tf.constant([0, 1, 0, 1]) # step 2: create a dataset returning slices of `filenames` dataset = tf.data.Dataset.from_tensor_slices((filenames, labels)) # step 3: parse every image in the dataset using `map` def _parse_function(filename, label): image_string = tf.read_file(filename) image_decoded = tf.image.decode_jpeg(image_string, channels=3) image = tf.cast(image_decoded, tf.float32) return image, label dataset = dataset.map(_parse_function) dataset = dataset.batch(2) # step 4: create iterator and final input tensor iterator = dataset.make_one_shot_iterator() images, labels = iterator.get_next()
现在我们可以直接运行sess.run([images, labels])
而无需通过占位符提供任何数据.
总结一下,你有多个步骤:
创建文件名列表(例如:图像的路径)
创建TensorFlow 文件名队列
读取和解码每个图像,将其大小调整为固定大小(批处理所需)
输出一批这些图像
最简单的代码是:
# step 1 filenames = ['im_01.jpg', 'im_02.jpg', 'im_03.jpg', 'im_04.jpg'] # step 2 filename_queue = tf.train.string_input_producer(filenames) # step 3: read, decode and resize images reader = tf.WholeFileReader() filename, content = reader.read(filename_queue) image = tf.image.decode_jpeg(content, channels=3) image = tf.cast(image, tf.float32) resized_image = tf.image.resize_images(image, [224, 224]) # step 4: Batching image_batch = tf.train.batch([resized_image], batch_size=8)