尝试构建单个输出回归模型,但最后一层似乎存在问题
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)
答案 0 :(得分:1)
好的伙计们,我想我找到了解决办法 根据 - 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图层压缩为简单的密集图层,以获得如上所述的结果?
答案 1 :(得分:0)
您能否提供有关问题背景的更多信息?测试数据或至少更多代码。你为什么一开始就选择这种架构?一个更简单的架构(只是LSTM)可以解决这个问题吗?你在回归什么?使用线性激活函数堆叠多个TimeDistributed Dense图层可能不会给模型增加太多。