在Keras序列模型中添加TimeDistributed(Dense)图层时的AssertionError

时间:2017-08-02 18:04:53

标签: keras rnn

我正在建立一个RNN来预测多对一的问题。

#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,

我的模型设置:

#####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, ........) 

我想尝试使用TimeDistributed(Dense)图层,例如:https://keras.io/layers/wrappers/。所以我将上面的内容改为:

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, ........) 

我收到了AssertionError。哪个报告矩阵大小不是预期的。 我错过了哪些步骤?

2 个答案:

答案 0 :(得分:1)

我认为您需要将return_sequences=True添加到LSTM单元格

```
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, ........) 

```

答案 1 :(得分:0)

return_sequences=True对我有用。

在OP的问题中,y.shape是(2,1),它有2个样本,只有1个特征,因此不适合“多对多”模型。