在tf.while\u循环期间,将Tensorflow索引到python列表中

在tf.while\u循环期间,将Tensorflow索引到python列表中,tensorflow,Tensorflow,我有一个恼人的问题,我不知道如何解决它 我正在使用数据集阅读器从CSV中批量读取数据,并希望收集某些列。读取器返回一个张量元组,根据我使用的读取器的不同,列通过整数或字符串进行索引 我可以很容易地在python中执行for循环,并对我想要的列进行切片,但是我希望在tf.while_循环中这样做,以利用并行执行 这就是我的问题所在——while循环中的迭代器是基于张量的,我不能用它来索引数据集。如果我尝试评估它,我会得到一个关于会话不一样的错误,等等 如何使用while循环(或map函数)并使该函

我有一个恼人的问题,我不知道如何解决它

我正在使用数据集阅读器从CSV中批量读取数据,并希望收集某些列。读取器返回一个张量元组,根据我使用的读取器的不同,列通过整数或字符串进行索引

我可以很容易地在python中执行for循环,并对我想要的列进行切片,但是我希望在tf.while_循环中这样做,以利用并行执行

这就是我的问题所在——while循环中的迭代器是基于张量的,我不能用它来索引数据集。如果我尝试评估它,我会得到一个关于会话不一样的错误,等等

如何使用while循环(或map函数)并使该函数能够在不计算或运行迭代器张量的情况下索引到python列表/dict中

简单的例子:

        some_data = [1,2,3,4,5]

        x = tf.constant(0)
        y = len(some_data)
        c = lambda x: tf.less(x, y)
        b = lambda x: some_data[x] <--- You cannot index like this!

        tf.while_loop(c, b, [x])
some_data=[1,2,3,4,5]
x=tf.常数(0)
y=len(某些_数据)
c=λx:tf.小于(x,y)

b=lambda x:some_data[x]这是否符合您的要求?它除了打印值之外什么也不做

import tensorflow as tf
from tensorflow.python.framework import tensor_shape

some_data = [11,222,33,4,5,6,7,8]

def func( v ):
    print (some_data[v])
    return some_data[v]

with tf.Session() as sess:
    r = tf.while_loop(
        lambda i, v: i < 4,
        lambda i, v: [i + 1, tf.py_func(func, [i], [tf.int32])[0]],
        [tf.constant(0), tf.constant(2, tf.int32)],
        [tensor_shape.unknown_shape(), tensor_shape.unknown_shape()])

    r[1].eval()
将tensorflow导入为tf
从tensorflow.python.framework导入tensor_形状
一些_数据=[11222,33,4,5,6,7,8]
def func(五):
打印(一些数据[v])
返回一些_数据[v]
使用tf.Session()作为sess:
r=tf.while\u循环(
λi,v:i<4,
lambda i,v:[i+1,tf.py_func(func[i],[tf.int32])[0]],
[tf.常数(0),tf.常数(2,tf.int32)],以及,
[张量_形。未知_形(),张量_形。未知_形()
r[1].eval()
它打印

十一, 4. 222 三十三


顺序每次都会改变,但我想控制依赖关系可能会有用。

这是否符合您的要求?它除了打印值之外什么也不做

import tensorflow as tf
from tensorflow.python.framework import tensor_shape

some_data = [11,222,33,4,5,6,7,8]

def func( v ):
    print (some_data[v])
    return some_data[v]

with tf.Session() as sess:
    r = tf.while_loop(
        lambda i, v: i < 4,
        lambda i, v: [i + 1, tf.py_func(func, [i], [tf.int32])[0]],
        [tf.constant(0), tf.constant(2, tf.int32)],
        [tensor_shape.unknown_shape(), tensor_shape.unknown_shape()])

    r[1].eval()
将tensorflow导入为tf
从tensorflow.python.framework导入tensor_形状
一些_数据=[11222,33,4,5,6,7,8]
def func(五):
打印(一些数据[v])
返回一些_数据[v]
使用tf.Session()作为sess:
r=tf.while\u循环(
λi,v:i<4,
lambda i,v:[i+1,tf.py_func(func[i],[tf.int32])[0]],
[tf.常数(0),tf.常数(2,tf.int32)],以及,
[张量_形。未知_形(),张量_形。未知_形()
r[1].eval()
它打印

十一, 4. 222 三十三


顺序每次都会改变,但我猜
tf。控制依赖项
可能有助于控制这种情况。

通过一个简单的例子就更容易理解,但如果您确实需要使用
tf。虽然循环
,但您不能在其中索引列表,你需要把你的列表变成一个TensorFlow张量。用一个简单的例子会更容易理解,但是如果你真的需要使用一个
tf。虽然你不能在其中索引一个列表,但是你需要把你的列表变成一个TensorFlow张量。