问题描述
我正在尝试在TensorFlow中定义一个自定义层,但是我正在努力处理数据。据我了解,最常见的方法是计算一批输入的输出。这意味着,如果将输入张量称为input
,则input[n]
是批次的第n
个训练输入。
现在让我们假设每个示例都包含两个向量a
和b
,它们将被区别对待。例如,如果一个训练示例是[[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层解决方案仅适用于单个训练示例。