从TensorFlow张量获取行

问题描述

我正在尝试在TensorFlow中定义一个自定义层,但是我正在努力处理数据。据我了解,最常见的方法是计算一批输入的输出。这意味着,如果将输入张量称为input,则input[n]是批次的第n个训练输入。

现在让我们假设每个示例都包含两个向量ab,它们将被区别对待。例如,如果一个训练示例是[[1,2,3],[4,5,6]]a=[1,3]b=[4,6]

但是,输入由许多此类示例组成,因此可能是

[
    [[1,6]],[[10,27,45,61]]
]

是否可以选择特定的“行”?

您可以使用input[n]选择一个示例,但是我想得到一个张量,其中有一个所有矢量a或所有矢量b的列表。如果要选择向量[[1,[10,13]],则上面示例的结果将为a

是否有其他方法可以为单个训练示例定义操作,并使TensorFlow以高效的方式在批次的所有示例上执行操作?

解决方法

我认为您可能正在寻找lambda层:

import tensorflow as tf

tensor = [[[1,2,3],[4,5,6]],[[10,27,45,61]]]

ds = tf.data.Dataset.from_tensor_slices(tensor) 

times_2_times_3 = lambda x: (tf.multiply(x[0],2),tf.multiply(x[1],3))

layer = tf.keras.layers.Lambda(times_2_times_3)

layer(next(iter(ds)))
(<tf.Tensor: shape=(3,),dtype=int32,numpy=array([2,4,6])>,<tf.Tensor: shape=(3,numpy=array([12,15,18])>)
,

我刚刚解决了。我正在寻找切片运算符。有了输入

x=[[[1,61]]]

您可以通过运行获得十[[1,[10,13]] result=x[:,0] 这意味着从第0维(“批量”)中选择所有元素,并从第1维中选择第一个元素。 恐怕lambda层解决方案仅适用于单个训练示例。