Dimensions Not Matching In Keras Lstm Model
Solution 1:
The error message is a bit misleading in your case. Your output node of the network is called timedistributed_1
because that's the last node in your sequential model. What the error message is trying to tell you is that the output of this node does not match the target your model is fitting to, i.e. your labels trainY
.
Your trainY
has a shape of (n, output_dim, look_ahead)
, so (100, 3, 24)
but the network is producing an output shape of (batch_size, input_dim, look_ahead)
. The problem in this case is that output_dim
!= input_dim
. If your time dimension changes you may need padding or a network node that removes said timestep.
Solution 2:
I think the problem is that you expect output_dim
(!= input_dim
) at the output of TimeDistributed
, while it's not possible. This dimension is what it considers as the time dimension: it is preserved.
The input should be at least 3D, and the dimension of index one will be considered to be the temporal dimension.
The purpose of TimeDistributed
is to apply the same layer to each time step. You can only end up with the same number of time steps as you started with.
If you really need to bring down this dimension from 4 to 3, I think you will need to either add another layer at the end, or use something different from TimeDistributed
.
PS: one hint towards finding this issue was that output_dim
is never used when creating the model, it only appears in the validation data. While it's only a code smell (there might not be anything wrong with this observation), it's something worth checking.
Post a Comment for "Dimensions Not Matching In Keras Lstm Model"