【发布时间】:2018-10-23 22:31:53
【问题描述】:
我在理解如何从 Keras 模型中检索预测时遇到了一些问题。
我想构建一个预测下一个单词的简单系统,但我不知道如何输出每个单词的完整概率列表。
这是我现在的代码:
model = Sequential()
model.add(Embedding(vocab_size, embedding_size, input_length=55, weights=[pretrained_weights]))
model.add(Bidirectional(LSTM(units=embedding_size)))
model.add(Dense(23690, activation='softmax')) # 23690 is the total number of classes
model.compile(loss='categorical_crossentropy',
optimizer = RMSprop(lr=0.0005),
metrics=['accuracy'])
# fit network
model.fit(np.array(X_train), np.array(y_train), epochs=10)
score = model.evaluate(x=np.array(X_test), y=np.array(y_test), batch_size=32)
prediction = model.predict(np.array(X_test), batch_size=32)
第一个问题: 训练集:句子列表(向量化并转换为索引)。 我在网上看到一些例子,人们像这样划分 X_train 和 y_train:
X, y = sequences[:,:-1], sequences[:,-1]
y = to_categorical(y, num_classes=vocab_size)
我是否应该转换 X_train 和 y_train 以获得滑动序列,例如我有
X = [[10, 9, 4, 5]]
X_train = [[10, 9], [9, 4], [4, 5]]
y_train = [[9], [4], [5]]
第二个问题: 现在模型只为每个输入返回一个元素。如何返回每个单词的预测?我希望能够为每个单词提供一组输出单词,而不是单个输出。 我读到我可以使用 TimeDistributed 层,但输入有问题,因为 Embedding 层采用 2D 输入,而 TimeDistributed 采用 3D 输入。
感谢您的帮助!
【问题讨论】:
标签: python neural-network nlp keras