Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tensorflow-按批次索引对占位符进行分组_Python_Tensorflow_Deep Learning_Slice_Tensor - Fatal编程技术网

Python Tensorflow-按批次索引对占位符进行分组

Python Tensorflow-按批次索引对占位符进行分组,python,tensorflow,deep-learning,slice,tensor,Python,Tensorflow,Deep Learning,Slice,Tensor,给定一个具有两个或多个不同维度占位符的网络,例如 x1 = tf.placeholder(tf.int32, [None, seq_len]) x2 = tf.placeholder(tf.int32, [None, seq_len]) xn = tf.placeholder(tf.int32, [None, None, seq_len] 每个占位符中的第一个维度对应于小批量大小seq_len是输入的长度。第二个维度类似于一个输入列表,我需要与minibatch中每个索引的x1和x2一起处理这

给定一个具有两个或多个不同维度占位符的网络,例如

x1 = tf.placeholder(tf.int32, [None, seq_len])
x2 = tf.placeholder(tf.int32, [None, seq_len])
xn = tf.placeholder(tf.int32, [None, None, seq_len]
每个占位符中的第一个维度对应于小批量大小
seq_len
是输入的长度。第二个维度类似于一个输入列表,我需要与minibatch中每个索引的
x1
x2
一起处理这些输入。如何对这些张量进行分组,以便按批量索引对其进行操作

比如说

x1 = [[1, 2, 3], [4, 5, 6]]
x2 = [[7, 8, 9], [8, 7, 6]]
xn = [[[1, 5, 2], [7, 2, 8], [3, 2, 5]], [[8, 9, 8]]]
我需要将
x1[0]即[1,2,3]
x2[0]即[7,8,9]
xn[0]即[1,5,2],[7,2,8],[3,2,5]
放在一起,因为我需要对所有
I
执行
x1[I]
xn[I]
中的每个元素之间的矩阵运算


请注意,
xn
的维度是参差不齐的。

仍然不确定我是否理解您的问题。如果我理解正确,您的挑战来自
xn
维度的参差不齐性质。我有下面的方法来“展开”批次索引。结果是一个大小为batch_size的数组;数组中的每个元素都是张量。当然,在计算这些张量之前,您可以对所有这些张量执行其他操作

我必须使用来对
xn[I]
的每个元素执行操作,因为它的第一个维度是动态的。不过,可能存在更好的解决方案

x1 = np.array([[1, 2, 3]])
xn = np.array([[[1, 5, 2], [7, 2, 8], [3, 2, 5]]])

batch_size = x1.shape[0]

result = []
for batch_idx in range(batch_size):
  x1_i = x1[batch_idx]
  xn_i = xn[batch_idx]
  result.append(tf.scan(fn=lambda a, x: x * x1_i, elems=xn_i, initializer=x1_i))
with tf.Session() as sess:
  print sess.run([result[0]])

# result, this is x1[0] multiply each element in xn[0] for all i (element-wise). 
# free free to plug in your own matrix operations in the `fn` arg of `tf.scan`.
  [array([[ 1,  10, 6],
          [ 7,  4, 24],
          [ 3,  4, 15]])]

问题到底是什么?@JonH
我如何将这些张量分组,以便通过批索引对其进行操作。
看起来这些都是输入数据。为什么不在预处理中将x1[0],x[2],xn[0]组合在一起?否则,您可能需要使用切片从每个批中获取元素,并依赖循环来处理这些组。@greeness,我认为它们已经按批索引分组在一起了。只是对于每个批次idx,我需要通过与
x1
x2
相同的体系结构来传递
xn
中的输入,但是3D与2D问题导致了建议
tf.scan
的问题。我也一直在研究
tf.tile