使用Keras中的Lambda图层的可变索引切片张量

时间:2017-11-16 20:00:46

标签: tensorflow lambda keras layer

给定一个3D输入张量(让我们说(8,32,100))我试图在Keras中实现一个Lambda图层来选择这样一个输入向量的片段。

如果我一直想要相同的切片(例如位于第二维中位置2和4之间的所有输入),我认为这样可行:

Lambda(lambda x: x[:,2:4,:], output_shape=(3,100,), name="lambda_layer")(input)

但就我而言,对于每个培训样本,我都有兴趣访问不同的切片,然后将它们连接到Dense层。我在这些行下面尝试了这个选项,但是我无法将标量(i和j)提供给模型,因为它们将被视为元组(并且定义shape=(1)无效)。

i = Input(shape=(1,), dtype="int32") j = Input(shape=(1,), dtype="int32") Lambda(lambda x: x[:,i:j,:], output_shape=(3,100,), name="lambda_layer")([input,i,j])

1 个答案:

答案 0 :(得分:1)

你应该可以这样做:

F = Lambda(lambda x, i, j: x[:,i:j,:], output_shape=(3,100,), name="lambda_layer")  # Define your lambda layer
F.arguments = {'i': 2, 'j':4}  # Update extra arguments to F
F(x)  # Call F

您可以在此处查看arguments如何作为kwargs传递给您的函数:https://github.com/fchollet/keras/blob/bcef86fad4227dcf9a7bb111cb6a81e29fba26c6/keras/layers/core.py#L651