2017-05-01 12 views
1

태그가 지정된 문장의 목록이 있습니다. I는 다음의 방식으로 각각의 변환 된 각 단어 들어Keras : POS 태그 작업을위한 임베딩 및 LSTM 레이어

  • 상대 한 핫 인코딩 방식 (input_dim 차원의 벡터)를 얻는다;
  • 아래 예에서 설명한대로 사전 패딩을 삽입하십시오.
  • 크기가 time_steps 인 창을 사용하여 각 문장을 len(sentence) 개의 하위 문장으로 분할합니다 (다음 단어의 예상 내용을 알기 위해). time_steps=2 등을 사용

은 단일 문장 ["this", "is", "an", "example"]가 형질 전환되어 고유리스트로서 서브 문장을 고려하여, 마지막에

[ 
    [one_hot_enc("empty_word"), one_hot_enc("empty_word")], 
    [one_hot_enc("empty_word"), one_hot_enc("this")], 
    [one_hot_enc("this"), one_hot_enc("is")], 
    [one_hot_enc("is"), one_hot_enc("an")], 
] 

열차 데이터의 형상 X_train(num_samples, time_steps, input_dim)이고 , 여기서 :

  • input_dim : 내 어휘의 크기;
  • time_steps : LSTM에 사용할 시퀀스의 길이.
  • num_samples : 샘플 수 (하위 문장);

는 지금, 나는 작은 연속 차원 공간에 각 단어를지도하기 위해에서는, Embedding 레이어를 사용하려면, 나는이 상황이 위와 같이 구축 사용하는에 LSTM.

나는이 같은 시도 :

model = Sequential() 
model.add(InputLayer(input_shape=(time_steps, input_dim))) 
model.add(Embedding(input_dim, embedding_size, input_length=time_steps)) 
model.add(LSTM(32)) 
model.add(Dense(output_dim)) 
model.add(Activation('softmax')) 

를하지만 나에게 다음과 같은 오류 제공 :

ValueError: Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=4 

내가 실종 무엇을? 내가하려고하는 것에 논리적 인 오류가 있습니까?

답변

1

입력 레이어를 제거하고 삽입 레이어를 네트워크의 첫 번째 레이어로 만들면됩니다. 또는 "input_dim"을 제거하여 입력 레이어를 구성 할 수 있습니다.

model.add(InputLayer(input_shape=(time_steps,)))