2016-12-27 12 views
0

Я следую за классом нейронной сети coursera, и я пытаюсь передать назначения с использованием python + keras вместо октавы.Keras word embedding в четырехграмовой модели

Я хочу предсказать четвертое слово, учитывая предыдущие три. Мои входные документы насчитывают 250 уникальных слов.

Модель должна иметь слой внедрения, который отображает каждое слово в векторное пространство длиной 50 дБ, скрытый слой с 200 нейронами с функцией активации сигмоида и выходной уровень 250 единиц, забивающий вероятность того, что четвертое слово будет равным для тех, кто в моем словаре благодаря активации softmax.

У меня проблемы с размерами. Вот мой код:

from keras.models import Sequential 

    from keras.layers import Dense, Activation, Embedding 


    model = Sequential([Embedding(250,50), 
       Dense(200, activation='sigmoid'), 
       Dense(250, activation='softmax') 

    ]) 



    model.compile(optimizer='rmsprop', 
      loss='categorical_crossentropy', 
      metrics=['accuracy']) 

Но я никогда не скомпилировать модель, так как я встречая следующее сообщение об ошибке:

Exception: Input 0 is incompatible with layer dense_1: expected ndim=2, found ndim=3 

Любой намек будет высоко ценится. Заранее спасибо

ответ

0

От https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html

«Все, что встраивание слой делает для отображения целочисленных входов в векторов, найденных на соответствующий индекс в матрице вложения, т.е. последовательности [1, 2] будут преобразованы к [вложениям [1], вложениям [2]]. Это означает, что выход слоя Embedding будет трехмерным тензором формы (samples, sequence_length, embedding_dim) ».

Ваш уровень внедрения выводит 3 вектора измерения, в то время как плотные слои ожидают 2 dim vecs.

Вы можете следить за учебниками по ссылкам и с некоторыми модами, которые будут соответствовать вашей проблеме.

 Смежные вопросы

  • Нет связанных вопросов^_^