我一直在关注《数据科学》关于word2vec和skip-gram模型的教程,但是我偶然发现了一个我无法解决的问题,尽管我花了几个小时寻找这个问题,并尝试了很多不成功的解决方案。
由于使用了keras.layers中的合并层,它向您展示如何构建skip-gram模型体系结构的步骤似乎已被弃用。
我对此进行了很多讨论,大多数的答案是现在需要使用Keras的函数API来合并层。但问题是,我完全是Keras的初学者,不知道如何将我的代码从顺序转换为函数,下面是作者使用(我复制)的代码:
from keras.layers import Merge
from keras.layers.core import Dense, Reshape
from keras.layers.embeddings import Embedding
from keras.models import Sequential
# build skip-gram architecture
word_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")
# view model summary
print(model.summary())
# visualize model structure
from IPython.display import SVG
from keras.utils.vis_utils import model_to_dot
SVG(model_to_dot(model, show_shapes=True, show_layer_names=False,
rankdir='TB').create(prog='dot', format='svg'))
当我运行块时,会显示以下错误:
ImportError Traceback (most recent call last)
<ipython-input-79-80d604373468> in <module>()
----> 1 from keras.layers import Merge
2 from keras.layers.core import Dense, Reshape
3 from keras.layers.embeddings import Embedding
4 from keras.models import Sequential
5
ImportError: cannot import name 'Merge'
我在这里要问的是如何将这个序列转换成一个功能性API结构的一些指导。
这确实改变了。对于点积,现在可以使用
dot
层:当然,您必须根据数据设置
axis
参数。如果设置normalize=True
,这将提供余弦近似值。有关详细信息,请参见the documentation。要了解Keras的函数API,文档中有一个很好的guide to the functional API。如果您已经理解了顺序API,那么切换并不困难。
相关问题 更多 >
编程相关推荐