在Keras的Permute函数中,参数"dims"是什么意思?

6

我正在尝试在Keras核心层中使用keras.layers.Permute(dims)

根据文档:

dims:整数元组。排列模式,不包括样本维度。索引从1开始。例如,(2, 1)会对输入的第一维和第二维进行排列。

并且文档提供了以下示例代码:

问题是:这个(2,1)是什么意思?如果我的输入特征有10个维度,并且我需要将第1、3、5个特征的顺序更改为(5,1,3),那么我应该将(5,1,3)作为此函数的参数'dim'的值使用吗?

model = Sequential()
model.add(Permute((2, 1), input_shape=(10, 64)))
# now: model.output_shape == (None, 64, 10)
# note: `None` is the batch dimension

我会检查源代码,但只需要确保这里“排列”的含义。 - Ferret Zhang
1个回答

11

permute 函数仅交换轴的位置,而 dims 参数告诉 Keras 您希望最终位置的方式。例如,如果 x 是 4 维的且形状为(None, 2, 4, 5, 8) -(这里的 None 是批量大小),如果您指定 dims = (3, 2, 1, 4),那么将发生以下四个步骤:

  1. 第三维将移动到第一维
  2. 第二维将移动到第二维
  3. 第一维将移动到第三维
  4. 第四维将移动到第四维

记住,索引从 1 开始而不是 0。维度零是批量大小。因此,最终 permute 层的输出形状将为(5, 4, 2, 8)。NumPy 中的函数np.moveaxis也可以做类似的事情。

对于您的示例,dims 应该等于 (5, 2, 1, 4, 3, 6, 7, 8, 9, 10)


你的回答很清晰。 我刚刚检查了源代码,它依赖于K.backend.permute_dimensions,而这又最终依赖于array_ops.transpose(x, perm=pattern)。 - Ferret Zhang
@FerretZhang 好的,这个函数就是我上面写的那样。如果你觉得有用,请接受答案。 - Autonomous
是的。与np.moveaxis相同。 - Ferret Zhang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接