我试图在TensorFlow中定义一个自定义层,但我在数据处理方面遇到了困难。据我所知,最常见的方法是计算一批输入的输出。这意味着,如果输入张量被称为input
,则input[n]
是该批的第n
个训练输入。
现在让我们假设每个例子由两个向量a
和b
组成,它们将被不同地对待。例如,如果一个训练示例是[[1,2,3],[4,5,6]]
、a=[1,2,3]
和b=[4,5,6]
。
然而,输入由许多这样的例子组成,因此它可以是例如
[
[[1, 2, 3], [4, 5, 6]],
[[10, 27, 3],[4, 45, 61]]
]
有没有一种方法可以选择特定的";行">
你可以用input[n]
选择一个例子,但我想得到一个张量,它是所有向量a
或所有向量b
的列表。如果要选择向量a
,则上面示例的结果将是[[1,2,3],[10,27,13]]
。
是否有一种方法可以定义单个训练示例的操作,并使TensorFlow以有效的方式在批次的所有示例上执行它?
我想您可能正在寻找一个lambda层:
import tensorflow as tf
tensor = [[[1, 2, 3], [4, 5, 6]], [[10, 27, 3],[4, 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,), dtype=int32, numpy=array([12, 15, 18])>)
我刚刚解决了这个问题。我正在寻找切片运算符。给定输入
x=[[[1, 2, 3], [4, 5, 6]],
[[10, 27, 3],[4, 45, 61]]]
你可以通过运行得到十个[[1,2,3],[10,27,13]]
result=x[:,0]
这意味着从第0维度("批量维度"(选择所有元素并且从第1维度选择第一个元素。恐怕lambda层解决方案仅适用于单个训练示例。