如何通过Tensorflow python

时间:2017-11-23 05:41:39

标签: python python-3.x machine-learning tensorflow jpeg

过去几天我尝试将图像从桌面导入Tensorflow时遇到了很多困难。我查看了API并搜索了一些online tutorials,然而,我的运气一直很低,而且我无法理解我读过的内容。我尝试创建一个从我所理解的东西中导入图像的功能,这并不令人意外地失败。以下是我到目前为止所做的事情。在通过调试器运行之后,我发现程序卡在第一行。 Tensorflow API说我必须传递文件模式或1D张量的文件模式。不是我给出文件模式的文件路径吗?

def import_data():

    image_path = tf.train.match_filenames_once("C:\Users\ratno\Desktop\honest chaos\*.JPG")
    filename_queue = tf.train.string_input_producer(image_path)

    reader = tf.WholeFileReader()

    _, content = reader.read(filename_queue)
    image = tf.image.decode_jpeg(content, channels=1)
    cropped_image = tf.image.resize_image_with_crop_or_pad(image, 3000, 3000)
    reduced_image = tf.image.resize_images(cropped_image, [100, 100])
    modified_image = tf.transpose(tf.reshape(reduced_image, [10000, 1]))

    return modified_image

代码应该从我桌面上的文件夹中获取大量jpgs,并将它们从RGB jpgs转换为灰度jpgs。然后,它将采用灰度jpgs,并将它们裁剪为3000x3000像素大小,并使用tf.resize_images进一步将它们缩小为100x100像素图像。最后,它将以1x10000形状张量的形式返回所有内容。

提前致谢。 如果对代码的其他部分有任何建议,我将非常感激。

2 个答案:

答案 0 :(得分:0)

要在session.run的单次调用中读取多个图像,只需多次调用reader.read()即可。或者,您可以调用一次,并在完成处理后使用tf.train.batch获取图像的小批量。

答案 1 :(得分:0)

def _parse_function(filename):
    image_string = tf.read_file(filename)
    image_decoded = tf.cond(
        tf.image.is_jpeg(image_string),
        lambda: tf.image.decode_jpeg(image_string, channels=3),
        lambda: tf.image.decode_png(image_string, channels=3))
    image_resized = tf.image.resize_images(image_decoded, [90, 90])
    return image_resized
filenames = ["/var/data/image1.jpg", "/var/data/image2.jpg", ...]
labels = [0, 37, 29, 1, ...]
dataset = tf.data.Dataset.from_tensor_slices((filenames, labels))
dataset = dataset.map(_parse_function)
dataset = dataset.batch(batch_size)
iterator = dataset.make_one_shot_iterator()