Keras TimeDistributed Dense与softmax的关系未按时间步标准化

时间:2019-02-05 11:52:35

标签: keras

这最终与问题中的问题不同

我有一个非常简单的Keras模型,可以接受时间序列数据。我想使用循环层来预测相同尺寸的新序列,最后使用softmax在每个时间步提供归一化结果。

这是我的模型的样子。

x = GRU(256, return_sequences=True)(x)
x = TimeDistributed(Dense(3, activation='softmax'))(x)

想象一下输入是这样的:

[
  [0.25, 0.25, 0.5],
  [0.3, 0.3, 0.4],
  [0.2, 0.7, 0.1],
  [0.1, 0.1, 0.8]
]

我希望输出具有相同的形状,并在每一步进行标准化,例如:

[
  [0.15, 0.35, 0.5],
  [0.35, 0.35, 0.3],
  [0.1, 0.6, 0.3],
  [0.1, 0.2, 0.7]
]

但是我实际上得到的结果是,每行元素的总和实际上是四分之一(或行数的任何分数),而不是1。

简单地说,我认为TimeDistributed的想法是将Dense层应用于每个时间步,因此有效地将具有softmax激活的Dense重复应用于每个时间步。但是我似乎得到的结果看起来像是对时间步长输出矩阵中的所有元素进行了标准化。

由于我似乎理解不正确,是否有一种方法可以在每个时间步长(每个步长标准化为1)下获得密集的softmax结果,而不必依次预测每个时间步长?

1 个答案:

答案 0 :(得分:1)

问题似乎不在于使用TimeDistributed包装器处理Softmax,而是我的预测函数出错,它是对整个矩阵求和而不是逐行求和。