python - tensorflow 中是否有与list.append()类似的函数?

标签 python tensorflow

最近遇到一个问题,将每个图像二进制代码(tf.string类型)在形状占位符中一一进行预处理

[batch_size] = [None]

然后我需要在预处理后连接每个结果。

显然我无法创建一个 FOR 句子来解决这个问题。

所以,我使用 tf.while_loop 来做到这一点。它看起来像:

in_ph = tf.placeholder(shape=[None], dtype=tf.string)
i = tf.constant(0)
imgs_combined = tf.zeros([1, 224, 224, 3], dtype=tf.float32)

def body(i, in_ph, imgs_combined):
    img_content = tf.image.decode_jpeg(in_ph[i], channels=3)
    c_image = some_preprocess_fn(img_content)
    c_image = tf.expand_dims(c_image, axis=0)
    # c_image shape [1, 224, 224, 3]
    return [tf.add(i, 1), in_ph, tf.concat([imgs_combined, c_image], axis=0)]

def condition(i, in_ph, imgs_combined):
    return tf.less(i, tf.shape(in_ph)[0])

_, _, image_4d = tf.while_loop(condition,
          body,
          [i, in_ph, imgs_combined],
          shape_invariants=[i.get_shape(), in_ph.get_shape(), tf.TensorShape([None, 224, 224, 3])])

image_4d = image_4d[1:, ...]

这段代码运行正常,没有任何问题。 但在这里,我使用 imgs_combined 来迭代地一张一张地连接每个图像。 imgs_combined 使用 imgs_combined = tf.zeros([1, 224, 224, 3], dtype=tf.float32) 初始化,在这种情况下我可以使用 tf.concat执行此操作,并在最终结果中删除了第一个元素。

但在正常情况下,这个函数就像一个list.append()操作。

X = []
for i, datum in enumerate(data):
    x.append(datum)

请注意,这里我仅使用空列表初始化 X。

我想知道tensorflow中是否有类似list.append()的函数?

或者..这段代码有更好的实现吗? 我对初始化imgs_combined感到很奇怪。

最佳答案

您可以尝试tf.TensorArray()( link ),它支持动态长度,可以写入或读取
值到指定的索引。

import tensorflow as tf

def condition(i, imgs_combined):
    return tf.less(i, 5)
def body(i, imgs_combined):
    c_image = tf.zeros(shape=(224, 224, 3),dtype=tf.float32)
    imgs_combined = imgs_combined.write(i, c_image)
    return [tf.add(i, 1), imgs_combined]

i = tf.constant(0)
imgs_combined = tf.TensorArray(dtype=tf.float32,size=1,dynamic_size=True,clear_after_read=False)

_, image_4d = tf.while_loop(condition,body,[i, imgs_combined])
image_4d = image_4d.stack()

with tf.Session() as sess:
    image_4d_value = sess.run(image_4d)
    print(image_4d_value.shape)

#print
(5, 224, 224, 3)

关于python - tensorflow 中是否有与list.append()类似的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53968334/

相关文章:

python - 取一个张量的一个元素,该元素也在另一个张量中

python - Tensorflow GPU 利用率低于 10%

tensorflow - 如何在TensorFlow中计算CNN的准确性

python - 一个非常简单的正则表达式的问题

python - 将 'through' 用于 ManyToMany 字段时如何向南迁移?

python - 调度一个类方法

tensorflow - 将元数据添加到tensorflow lite文件

python - 类型错误 : Expected binary or unicode string, 得到了项目 {

python - 出现错误,但包已安装

python - 从 RDD 中的单词过滤 Spark 数据框中的行