【发布时间】:2019-01-24 19:41:54
【问题描述】:
我是 nlp 的新手,正在尝试从网站上学习 skip gram:
我正在尝试实现skip gram,我遇到的问题是下面的代码是keras的顺序API,它不支持合并(后面的代码如下所示)
word_model.add(Embedding(vocab_size, embed_size,
embeddings_initializer="glorot_uniform",
input_length=1))
word_model.add(Reshape((embed_size, )))
所以我正在尝试将其转换为功能性 api
word_model = Embedding(input_dim=vocab_size, output_dim=embed_size,
embeddings_initializer="glorot_uniform",
input_length=1)
word_model = Reshape(target_shape= (embed_size,))(word_model)
但是我收到以下错误
意外发现<class 'keras.layers.embeddings.Embedding'> 类型的实例。期望一个符号张量实例。
我尝试过重塑图层和背景,但仍然无法正常工作。
请建议如何转换或使其工作。
提前致谢。
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'))
【问题讨论】:
-
您的 Input 实例在哪里?您没有向嵌入层提供任何输入
-
感谢您的响应,它来自另一个名为 skip gram 的函数,然后在运行 epochs 时调用此模型
-
你不明白我的意思,我是说 keras.layers.Input 的一个实例
-
我只是根据另一条评论添加了输入,所以在这种情况下,我必须为 word_model 提供两个输入,为 context_model 提供另一个输入,稍后当我实例化模型时必须说 model = Model(inputs = (inp, inp1), 输出 =mo)