【问题标题】:How to read in sequence of images as 3d tensor?如何将图像序列读取为 3d 张量?
【发布时间】:2016-07-25 13:54:20
【问题描述】:

作为我正在处理的 CNN 的输入,我想使用一系列图像(在 conv 层中使用 3D 卷积)。

但是,我已经无法将图像作为可用于计算的 3D 张量读取。

这是我的原始尝试:

def get_sequence_as_tensor(folder):
    images = [folder + "/depth-%i.png" for i in range(15)]

    tensor = tf.zeros(shape=(480, 640, 15), dtype=tf.float32)
    for i, image in enumerate(images):
        img = tf.image.decode_png(image)
        img_float = tf.cast(img, tf.float32)
        img_float = tf.reshape(img_float, (480, 640))
        tensor[:, :, i] = img_float

    return tensor

这已经失败了,因为我不能像我对 numpy 数组所期望的那样对张量使用索引表示法。

TypeError: 'Tensor' object does not support item assignment

将图像序列作为 3d 张量读取的正确方法是什么?

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    我建议将图像组合到 tensorflow 之外的 numpy 数组中,然后将它们传递给占位符。

    这样的事情应该可以工作。

    filename = tf.placeholder("string")
    png_string = tf.read_file(filename)
    img = tf.image.decode_png(png_string)
    img_float = tf.cast(img, tf.float32)
    img_float = tf.reshape(img_float, (480, 640))
    
    images = tf.placeholder("float", (480, 640, 15))
    output = some_operation(images)
    
    sess = tf.Session()
    
    images_array = np.zeros((480, 640, 15), np.float32)
    for i, image in enumerate(filenames):
        images_array[:,:,i] = sess.run(img_float, feed_dict{filename: image})
    
    out = sess.run(output, feed_dict={images: images_array})
    

    我希望这会有所帮助。

    【讨论】:

    • 所以,诀窍是定义一个浮点占位符,然后简单地将一个 numpy 数组传入该占位符,这样它就会自动转换为张量,对吗?
    • 谢谢,我让它工作了。对您的代码示例进行了一些修复(以便后面的人更容易使用): 1. Sesssion -> Session。 2. enumerate(images) -> enumerate(filenames) 或类似的,遍历文件名列表。 3.feed_dict{file_name: image} -> feed_dict={filename: image}
    • 如果我使用的是 Tensorflow 2,我如何将上述逻辑与我的代码相适应,这种设置
    猜你喜欢
    • 2012-07-01
    • 1970-01-01
    • 2020-06-13
    • 2017-04-04
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    相关资源
    最近更新 更多