用Keras进行序列学习的序列

时间:2018-05-21 10:37:18

标签: python tensorflow neural-network keras lstm

我试图在Keras中实现一个序列来排序学习任务。 我希望模型学习以下转换。 F(X) - > ÿ 其中X是

  [[0., 0., 1., 0., 1., 1., 0., 0., 0., 0.],
   [1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
   [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
   [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
   [0., 1., 0., 1., 0., 0., 0., 0., 0., 0.],
   [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
   [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
   [1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
   [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],
   [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.]]

和Y由

给出
  [[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
   [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],
   [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],
   [0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],
   [0., 1., 0., 1., 0., 0., 0., 0., 0., 0.]]

X和Y数组中的每个 代表句子中的单词。但是,每个单词在输入序列中有十个特征(即X),在Y中只有五个特征。我尝试使用以下代码实现模型。

model = Sequential()
LAYER_NUM = 3
HIDDEN_DIM = 900
model = Sequential()
model.add(Bidirectional(LSTM(HIDDEN_DIM, return_sequences=True), input_shape = (None, 10)))
print("YEAH!")
for i in range(LAYER_NUM - 1):
    model.add(Bidirectional(LSTM(HIDDEN_DIM, return_sequences=True)))
    model.add(Dropout(0.2))
model.add(TimeDistributed(Dense(5)))
model.add(Activation('softmax'))
model.compile(loss="categorical_crossentropy", optimizer="rmsprop", metrics=["accuracy"])

然而,这引起了以下错误。

  

ValueError:检查目标时出错:预期activation_3有   形状(10,5)但有阵列形状(5,10)

有人可以指导我吗?

1 个答案:

答案 0 :(得分:1)

错误消除了它。你说代表单词,在Keras模型中你会有。因此,您必须转置数据X.TY.T来修复它。