gpt4 book ai didi

for-loop - tensorflow 中以下代码的等价物是什么?

转载 作者:行者123 更新时间:2023-12-03 06:20:38 25 4
gpt4 key购买 nike

我有以下功能:

import random

lst = []
for i in range(100):
lst.append(random.randint(1, 10))

print(lst)

buffer = []

# This is the peace of code which I am interested to convert into tensorflow.
for a in lst:
buffer.append(a)

if len(buffer) > 5:
buffer.pop(0)

if len(buffer) == 5:
print(buffer)

因此,从代码中,我需要创建一个缓冲区(可以是 tensorflow 中的变量)。该缓冲区应保存从最后一个转换层提取的特征。在我的例子中,变量将是RNN的输入。

这种方法的优点是,当我们有大图像时,并且当我们需要向 RNN 提供(图像批处理)*(序列长度)*(1 个图像的大小),这将需要将大量图像加载到主内存中。另一方面,根据上面的代码,我们将使用 tensorflow 中的数据集、输入队列或任何其他替代方案一次输入一张图像。因此,我们将在内存中存储大小为:batch_size *equence_length *feature space的特征。此外,我们可以说:

if len(buffer) == n:
# empty out the buffer after using its elements
buffer = [] # Or any other alternative way

我知道我可以向我的网络批量提供图像,但我需要根据一些文献来完成上述代码。

非常感谢任何帮助!!

最佳答案

我尝试使用tf.FIFOQueue ( https://www.tensorflow.org/api_docs/python/tf/FIFOQueue ) 重新生成您的输出。我在下面给出了我的代码,并在必要时添加了注释。

BATCH_SIZE = 20

lst = []
for i in range(BATCH_SIZE):
lst.append(random.randint(1, 10))
print(lst)

curr_data = np.reshape(lst, (BATCH_SIZE, 1)) # reshape the tensor so that [BATCH_SIZE 1]

# queue starts here
queue_input_data = tf.placeholder(tf.int32, shape=[1]) # Placeholder for feed the data

queue = tf.FIFOQueue(capacity=50, dtypes=[tf.int32], shapes=[1]) # Queue define here

enqueue_op = queue.enqueue([queue_input_data]) # enqueue operation
len_op = queue.size() # chek the queue size

#check the length of the queue and dequeue one if greater than 5
dequeue_one = tf.cond(tf.greater(len_op, 5), lambda: queue.dequeue(), lambda: 0)
#check the length of the queue and dequeue five elemts if equals to 5
dequeue_many = tf.cond(tf.equal(len_op, 5), lambda:queue.dequeue_many(5), lambda: 0)

with tf.Session() as session:
for i in range(BATCH_SIZE):
_ = session.run(enqueue_op, feed_dict={queue_input_data: curr_data[i]}) # enqueue one element each ietaration
len = session.run(len_op) # check the legth of the queue
print(len)

element = session.run(dequeue_one) # dequeue the first element
print(element)

但是,以下两个问题与上述代码相关,

  1. 只有使一个出列使多个出列操作可用,并且您看不到队列内的元素(我认为您不需要这个,因为您正在寻找类似于管道的东西。

  2. 我认为tf.cond是实现条件操作的唯一方法(我找不到任何其他类似的合适函数)。然而,由于它类似于 if-then-else 语句,因此当语句为 false 时也必须定义一个操作(而不仅仅是只有 if 语句 而没有 <强>其他)。由于 Tensorflow 就是构建一个图,我认为有必要包含两个分支(当条件为 true 和 false 时)。

此外,可以在此处找到有关 Tensorflow 输入管道的详细解释 ( http://ischlag.github.io/2016/11/07/tensorflow-input-pipeline-for-large-datasets/ )。

希望这有帮助。

关于for-loop - tensorflow 中以下代码的等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47276087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com