【问题标题】:Slice tensor with variable indexes with Lambda Layer in Keras在 Keras 中使用带有 Lambda 层的可变索引切片张量
【发布时间】:2017-11-16 20:00:46
【问题描述】:

给定一个 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])

【问题讨论】:

  • 你找到解决这个问题的方法了吗?

标签: tensorflow lambda keras layer


【解决方案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

【讨论】:

  • 我遇到了类似的问题,这确实很神奇。是否还有其他语法也可以使用?对我来说,所有 F(x,2,4) 或 F(x, i =2, j = 4) 或 F(x, {'i': 2, 'j':4}) 都会出错。
猜你喜欢
  • 1970-01-01
  • 2021-05-25
  • 2019-10-21
  • 2019-12-17
  • 1970-01-01
  • 1970-01-01
  • 2020-02-16
  • 1970-01-01
  • 2017-06-02
相关资源
最近更新 更多