检查目标时出错:预期 time_distributed_5 有 3 个维度,但得到形状为 (14724, 1) 的数组

2024-02-18

尝试建立单输出回归模型,但最后一层似乎有问题

inputs = Input(shape=(48, 1))
lstm = CuDNNLSTM(256,return_sequences=True)(inputs)
lstm = Dropout(dropouts[0])(lstm)

#aux_input
auxiliary_inputs = Input(shape=(48, 7))
auxiliary_outputs = TimeDistributed(Dense(4))(auxiliary_inputs)
auxiliary_outputs = TimeDistributed(Dense(7))(auxiliary_outputs)

#concatenate
output = keras.layers.concatenate([lstm, auxiliary_outputs])

output = TimeDistributed(Dense(64, activation='linear'))(output)
output = TimeDistributed(Dense(64, activation='linear'))(output)
output = TimeDistributed(Dense(1, activation='linear'))(output)

model = Model(inputs=[inputs, auxiliary_inputs], outputs=[output])

我是 keras 新手...我收到以下错误

ValueError:检查目标时出错:预期 time_distributed_5 有 3 个维度,但得到了形状为 (14724, 1) 的数组


好吧,伙计们,我想我找到了解决办法 根据 -https://keras.io/layers/wrappers/ https://keras.io/layers/wrappers/它表示我们正在对每个时间步应用密集层(在我的例子中,我有 48 个时间步)。因此,我的最后一层的输出将是(batch_size、timesteps、dimensions),如下所示:

output = TimeDistributed(Dense(1, activation='linear'))(output)

将是 (?,48,1) 因此尺寸不匹配。但是,如果我想将其转换为单一回归输出,我们将必须展平最终的 TimeDistributed 层

所以我添加了以下几行来修复它:

output = Flatten()(output)
output = (Dense(1, activation='linear'))(output)

所以现在时间分布层扁平化为 49 个输入(看起来包含偏置输入)到最终的密集层为单个输出。

好的,代码运行良好,我得到了正确的结果(模型学习)。我唯一的疑问是,将 TimeDistributed 层展平为简单密集层以获得如上所述的结果在数学上是否可行?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查目标时出错:预期 time_distributed_5 有 3 个维度,但得到形状为 (14724, 1) 的数组 的相关文章

随机推荐