Hua Ye
Hua Ye

Reputation: 41

AssertionError when add a TimeDistributed(Dense) layer in Keras sequence model

I am building a RNN to predict a many to one question.

#Input_X:
[
[1,2,3,4,5,6,7,8,9,10],
[2,3,4,5,6,7,8,9,10,11]
]

#Input_Y:
[
11,
12
]
#Each number represent a category

X=np.reshape(Input_X,(len(Input_X), 10, 1))

y=np.utils.to_catgeorical(Input_Y)  #one hot encode,

My model setup:

#####This works 
model=Sequential()
model.add(LSTM(256, input_shape(X.shape[1], X.shape[2])))
model.add(Dense(y.shape[1], activation='softmax'))
model.compile(loss='categorical_crossentrophy', optimizer='adam', metrics=['accuracy'])
model.fit(X,y, ........) 

I want to try the TimeDistributed(Dense) layer instead, for example: https://keras.io/layers/wrappers/. So I changed above to below:

model=Sequential()
model.add(LSTM(256, input_shape(X.shape[1], X.shape[2])))
model.add(TimeDistributed(Dense(y.shape[1], activation='softmax')))
model.compile(loss='categorical_crossentrophy', optimizer='adam', metrics=['accuracy'])
model.fit(X,y, ........) 

I am getting a AssertionError. Which report the matrix size is not what expected. What steps I missed?

Upvotes: 2

Views: 1953

Answers (2)

DonAriston
DonAriston

Reputation: 111

return_sequences=True works for me.

In the OP's question, y.shape is (2,1) which has 2 samples and only 1 feature , so it's not suited for Many to Many model.

Upvotes: 0

Dom
Dom

Reputation: 171

I think you need to add return_sequences=True to the LSTM cell

```
model=Sequential()
model.add(LSTM(256, return_sequences=True, input_shape(X.shape[1], X.shape[2])))
model.add(TimeDistributed(Dense(y.shape[1], activation='softmax')))
model.compile(loss='categorical_crossentrophy', optimizer='adam', metrics=['accuracy'])
model.fit(X,y, ........) 

```

Upvotes: 1

Related Questions