我一直在关注 Towards Data Science 关于 word2vec 和 skip-gram 模型的教程,但我偶然发现了一个我无法解决的问题,尽管搜索了很多并尝试了多个不成功的解决方案。https://towardsdatascience.com/understanding-feature-engineering-part-4-deep-learning-methods-for-text-data-96c44370bbfa由于使用了 keras.layers 中的 Merge 层,它向您展示了如何构建 skip-gram 模型架构的步骤似乎已被弃用。我试图做的是将他的一段代码(在 Keras 的 Sequential API 中实现)转换为 Functional API,以通过将其替换为 keras.layers.Dot 层来解决 Merge 层的弃用问题。但是,我仍然停留在将两个模型(词和上下文)合并到最终模型中的这一步,其架构必须是这样的:这是作者使用的代码:from keras.layers import Mergefrom keras.layers.core import Dense, Reshapefrom keras.layers.embeddings import Embeddingfrom keras.models import Sequential# build skip-gram architectureword_model = Sequential()word_model.add(Embedding(vocab_size, embed_size, embeddings_initializer="glorot_uniform", input_length=1))word_model.add(Reshape((embed_size, )))context_model = Sequential()context_model.add(Embedding(vocab_size, embed_size, embeddings_initializer="glorot_uniform", input_length=1))context_model.add(Reshape((embed_size,)))model = Sequential()model.add(Merge([word_model, context_model], mode="dot"))model.add(Dense(1, kernel_initializer="glorot_uniform", activation="sigmoid"))model.compile(loss="mean_squared_error", optimizer="rmsprop")
1 回答
holdtom
TA贡献1805条经验 获得超10个赞
您正在将Model实例传递给图层,但是由于错误表明您需要将 Keras 张量(即图层或模型的输出)传递给 Keras 中的图层。你在这里有两个选择。一种是像这样使用实例的.output属性Model:
dot_output = layers.dot([word_model.output, context_model.output], axes=1, normalize=False)
或者等效地,您可以直接使用输出张量:
dot_output = layers.dot([word_reshape, context_reshape], axes=1, normalize=False)
此外,您需要应用Dense层,然后将层的dot_output实例Input作为 的输入传递Model。所以:
model_output = layers.Dense(1, kernel_initializer='glorot_uniform',
activation='sigmoid')(dot_output)
model = Model([word_input, context_input], model_output)
添加回答
举报
0/150
提交
取消