Слияние слоев на Keras (точечный продукт) - PullRequest
0 голосов
/ 27 сентября 2018

Я следовал учебному руководству Towards Data Science о моделях word2vec и skip -gram, но наткнулся на проблему, которую не могу решить, несмотря на то, что искал ее часами и пытался найти множество неудачных решений.

https://towardsdatascience.com/understanding-feature-engineering-part-4-deep-learning-methods-for-text-data-96c44370bbfa

Шаг, который показывает, как построить архитектуру модели скип-граммы, кажется устаревшим из-за использования слоя Merge из keras.layers.

Мне кажется,много дискуссий по этому поводу, и большинство ответов было о том, что вам нужно использовать функциональный API Keras для объединения слоев.Но проблема в том, что я новичок в 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.

1 Ответ

0 голосов
/ 27 сентября 2018

Это действительно изменилось.Для точечного произведения теперь вы можете использовать слой dot:

from keras.layers import dot
...
dot_product = dot([target, context], axes=1, normalize=False)
...

Вы, конечно, должны установить параметр axis в соответствии с вашими данными.Если вы установите normalize=True, это даст косинусу близость.Для получения дополнительной информации см. документацию .

Чтобы узнать о функциональном API для Keras, в документации есть хорошее руководство по функциональному API .Переключение несложно, если вы уже понимаете последовательный API.

...